2017-06-26 79 views
0

我有一个AWS Lambda函数(由通过API网关进行的API调用触发),它基于收到的参数使用IoT主题将消息发布到相关IoT设备的集合(主题为唯一标识特定物联网设备的序列号)。我使用boto3的IoT数据平面客户端方法publish()来执行此操作。我有没有办法让这个相同的Lambda函数订阅相同的IoT主题,以便它能够接收来自IoT设备的响应?在AWS中订阅AWS IoT主题Lambda

我知道,对于一个物联网的消息触发了lambda来创建一个调用拉姆达的物联网规则操作,在规定的方式然而,这并没有真正为我工作(据我可以告诉)的原因是什么我想要的是原始的Lambda(通过外部API调用API Gateway触发的)来监听IoT设备的响应,并基于此响应向外部调用者发送HTTP响应;如果它是一个独立的Lambda,当物联网设备对其IoT主题做出响应时触发,这似乎不可行。任何想法如何做到这一点?

回答

0

尽管不太美观,但这使我能够完成我在我的问题中发布的内容:我添加了一条IoT规则,可以将物联网设备的响应弹出到SQS队列上; Lambda(由API网关在开始时处理请求时调用)轮询该SQS队列中的消息,然后使用它构造并通过API网关将响应发送回发送HTTP POST的外部客户端请求。可以肯定的是,这不是使用AWS Lambdas的好方法,但它似乎是使用Lambda + API网关将HTTP请求/响应与IoT发布/订阅挂钩的唯一方法。

1

为什么它必须是原始的lambda?我猜想有一些你想要保存的状态;在这种情况下,您应该坚持它或将它传递给消息。

+0

感谢 - 它不仅仅是因为内部状态本身而是原始的Lambda,而是因为这就是通过API网关向Lambda发送HTTP POST请求的外部客户端如何能够将IoT设备的响应作为HTTP响应(到它的HTTP请求)。如果物联网设备的响应触发不同的Lambda,原始的Lambda将无法返回响应,即外部客户端的HTTP请求不会得到任何响应或空响应。 – Jupiterese

+1

感谢您的澄清。你在等什么类型的回应?听起来更像是你需要设备和客户端之间的网络套接字。 –

+0

谢谢,我想你可能就在那里。我目前通过将IoT设备的响应弹到SQS队列上的IoT规则和Lambda轮询来消除它随后消耗的消息,使用它来构建响应并通过API网关将响应发回给发送HTTP POST请求的外部客户端。 – Jupiterese