Terraform配置Lambda函数EventBridge触发器失败问题排查
问题分析
你遇到的核心问题是权限配置方向错误:你将lambda:InvokeFunction权限授予了Lambda的执行角色,但实际上需要配置的是允许CloudWatch EventBridge服务调用你的Lambda函数。Lambda执行角色的作用是定义Lambda自身能访问哪些资源,而非授权外部实体触发Lambda。
解决方案
删除现有的aws_iam_policy.lambda_invoke_policy和aws_iam_policy_attachment.lambda_invoke_attachment资源,替换为aws_lambda_permission资源,明确授权EventBridge触发你的Lambda函数。
修正后的权限配置代码如下:
resource "aws_lambda_permission" "allow_cloudwatch_invoke" { statement_id = "AllowCloudWatchEventsInvoke" action = "lambda:InvokeFunction" function_name = aws_lambda_function.lambda.function_name principal = "events.amazonaws.com" source_arn = aws_cloudwatch_event_rule.lambda_cron_trigger.arn }
说明
principal: 指定允许调用Lambda的实体为EventBridge服务(events.amazonaws.com)source_arn: 限制该权限仅适用于你创建的特定EventBridge规则,提升安全性function_name: 直接关联到你的目标Lambda函数
应用此修改后,EventBridge规则会正确关联到Lambda函数,定时触发器将按照Cron表达式执行,并传递你指定的参数。
内容的提问来源于stack exchange,提问作者Ravi kant Gautam
相关产品推荐
相关产品推荐

