AWS SNS过滤CodePipeline消息配置后收不到通知如何解决
问题根因
配置的过滤规则无法命中任何消息,核心原因有两点:
- 字段路径写错了:CodePipeline经CodeStar Notifications推送到SNS的事件结构里,执行状态不是顶层的
status字段,而是嵌套在detail对象下的state字段,你写的顶层status在实际推送的消息中根本不存在,所有消息都会被过滤拦截。 - 字段值匹配规则错误:事件里的状态值是全大写枚举值,成功对应
SUCCEEDED、失败对应FAILED,你配置的全小写failed/succeeded和实际值完全不匹配,就算字段路径写对了也收不到消息。
正确配置方法
把SNS订阅的过滤策略替换为下面的内容即可:
{ "detail.state": [ "SUCCEEDED", "FAILED" ] }
配置说明:
- SNS原生支持用
.分隔的字段路径匹配嵌套属性,上述规则会精准筛选出pipeline执行成功、失败的终态通知。 - 所有命中该规则的CodePipeline事件必然携带
detail.pipeline字段(即pipeline名称),不需要额外加字段校验,收到的邮件正文会自动带上对应的pipeline名称,完全匹配你的需求。 - 规则生效后,pipeline执行过程中的启动、执行中、暂停等中间状态通知会被自动过滤,不会再收到大量无关邮件。
如果要严格校验消息必须携带pipeline名称,也可以用带存在性判断的策略,进一步避免异常消息推送:
{ "detail.state": [ "SUCCEEDED", "FAILED" ], "detail.pipeline": [ {"exists": true} ] }
内容的提问来源于stack exchange,提问作者damini chopra
相关产品推荐
相关产品推荐

