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

Aws lambda 是否可以仅使用一个Lambda函数从多个物联网设备接收MQTT消息?,aws-lambda,mqtt,aws-iot,Aws Lambda,Mqtt,Aws Iot,我们正在AWS中建立基础设施,以从物联网设备收集数据。设备注册后,将开始向几个MQTT主题发送json消息。为了接收消息并解析它们并将数据保存到数据库中,我计划创建一个规则,当收到消息时触发Lambda函数。Lambda函数进行解析 基于,可以在IoT下创建一个规则,以使用类似于“mymsgs/+”中的SELECT*的查询来评估物品发送的消息。该规则似乎与任何特定设备都没有关联。那么,我可以假设它可以从同一帐户下的所有设备收听主题吗?如果是这样,我可以只使用一个Lambda函数来处理来自不同设备

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


基于,可以在IoT下创建一个规则,以使用类似于“mymsgs/+”中的
SELECT*的查询来评估物品发送的消息。该规则似乎与任何特定设备都没有关联。那么,我可以假设它可以从同一帐户下的所有设备收听主题吗?如果是这样,我可以只使用一个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

你的SELECT语句基本上涵盖了所有主题,对吗?SELECT语句中的
数据将用作lambda函数的输入?我已经更新了示例。SELECT子句控制发送到lambda的内容(或其他规则操作),FROM子句使用MQTT topic通配符+和#控制哪些主题。WHERE子句可以根据有效负载中的数据进行过滤。