CloudFormation配置S3后缀触发Lambda的EventRule不生效问题排查
问题根因汇总
- EventPattern 后缀匹配语法错误
你当前将后缀匹配规则序列化为JSON字符串放到key的取值数组中,EventBridge不会解析该字符串内的匹配逻辑,会直接把它当成普通字符串和S3事件里的object key做全等匹配,自然无法命中任何符合后缀要求的对象。 - 大小写匹配不一致
你配置的匹配后缀为小写.testsuffix,但测试上传的文件后缀为.testSuffix,EventBridge的suffix运算符匹配大小写敏感,无法命中。 - 未配置CloudTrail采集S3对象级事件
EventBridge默认无法获取S3的PutObject、CopyObject这类对象级操作事件,必须先创建CloudTrail跟踪,指定捕获目标存储桶的对象级写操作事件,相关事件才会被推送到EventBridge做规则匹配。
修正后的EventRule配置
EventRule: Type: AWS::Events::Rule Properties: Description: 'test s3 event' EventPattern: source: - 'aws.s3' detail: eventSource: - 's3.amazonaws.com' eventName: - 'CopyObject' - 'PutObject' requestParameters: bucketName: - 'test-bucket' key: suffix: '.testSuffix' # 修正语法,同时和测试文件后缀大小写保持一致 State: 'ENABLED' Targets: - Arn: !GetAtt TestLambda.Arn Id: 'TestLambdaTargetId'
补充操作说明
- 创建CloudTrail跟踪,配置跟踪
test-bucket的PutObject、CopyObject等写操作事件,日志可以投递到任意S3存储桶存储 - 上传后缀完全匹配
.testSuffix的文件验证触发逻辑 - 若不需要走EventBridge链路,也可以直接配置S3存储桶的事件通知规则直接绑定Lambda,该方案无需配置CloudTrail和EventBridge,链路更简单。
你当前的Lambda调用权限配置没有问题,修正上述配置并完成CloudTrail配置后即可正常触发。
内容的提问来源于stack exchange,提问作者user10916892
相关产品推荐
相关产品推荐

