为 kinesis firehose cloudformation 启用 cloudwatch 日志

Pri*_*ate 7 amazon-web-services aws-cloudformation amazon-cloudwatchlogs amazon-kinesis-firehose

我正在尝试为我的 Firehose 捕获 Cloudwatch 日志,以在将数据发送到S3目的地时发现任何错误。我创建了一个带有日志详细信息的 cloudformation 模板

"CloudWatchLoggingOptions" : {
    "Enabled" : "true",
    "LogGroupName": "/aws/firehose/firehose-dev", -->firehose-dev is my firehosedeliverystream name 
    "LogStreamName" : "s3logs"
},
Run Code Online (Sandbox Code Playgroud)

我已授予必要的 IAM 权限来创建loggroupnamestreamname.

{
    "Sid": "",
    "Effect": "Allow",
    "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
    ],
    "Resource": [
        "arn:aws:logs:*:*:*"
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

作为解决方法

我手动创建AWS::Logs::LogGroup与名称资源/aws/firehose/firehose-devAWS::Logs::LogStream资源使用的名称s3logs


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

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

谢谢任何帮助表示赞赏

Mar*_*cin 7

它的资源依赖。有些资源将为您创建日志组,有些则不会。有时控制台确实会在后台创建它们。当您使用 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
Run Code Online (Sandbox Code Playgroud)

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

CloudWatchLoggingOptions: 
  Enabled: true
  LogGroupName: !Ref MyFirehoseLogGroup
  LogStreamName: !Ref MyFirehoseLogStream
Run Code Online (Sandbox Code Playgroud)