启用CloudWatch日志以获取运动Firehose Cloudformation

时间:2018-12-05 12:07:52

标签: amazon-web-services amazon-cloudformation amazon-kinesis-firehose amazon-cloudwatchlogs

我正在尝试捕获Firewatch的Cloudwatch日志,以便在将数据发送到S3目标时发现任何错误。我创建了一个包含日志记录详细信息的cloudformation模板

        "CloudWatchLoggingOptions" : {
          "Enabled" : "true",
          "LogGroupName": "/aws/firehose/firehose-dev", -->firehose-dev is my firehosedeliverystream name 
          "LogStreamName" : "s3logs"
        },

我已授予Firehose必要的IAM权限,以便创建loggroupnamestreamname

      {
    "Sid": "",
    "Effect": "Allow",
    "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
    ],
    "Resource": [
        "arn:aws:logs:*:*:*"
    ]
   }

当我触发模板时,我没有在Cloudwatch日志中找到任何日志组名和流名。

但是,当我们对AWS::Lambda资源授予相同的IAM权限时,它将自动创建一个日志组名称(即/aws/lambda/mylambdaname)并将日志发送到该组。但是,为什么这种情况不适用于firehose?

一种解决方法

我正在手动创建名称为AWS::Logs::LogGroup的{​​{1}}资源和名称为/aws/firehose/firehose-dev的{​​{1}}资源。


  

firehose还将创建日志组名称和日志流名称   自动,如果我们使用   控制台。

firehose无法通过cloudformation配置时像aws lambda一样自动创建日志组名称和日志流名称吗?

谢谢 感谢您的帮助

1 个答案:

答案 0 :(得分:2)

其取决于资源。有些资源会为您创建日志组,有些则不会。有时控制台会在后台创建它们。使用CloudFormation时,通常您必须自己做所有事情。

在使用Firehose的情况下,您可以在CloudFormation中创建AWS::Logs::LogGroupAWS::Logs::LogStream资源。例如(yaml):

  MyFirehoseLogGroup:
    Type: AWS::Logs::LogGroup
    Properties: 
      RetentionInDays: 1

  MyFirehoseLogStream:      
    Type: AWS::Logs::LogStream
    Properties: 
      LogGroupName: !Ref MyFirehoseLogGroup

然后,当您定义AWS::KinesisFirehose::DeliveryStream时,可以引用它们:

CloudWatchLoggingOptions: 
    Enabled: true
    LogGroupName: !Ref MyFirehoseLogGroup
    LogStreamName: !Ref MyFirehoseLogStream