如何在CloudFormation中为AWS EventBridge单规则配置两个目标?
问题排查与解决方案
1. 目标ID重复(直接触发失败的核心原因)
你的EventBridge规则中两个Lambda目标的Id均为"eventRule",同一规则下的每个目标ID必须唯一——EventBridge依赖ID区分不同目标,重复ID会直接导致配置验证失败。
修正后的Targets段代码:
Targets: - Arn: !GetAtt lambdaA.Arn Id: "TargetLambdaA" # 唯一标识 - Arn: !GetAtt lambdaB.Arn Id: "TargetLambdaB" # 唯一标识
2. S3事件未关联到自定义事件总线
默认情况下,S3会将对象创建事件发送到AWS默认事件总线,而非你定义的customEventBus。需为存储桶添加事件通知配置,明确将事件发送到自定义总线:
s3BucketEventConfig: Type: AWS::S3::BucketNotification Properties: Bucket: test-bucket # 替换为你的存储桶名称或资源引用 EventBridgeConfiguration: EventBridgeEnabled: true
3. Lambda权限缺失
EventBridge需要具备调用Lambda函数的权限,否则无法触发执行。需为每个Lambda添加权限资源:
lambdaAPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref lambdaA Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt eventRule.Arn lambdaBPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref lambdaB Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt eventRule.Arn
完整修正后的核心配置示例
customEventBus: Type: AWS::Events::EventBus Properties: Name: "customEventBusName" eventRule: Type: AWS::Events::Rule Properties: Name: eventRuleName EventBusName: !Ref customEventBus EventPattern: source: - "aws.s3" detail-type: - 'Object Created' detail: bucket: name: - test-bucket State: "ENABLED" Targets: - Arn: !GetAtt lambdaA.Arn Id: "TargetLambdaA" - Arn: !GetAtt lambdaB.Arn Id: "TargetLambdaB" # S3事件关联自定义EventBus s3BucketEventConfig: Type: AWS::S3::BucketNotification Properties: Bucket: test-bucket EventBridgeConfiguration: EventBridgeEnabled: true # Lambda权限配置 lambdaAPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref lambdaA Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt eventRule.Arn lambdaBPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref lambdaB Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt eventRule.Arn
内容的提问来源于stack exchange,提问作者rara
相关产品推荐
相关产品推荐

