You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SNS发布JSON消息无法触发category1 Lambda函数问题排查

问题原因分析

1. 结构化消息的投递规则不匹配

当给SNS发布请求指定MessageStructure='json'时,SNS会严格遵循结构化消息规范处理:消息体必须是包含default/sqs等特定字段的JSON对象,每个字段对应不同协议的订阅目标。如果classifier发送的结构化消息里,没有对应category1队列订阅的有效字段(比如仅填充了default但队列过滤规则不匹配,或字段格式错误),SNS会直接跳过对该队列的投递,且不会返回错误——这就是发布请求显示成功,但category1未触发的核心原因。

而interceptor的消息可能刚好符合结构化要求(比如仅传递default字段的有效JSON),所以能正常投递到classifier的队列;当去掉序列化、不指定MessageStructure时,消息会被当作纯文本消息处理,SNS会直接将原始内容投递到所有符合过滤规则的订阅队列,自然就能触发category1。

2. 订阅过滤策略与结构化消息不兼容

如果category1的SQS队列配置了基于消息体的过滤策略,结构化消息的嵌套格式可能导致过滤规则失效。比如过滤规则指定匹配$.category字段,但结构化消息的实际内容嵌套在default字段里(如{"default": "{\"category\":\"category1\"}"}),此时SNS无法正确解析到目标字段,就会过滤掉这条消息。

控制台发送的测试消息是纯文本格式,结构简单,刚好符合过滤规则,所以能正常触发category1;而classifier的结构化消息因嵌套问题触发了过滤拦截。

3. Lambda消息处理的格式差异

interceptor接收的是HTTP请求负载,本身就是原始字符串,发布到SNS时无需额外序列化,天然是纯文本格式;但classifier处理的是来自SQS的消息,通常会被Lambda自动解析为JSON对象,若直接对该对象序列化并加上MessageStructure='json'发布,会产生双重JSON嵌套(比如消息体变成{"default": "{\"key\":\"value\"}"}),SQS订阅的Lambda收到后无法正确解析内容,甚至可能因格式问题无法触发执行。

内容的提问来源于stack exchange,提问作者devio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:32:17