You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建Terraform aws_cloudwatch_log_subscription_filter失败求助

问题:CloudWatch日志订阅过滤器创建报错(Lambda作为目标时提示需要roleArn)

我尝试用以下Terraform代码创建aws_cloudwatch_log_subscription_filter,将Lambda作为日志消费目标:

resource "aws_cloudwatch_log_group" "log-group" {
        name              = "/aws/lambda/${aws_lambda_function.default-lambda.function_name}"
        retention_in_days = 30
        kms_key_id        = "..."
}
    
resource "aws_lambda_permission" "invoke-lambda-cloudwatch" {
    count         =  var.log_consumer != null ? 1 : 0
    action        = "lambda:InvokeFunction"
    function_name =  var.log_consumer.name
    principal     = "logs.amazonaws.com"
    source_arn    = "${aws_cloudwatch_log_group.log-group.arn}:*"
}  

resource "aws_cloudwatch_log_subscription_filter" "lambda_subscription" {
    count           = var.log_consumer != null ? 1 : 0
    name            = "subscription-filter-${var.lambda_function_name}"
    log_group_name  = aws_cloudwatch_log_group.log-group.name
    filter_pattern  = var.log_consumer.pattern
    destination_arn = var.log_consumer.arn
    depends_on      = [module.iam_role, aws_lambda_permission.invoke-lambda-cloudwatch]
}

locals {
      ...
      log_consumer = {
        pattern    = "?AUDIT ?BREADCRUMB",
        name = module.lambda-log-consumer.default-lambda-name,
        arn = module.lambda-log-consumer.default-lambda-arn
      }
}

但一直收到如下错误:

Error: Error creating Cloudwatch log subscription filter: InvalidParameterException: destinationArn for vendor apigateway cannot be used without roleArn

根据Terraform文档,将Lambda作为目标时不需要指定role_arn,只需要配置aws_lambda_permission即可,请问我哪里漏了?


解决方案

核心问题

错误提示里明确提到vendor apigateway,说明AWS把你传入的destination_arn识别成了API Gateway的ARN,而非Lambda的ARN,这是问题的根源。

具体排查&修复步骤

  • 校验ARN格式:Lambda的ARN格式为arn:aws:lambda:<区域>:<账号ID>:function:<函数名>,API Gateway的ARN格式是arn:aws:apigateway:<区域>::/restapis/...,检查module.lambda-log-consumer.default-lambda-arn输出的内容是否符合Lambda ARN的格式。
  • 检查模块输出正确性:确认lambda-log-consumer模块的default-lambda-arn输出项确实指向Lambda函数的ARN,而非该Lambda关联的API Gateway、触发器或其他资源的ARN。
  • 修正Lambda权限的source_arn:当前aws_lambda_permission里的source_arn多了:*后缀,CloudWatch日志订阅的权限仅需日志组的ARN即可,修改为:
    source_arn = aws_cloudwatch_log_group.log-group.arn
    

内容的提问来源于stack exchange,提问作者Viny Machado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:58:40