使用Terraform配置CloudWatch定时触发Lambda的自定义事件传递问题
问题根因
你配置的event_pattern参数作用是匹配过滤已有事件,而非定义触发时传递给目标的自定义内容。定时触发的CloudWatch Event规则无需配置event_pattern,你写在该字段下的自定义参数不会被传递到Lambda。
正确配置调整
1. 修正CloudWatch Event规则
删除无效的event_pattern字段,调整后的规则配置如下:
resource "aws_cloudwatch_event_rule" "group1-rule" { name = "Group1" description = "Group1" schedule_expression = "rate(10 minutes)" is_enabled = true }
2. 配置事件目标并传入自定义参数
在aws_cloudwatch_event_target资源中通过input参数定义要传递的自定义内容,示例配置如下:
resource "aws_cloudwatch_event_target" "group1-lambda-target" { rule = aws_cloudwatch_event_rule.group1-rule.name arn = "替换为你的Lambda函数ARN" # 此处定义要传递给Lambda的自定义事件内容 input = <<EOF { "source": "Group1", "groupNumber": "Group1", "notificationDate": "-" } EOF }
3. 配置Lambda触发权限(若未配置)
需要添加权限允许CloudWatch Event调用你的Lambda函数:
resource "aws_lambda_permission" "group1-event-invoke-lambda" { statement_id = "AllowExecutionFromCloudWatchEvent" action = "lambda:InvokeFunction" function_name = "替换为你的Lambda函数名称" principal = "events.amazonaws.com" source_arn = aws_cloudwatch_event_rule.group1-rule.arn }
配置完成后,Lambda收到的事件就是你在input字段中定义的JSON结构。如果你需要保留CloudWatch默认的定时事件结构,仅填充detail字段,只需把默认结构的其他字段也补充到input的JSON中即可。
内容的提问来源于stack exchange,提问作者devx
相关产品推荐
相关产品推荐

