AWS Lambda基于消息体列表内容的过滤触发器配置问题
解决AWS Lambda SQS触发器列表字段过滤问题
问题根源
Lambda订阅SQS时,事件中的body字段是SQS消息的原始字符串格式Body,而非解析后的JSON对象。你之前的过滤模式直接将body当作JSON对象匹配,自然无法生效。
解决方案
方案1:使用SQS队列级消息过滤(推荐)
SQS原生支持对JSON格式的消息体设置过滤规则,只有符合条件的消息才会被投递到Lambda,效率更高:
- 进入AWS SQS控制台,打开目标队列的配置页面。
- 找到「消息过滤」选项,开启过滤策略。
- 设置如下过滤规则:
{ "infoB": [{"infoC": ["bar"]}] }
该规则会匹配infoB数组中存在元素的infoC值为bar的消息(完全符合你infoB仅含一个元素的场景)。
方案2:使用Lambda事件过滤(解析JSON字符串)
如果坚持用Lambda的事件过滤,需要通过JSONPath表达式解析body字符串中的JSON内容,正确的过滤模式为:
{ "body": [{ "$.infoB[0].infoC": ["bar"] }] }
这里的$.infoB[0].infoC是JSONPath语法,用于定位body字符串解析后JSON中infoB数组第一个元素的infoC字段,判断其值是否为bar。
对你之前尝试的说明
- 直接将
body当作JSON对象编写的规则(如{"body": {"infoB": {"infoC": ["bar"]}}}):因body是字符串,无法匹配JSON结构。 - 使用
infoB[0]作为键的写法:不符合Lambda过滤规则的语法规范,必须用JSONPath表达式实现数组元素定位。
内容的提问来源于stack exchange,提问作者Alexandre Guedes
相关产品推荐
相关产品推荐

