AWS SNS配置订阅过滤策略后Lambda无法接收消息咨询
SNS订阅过滤策略不生效的核心原因
任意一个问题都会导致消息被过滤、Lambda无法触发:
- 字段名大小写不匹配
过滤策略中写的嵌套字段路径为eventbody.status,但实际消息正文里的对应顶层字段是驼峰命名的eventBody(字母B大写)。SNS过滤规则对字段名、属性名严格区分大小写,路径拼写错误会直接导致匹配失败。 - 字段匹配值与实际消息内容不符
即使修正字段名大小写,你为status字段配置的匹配值是INVOICE,但测试消息里eventBody.status的实际值为CONCLUDED,不满足值匹配要求,消息会被直接拦截。 - 未正确启用正文匹配能力(最高发的配置错误)
SNS订阅过滤策略默认仅对发布消息时附带的Message Attributes(消息自定义属性)生效,不会自动解析JSON格式的消息正文做字段匹配。
如果你没有在订阅配置中手动开启基于消息负载(Payload)的过滤功能,哪怕正文里的字段名、值完全符合规则,过滤策略也读取不到正文内容,会直接判定消息不匹配。如果你不想开启正文过滤,也可以在发布SNS消息时,把需要用于过滤的字段(aggregateType、eventType、目标status字段等)单独放到消息属性中传递,过滤策略即可正常匹配。
如果要匹配你提供的这条测试消息,开启正文过滤后,正确的过滤策略参考如下:
{ "aggregateType": [ "APPOINTMENT" ], "eventType": [ "MODIFIED" ], "eventBody.status": [ "CONCLUDED" ] }
内容的提问来源于stack exchange,提问作者Martin Smola
相关产品推荐
相关产品推荐

