为何从AWS IoT获取的MQTT JSON载荷失真?Lambda消息层级丢失求解
问题原因及解决办法
哦,这个坑我之前踩过!你遇到的层级丢失问题,99%是AWS IoT Core的规则动作配置做了消息内容过滤,导致Lambda只收到了被截断后的部分消息。
具体原因
当你把Lambda设为IoT规则的触发动作时,默认情况下IoT Core会把完整的消息体传给Lambda,但如果你的规则配置里做了以下操作:
- 在Lambda动作的「Payload」设置中,选择了「Attribute」而非「Raw payload」
- 并且指定了JSON提取路径,比如
$.desired.one
那IoT Core就会自动提取这个路径对应的内容,只把{"two": "is two"}传给Lambda,自然就丢失了上层的desired和one层级。
验证&解决步骤
- 打开AWS IoT Core控制台,找到触发这个Lambda的那条规则
- 查看规则里的Lambda动作配置,找到「Payload」选项
- 如果当前是「Attribute」模式,改成「Raw payload」并保存配置
- 重新发送测试消息,你的Lambda就能收到完整的
{ "desired": { "one": { "two": "is two" } } }了
额外提示
如果你确实需要在IoT规则里做部分内容提取,但现在想调试完整消息,可以先临时切换到Raw payload模式,确认完整消息能正常接收后,再根据需求调整提取路径。
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

