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

Terraform创建CloudWatch日志订阅过滤器报InvalidParameterException错误

问题原因
  1. Lambda调用权限的服务主体配置错误
    你当前aws_lambda_permission资源中配置的principal为events.amazonaws.com,该主体对应Amazon EventBridge服务,而触发Lambda的是CloudWatch Logs服务,正确的服务主体格式为logs.<你的AWS区域>.amazonaws.com,二者不匹配导致权限无效。
  2. 权限关联的日志组与实际使用的日志组不匹配
    你在权限配置中绑定的source_arn是你代码中创建的test-app日志组的ARN,但实际日志订阅过滤器关联的日志组是/rr/snowplow/e2-dev,权限没有覆盖到实际使用的日志组,因此CloudWatch Logs没有调用Lambda的权限。
  3. 手动在控制台创建订阅时,AWS会自动在后台生成匹配的Lambda调用权限,因此手动操作可以正常运行,而Terraform为声明式配置,需要你显式定义正确的权限规则。
解决步骤
  • 第一步:如果你的目标日志组/rr/snowplow/e2-dev是预先存在的,新增数据源读取该日志组的配置;如果是你需要在当前Terraform代码中创建的,修改日志组的name参数为/rr/snowplow/e2-dev即可。
    示例数据源配置:
data "aws_cloudwatch_log_group" "target_log_group" {
  name = "/rr/snowplow/e2-dev"
}

# 可选:获取当前账号ID用于进一步限制权限范围
data "aws_caller_identity" "current" {}
  • 第二步:修改aws_lambda_permission资源的配置,替换为正确的服务主体和日志组ARN:
resource "aws_lambda_permission" "allow_cloudwatch" {
  action        = "lambda:InvokeFunction"
  function_name = module.lambda_function_existing_package_s3.lambda_function_name
  # 替换为你资源部署的实际AWS区域,例如us-east-1、cn-northwest-1
  principal     = "logs.us-east-1.amazonaws.com"
  source_arn    = data.aws_cloudwatch_log_group.target_log_group.arn
  # 可选配置,限制仅当前账号的日志组可调用该Lambda,提升安全性
  source_account = data.aws_caller_identity.current.account_id
}
  • 第三步:确认aws_cloudwatch_log_subscription_filter的depends_on参数指向修改后的aws_lambda_permission资源即可。

修改完成后重新执行terraform apply即可正常创建订阅过滤器。

内容的提问来源于stack exchange,提问作者Tejas Behra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 17:15:08