我们正在AWS中设置基础架构以从IOT设备收集数据。设备注册后,它们将开始向几个MQTT主题发送json消息。为了接收消息并将其解析并将数据保存到数据库中,我计划创建一条规则,该规则在收到消息时触发Lambda函数。 Lambda函数执行解析。
基于AWS IoT documentation,可以在IoT下创建一条规则来评估您的事物通过诸如SELECT * FROM 'mymsgs/+'
之类的查询发送的消息。该规则似乎与任何特定设备都不相关。因此,我可以假设它可以收听来自同一帐户下所有设备的主题吗?如果是这样,我只能使用一个Lambda函数来处理来自不同设备的所有消息。
答案 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