【问题标题】:Subscribe to AWS IoT topic within AWS Lambda在 AWS Lambda 中订阅 AWS IoT 主题
【发布时间】:2017-11-28 19:49:12
【问题描述】:

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

我知道物联网消息触发 Lambda 的规定方法是创建一个调用 Lambda 的物联网规则操作,但是这对我来说并不起作用(据我所知),因为我want 是让原始 Lambda(由外部 API 调用 API Gateway 触发的)监听 IoT 设备的响应,并基于此向外部调用者发送 HTTP 响应;如果它是在物联网设备响应其物联网主题时触发的单独 Lambda,这似乎无法实现。关于如何做到这一点的任何想法?

【问题讨论】:

    标签: amazon-web-services aws-lambda boto3 aws-iot


    【解决方案1】:

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

    【讨论】:

    • 谢谢 - 它需要是原始的 Lambda 不是因为内部状态本身,而是因为通过 API 网关向 Lambda 发送 HTTP POST 请求的外部客户端可以获取 IoT 设备的响应作为 HTTP 响应(对其 HTTP 请求)。如果物联网设备的响应触发了不同的 Lambda,原来的 Lambda 将无法返回响应,即外部客户端的 HTTP 请求将没有响应或响应为空。
    • 感谢您的澄清。您在等待什么类型的回复?听起来更像是您需要在设备和客户端之间建立一个 Web 套接字。
    • 谢谢你,我想你可能就在那儿。我目前正在通过一个 IoT 规则来处理它,该规则将 IoT 设备的响应轻弹到 SQS 队列上,并且 Lambda 轮询该队列以获取它然后使用的消息,使用它来构造并通过 API 网关将响应发送回发送 HTTP POST 请求的外部客户端。
    • @Jupiterese 如果不使用规则我不能达到同样的效果吗?我想编写功能测试来验证我在 testTopic 上发送的消息以及真实主题。
    【解决方案2】:

    虽然不漂亮,但这使我能够执行我在问题中发布的内容:我添加了一个 IoT 规则,该规则将 IoT 设备的响应发送到 SQS 队列; Lambda(由 API Gateway 调用以在开始时处理请求)轮询 SQS 队列以获取它然后使用的消息,使用它来构造并通过 API Gateway 将响应发送回发送 HTTP POST 的外部客户端要求。可以肯定的是,这不是使用 AWS Lambdas 的好方法,但它似乎是使用 Lambda + API Gateway 将 HTTP 请求/响应与 IoT 发布/订阅挂钩的唯一方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 2018-08-23
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      相关资源
      最近更新 更多