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



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

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

正确的主题规则不与任何设备关联。使用 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 函数。

您还可以使用附加到事物证书的物联网策略来强制事物仅在其应发布的主题上发布。

如果主题数量较少,您可以执行以下操作

SELECT *, topic() as topic FROM 'mylog/+' where regexp_matches(topic(), 'mylog/b(info|error|warn)b') = TRUE

最新更新