为kinesis firehose cloudformation启用cloudwatch日志。

问题描述 投票:5回答:1

我想为我的Firehose捕捉Cloudwatch日志,以便在发送数据时发现任何错误。S3 目的地。我创建了一个云表单模板,其中包含日志记录的详细信息

        "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:*:*:*"
    ]
   }

当我触发模板时,我没有发现任何loggroupname和streamname在cloudwatch日志中被创建。

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

作为一个变通方法

我正在手动创建 AWS::Logs::LogGroup 资源名称为 /aws/firehose/firehose-devAWS::Logs::LogStream 资源名称为 s3logs.


如果我们使用控制台配置firehose deliverystream,firehose也会自动创建日志组名和日志流名。

Firehose不能像aws lambda那样通过cloudformation配置时自动创建loggroup名和logstream名吗?

谢谢任何帮助,感激不尽

amazon-web-services amazon-cloudformation amazon-kinesis-firehose amazon-cloudwatchlogs
1个回答
0
投票

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

在 Firehose 的情况下,您可以在后台创建日志组。AWS::Logs::LogGroupAWS::Logs::LogStream CloudFormation中的资源。例如(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
© www.soinside.com 2019 - 2024. All rights reserved.