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

AWS IoT接收二进制数据时AWS Lambda未触发问题排查

我之前也碰到过几乎一模一样的问题!核心原因是AWS IoT规则默认对JSON消息做了优化,二进制数据需要额外的配置调整,不然规则要么执行失败,要么不会触发Lambda。下面是你需要逐一排查的关键点:

1. 检查IoT规则的SQL语句是否兼容二进制数据

当MQTT消息是二进制时,AWS IoT会自动把 payload 编码成Base64字符串。如果你的SQL语句里有这些操作,肯定会出问题:

  • 用了json_parse(payload())这类只能解析JSON的函数:二进制转成Base64后根本不是合法JSON,这条SQL会直接执行失败,规则自然不会触发Lambda。
  • 依赖JSON结构的过滤条件:比如WHERE payload.deviceId = 'abc123',二进制payload转成Base64后没有deviceId字段,过滤条件不满足,规则不会触发。

解决方法:

  • 如果不需要过滤,直接用最基础的SQL:SELECT * FROM 'your/mqtt/topic'
  • 如果要处理二进制数据,用base64_decode(payload())来获取原始二进制内容(比如SELECT base64_decode(payload()) AS raw_data FROM 'your/mqtt/topic')

2. 确认IoT规则的消息格式设置

在IoT规则的详情页,找到「Message format」选项:

  • 默认是「JSON」,这个设置下AWS IoT会尝试把消息解析成JSON,二进制消息会被转成Base64字符串
  • 如果你的二进制消息完全不需要JSON包装,可以改成「RAW」,此时规则会直接传递原始二进制数据的Base64编码(不过Lambda收到的还是JSON结构,只是payload字段是原始字节的Base64)

3. 开启IoT规则的日志排查问题

这是最直接的调试方法!在IoT控制台打开你的规则,点击「Logs」标签,开启规则执行日志(选择对应的日志级别,比如「ERROR」或者「INFO」),然后去CloudWatch日志组里查看具体的执行日志。如果规则执行时出错(比如SQL解析失败),日志里会明确告诉你原因,比瞎猜高效多了。

4. 次要检查点(概率较低,但可以排除)

  • 确认Lambda的执行角色权限:既然JSON消息能触发,这个大概率没问题,但可以检查IoT规则的角色是否有lambda:InvokeFunction权限
  • 确认MQTT消息的QoS:如果规则设置了只处理特定QoS的消息,而你发送的二进制消息QoS不匹配,也会导致不触发(不过你用独立消费者能收到,这个可能性很低)

按照上面的步骤排查,应该很快就能找到问题所在——我当时就是SQL里写了json_parse(payload()),导致二进制消息触发时SQL报错,规则直接跳过了Lambda调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:23:11