AWS IoT Core支持CBOR等MQTT二进制消息吗?Lambda触发异常求助
问题分析与解决方案
AWS IoT Core并非仅支持JSON负载格式,你的问题出在IoT规则的SQL配置上,导致CBOR二进制负载无法触发Lambda。
问题原因
你的SQL语句SELECT decode(encode(*, 'base64'), 'base64') AS value FROM 'sdk/test/python'存在逻辑问题:
- 当负载是JSON时,IoT Core会自动将其解析为JSON对象,
*能正常指代整个JSON结构,后续的encode/decode操作可以正常执行,规则触发Lambda。 - 当负载是CBOR二进制数据时,
*无法被IoT Core解析为JSON结构,encode(*, 'base64')操作会失败,导致SQL查询无结果,规则不会触发Lambda。
修复步骤
1. 修改IoT规则SQL
直接使用原始负载字段传递数据,去掉多余的encode/decode操作:
functions: receiver: handler: app/receiver/handle.handler events: - iot: sql: "SELECT payload FROM 'sdk/test/python'" payloadFormat: RAW # 明确指定传递原始二进制负载
payload是IoT Core为二进制负载提供的默认字段,payloadFormat: RAW确保直接传递原始二进制数据到Lambda。
2. 调整Lambda处理函数
Lambda收到的是CBOR二进制数据,需要在函数内手动解析:
import cbor2 def handler(event, context): # 提取原始CBOR二进制负载 raw_cbor = event['payload'] # 解析CBOR数据 decoded_data = cbor2.loads(raw_cbor) print("解析后的CBOR数据:", decoded_data) return {"statusCode": 200}
3. 验证配置
部署修改后的Serverless配置,重新发送CBOR消息,Lambda即可正常触发并解析数据。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

