无法通过AWS IoT Rule触发AWS Lambda函数问题求助
问题:AWS IoT规则调用Lambda未触发的排查
我正在进行AWS IoT规则实验,规则接收IoT设备发送的SMILE编码且经Snappy压缩的Payload,并最终发布到Kafka主题。
当前正常工作的配置
- 以下SQL配置的IoT规则可正常运行,无需解码就能将设备的SMILE编码Payload以JSON格式发布到Kafka:
SELECT decode(encode(*,'base64'),'base64') as payload FROM 'mqtt_topic'
- 设备发送的Payload示例:
kqIY8G06KQoB+oNAZHRvQkJhdIRpdGVtc
- 发布到Kafka的未解码JSON格式Payload:
{ "payload": "kqIY8G06KQoB+oNAZHRvQkJhdIRpdGVtc" }
需求与遇到的问题
现在需要在AWS IoT规则中先解码Payload,再发布到Kafka主题,因此我编写了Java版的AWS Lambda函数用于解码SMILE编码的Payload。
根据AWS官方文档,使用aws_lambda()函数触发Lambda时,需要传递两个参数:第一个是Lambda函数的ARN,第二个是JSON格式的输入参数。我尝试用以下SQL构造JSON格式内容并传递给Lambda,但Lambda未被触发:
SELECT value aws_lambda("arn:aws:lambda:region:account-id:function:DeserializerFunction", {"payload": decode(encode(*,'base64'),'base64')}) from 'mqtt_topic'
可触发Lambda的修改方案(但不想采用)
如果修改SQL查询及设备发送的Payload结构,Lambda可被正常触发,但我不想修改设备的Payload结构:
- 修改后的SQL查询:
SELECT value aws_lambda("arn:aws:lambda:region:account-id:function:DeserializerFunction", *) from 'mqtt_topic'
- Payload对比:
原Payload:
修改后Payload:kqIY8G06KQoB+oNAZHRvQkJhdIRpdGVtc{ "payload": "kqIY8G06KQoB+oNAZHRvQkJhdIRpdGVtc" }
我已花费大量时间排查但未解决问题,请问我遗漏了什么?能否帮忙分析Lambda未触发的原因?
内容的提问来源于stack exchange,提问作者Shivakumar Sajjan
相关产品推荐
相关产品推荐

