我想使用 Terraform 向 Cloudwatch 日志组添加订阅过滤器,以便 每当有新的日志事件时都会调用我的 lambda。当我使用 AWS 控制台手动执行此操作时,我只需在 Cloudwatch 中添加过滤器,并且基于资源的策略会自动添加到我的 lambda 中,如下所示
{
"StringEquals": {
"AWS:SourceAccount": "111"
},
"ArnLike": {
"AWS:SourceArn": "arn:aws:logs:myRegion:111:log-group:/aws/apigateway/id/stage:*"
}
}
而且效果很好!
现在我想做完全相同的事情,但是使用 terraform 但它不起作用。 我定义了以下资源:
resource "aws_cloudwatch_log_subscription_filter" "sub" {
name = "test"
log_group_name = "/aws/apigateway/id/stage"
destination_arn = "arn:aws:lambda:myRegion:111:function:myFunction"
filter_pattern = ""
}
resource "aws_lambda_permission" "allow_cloudwatch_to_call" {
statement_id = "AllowExecutionFromCloudWatch"
action = "lambda:InvokeFunction"
function_name = "myFunction"
principal = "logs.amazonaws.com"
source_arn = "arn:aws:apigateway:myRegion:111:log-group:/aws/apigateway/id/stage:*"
}
现在,当我应用此代码时,添加了资源 aws_lambda_permission
,但随后 terraform 开始循环创建 aws_cloudwatch_log_subscription_filter
。它循环了 5 分钟,然后它失败了。当我查看控制台时,lambda 权限策略如下所示
{
"ArnLike": {
"AWS:SourceArn": "arn:aws:apigateway:myRegion:111:log-group:/aws/apigateway/id/stage:*"
}
}
我在这里做错了什么?为什么 terraform 循环?
是否可以重写权限以允许任何/所有日志组?因为我需要添加 10 个订阅过滤器,如果我也能避免创建 10 个权限就好了。