如何在CloudFormation模板中定义CodeBuild失败通知的TopicPolicy
排查步骤
- 订阅状态检查
选择email作为订阅协议时,SNS会在资源创建后自动向填写的邮箱发送确认邮件,你需要点击邮件内的确认链接,将订阅状态从PendingConfirmation更新为Confirmed才会正常接收通知,未确认的订阅不会收到任何推送。 - EventPattern匹配校验
模板中事件规则写死了匹配的CodeBuild项目名为TestCodeBuildProject,如果你实际使用的构建项目名称和该值不一致,事件会匹配失败无法触发规则。
你可以根据需求选择两种修改方案:- 将项目名称改为参数动态传入,在Parameters块增加配置:
然后将EventPattern里的CodeBuildProjectName: Type: String Description: 要监听失败事件的CodeBuild项目名称project-name值改为!Ref CodeBuildProjectName
2. 移除project-name的匹配规则,监听当前账号下所有CodeBuild项目的失败事件 - InputTransformer格式修正
你的模板中InputTemplate字段额外包裹了一层无用的双引号,会导致事件转换失败,进而触发SNS推送失败,将该字段改为以下格式即可:InputTemplate: | Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'. 日志地址:<deep-link> - 规则触发日志校验
前往AWS EventBridge控制台找到对应规则,查看监控指标的Invocations和FailedInvocations数据:- 无
Invocations数据:说明事件模式匹配失败,建议抓取一次实际的CodeBuild失败事件,核对detail字段和你写的匹配规则是否一致 - 存在
FailedInvocations数据:说明规则触发成功,但推送SNS失败,可进一步查看规则的死信队列日志或者SNS的投递日志定位问题
- 无
补充说明
你模板中的SNS TopicPolicy已经正确授予了EventBridge服务sns:Publish权限,默认无需修改。
内容的提问来源于stack exchange,提问作者Kivi
相关产品推荐
相关产品推荐

