我正在尝试捕获Firewatch的Cloudwatch日志,以便在将数据发送到S3
目标时发现任何错误。我创建了一个包含日志记录详细信息的cloudformation模板
"CloudWatchLoggingOptions" : {
"Enabled" : "true",
"LogGroupName": "/aws/firehose/firehose-dev", -->firehose-dev is my firehosedeliverystream name
"LogStreamName" : "s3logs"
},
我已授予Firehose必要的IAM权限,以便创建loggroupname
和streamname
。
{
"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一样自动创建日志组名称和日志流名称吗?
谢谢 感谢您的帮助
答案 0 :(得分:2)
其取决于资源。有些资源会为您创建日志组,有些则不会。有时控制台会在后台创建它们。使用CloudFormation时,通常您必须自己做所有事情。
在使用Firehose的情况下,您可以在CloudFormation中创建AWS::Logs::LogGroup
和AWS::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