在 AWS 中创建订阅过滤器时的 Terraform 循环

时间:2021-04-30 15:42:35

标签: amazon-web-services aws-lambda terraform amazon-cloudwatch

我想使用 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:*"
 }
}
  1. 我在这里做错了什么?为什么 terraform 循环?

  2. 是否可以重写权限以允许任何/所有日志组?因为我需要添加 10 个订阅过滤器,如果我也能避免创建 10 个权限就好了。

0 个答案:

没有答案