EventBridge规则未触发Lambda函数,CloudFormation部署后无执行
解决EventBridge触发Lambda无效的问题
核心问题分析
- 调度表达式与预期不符:你配置的
cron(55 * * * ? *)是每小时55分触发,而非预期的33分 - 硬编码ARN未关联栈内资源:模板中直接使用
function.arn、event.arn这类占位符,CloudFormation无法识别并关联实际创建的Lambda函数和EventBridge规则 - YAML缩进错误:原模板中部分资源的缩进不符合YAML规范,会导致配置解析失败
修正后的完整CloudFormation模板
Resources: LambdaFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: bucketname S3Key: lambda_function.py.zip Runtime: python3.9 FunctionName: WebScrabber Role: !Sub "${LambdaExecutionRole.Arn}" # 若使用现有角色可直接替换为实际ARN Layers: - layer.arn # 替换为实际层ARN Timeout: 100 Handler: lambda_function.lambda_handler LambdaExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # 基础执行权限,按需调整 ScheduledRule: Type: AWS::Events::Rule Properties: ScheduleExpression: cron(33 * * * ? *) # 修正为每小时33分触发 State: ENABLED Targets: - Arn: !GetAtt LambdaFunction.Arn Id: TargetFunctionV1 EventsPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !GetAtt LambdaFunction.Arn Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt ScheduledRule.Arn
关键修改说明
- 修正调度表达式:将
cron(55 * * * ? *)改为cron(33 * * * ? *),匹配你预期的每小时33分触发逻辑 - 使用内部资源引用:
- Lambda目标ARN用
!GetAtt LambdaFunction.Arn引用栈内创建的Lambda函数 - 权限规则的
SourceArn用!GetAtt ScheduledRule.Arn引用栈内的EventBridge规则,确保权限仅针对当前规则生效
- Lambda目标ARN用
- 修复YAML缩进:统一所有资源属性的缩进层级,保证CloudFormation能正确解析配置
额外检查项
- 确认Lambda执行角色拥有必要的权限,CloudFormation栈的执行角色具备创建所有资源的权限
- 查看CloudFormation栈的事件日志,确认所有资源都创建成功无报错
- 进入EventBridge控制台,检查规则状态为
ENABLED且目标正确关联Lambda - 查看Lambda的CloudWatch日志,确认是否有触发记录或错误信息
内容的提问来源于stack exchange,提问作者vesairla
相关产品推荐
相关产品推荐

