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

时间:2018-08-20 17:05:51

标签: aws-lambda mqtt aws-iot

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

基于AWS IoT documentation,可以在IoT下创建一条规则来评估您的事物通过诸如SELECT * FROM 'mymsgs/+'之类的查询发送的消息。该规则似乎与任何特定设备都不相关。因此,我可以假设它可以收听来自同一帐户下所有设备的主题吗?如果是这样,我只能使用一个Lambda函数来处理来自不同设备的所有消息。

2 个答案:

答案 0 :(得分:1)

正确的主题规则未与任何设备关联。使用FROM语句控制它们接收什么消息。您可能需要将SQL语句更新为

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

,以便您的lambda可以知道发送消息的主题。如果设备在主题{ foo: "bar", baz: 100 }上发布了mymsgs/device,则

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

将被发送到lambda函数。

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

答案 1 :(得分:0)

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

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