是否可以仅使用一个Lambda函数从许多IoT设备接收MQTT消息?

我们正在AWS中设置基础架构以从IOT设备收集数据 . 一旦设备注册,他们将开始向几个MQTT主题发送json消息 . 为了接收消息并解析它们并将数据保存到数据库中,我计划创建一个规则,在收到消息时触发Lambda函数 . Lambda函数进行解析 .

基于AWS IoT documentation,可以在IoT下创建规则,以评估您的事物使用 SELECT * FROM 'mymsgs/+' 等查询发送的消息 . 该规则似乎与任何特定设备无关 . 那么我可以假设它可以收听同一帐户下所有设备的主题吗?如果是这种情况,我可以只使用一个Lambda函数来处理来自不同设备的所有消息 .

回答(1)

2 years ago

正确的主题规则与任何设备都没有关联 . 使用FROM语句来控制它们收到的消息 . 您可能希望将SQL语句更新为

SELECT * as data, topic() as topic FROM mymsgs/+

这样你的lambda就可以知道发送消息的主题了 . 如果设备在主题 mymsgs/device 上发布 { foo: "bar", baz: 100 }

{
  "data": {
    "foo": "bar",
    "baz": 0
  },
  "topic": "mymsgs/device1"
}

将被发送到lambda函数 .

您还可以使用附加到事物证书的IoT策略来强制事物仅发布它应该的主题 .