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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:55:03