【问题标题】:How to subscribe Lambda to an AWS Iot Jobs topic in Serverless Framework如何在无服务器框架中为 Lambda 订阅 AWS IoT 作业主题
【发布时间】:2020-07-24 21:59:08
【问题描述】:

我正在使用无服务器框架,我需要将我的 Lambda 函数订阅到 AWS IoT Jobs 主题,更具体地说是“start-next/#”主题。我已经有另一个 Lambda 函数订阅了 AWS IoT 工具的另一个主题,使用 serverless.yml 文件中的这段代码:

    events:
      - iot:
          sql: "SELECT topic() AS topic, * FROM '$aws/things/+/shadow/update'"

这很好用,触发了 Lambda 函数,我能够处理我需要的东西,但是当我尝试使用这段代码时:

    events:
      - iot:
          sql: "SELECT topic() AS topic, * FROM '$aws/things/+/jobs/start-next/#'"

无论我尝试做什么,它都无法正常工作。 当新消息发布到“$aws/things/+/jobs/start-next”主题时,有人可以给我任何建议来触发我的 Lambda 函数吗?

【问题讨论】:

标签: amazon-web-services aws-lambda serverless-framework aws-iot


【解决方案1】:

在查询末尾使用通配符 #,您可以让规则订阅以

开头的任何主题
'$aws/things/thingName/jobs/start-next/[...]'
'$aws/things/thingName/jobs/start-next/[...]/[...]'
'...'

如果您偶然向这样的主题发布消息(在 /start-next 之后没有任何内容)

$aws/things/thingName/jobs/start-next

那么它将不符合您的规则。在这种情况下,您应该在末尾不使用“#”通配符进行查询。像这样的

'sql: "SELECT topic() AS topic, * FROM '$aws/things/+/jobs/start-next'"'

您可以找到有关此类通配符及其覆盖范围的更多详细信息right here

【讨论】:

  • 根据此处的 AWS IOT 文档:docs.aws.amazon.com/iot/latest/developerguide/…,为了接收作业的详细信息,您需要订阅 '$aws/things/{thingName}/jobs/start -next/#' 主题,或成功请求的“/accepted”主题,或失败请求的“/rejected”主题,但在我的情况下,我希望在这两种情况下都接收消息。我会尝试你的建议,但我怀疑它会根据文档说明起作用
  • 在这种情况下你是对的。 # 将匹配 ../rejected../accepted.
  • 是的,不幸的是它仍然不起作用:/我也意识到我已经尝试过你的建议,但也没有什么好处,感谢您提供帮助的意愿:) 我会尝试配置.yml 文件,其中包含@Mu-Majid 建议的链接中显示的一些内容,以查看它是否有效
  • 真可惜。我建议您通过 painel 手动创建规则以将消息发送到 SNS。然后您可以订阅您的电子邮件,以便加快测试速度。让我们知道你是否成功
  • 我们(我的团队)实际上考虑过这一点,但问题是该规则似乎根本没有被执行。 Lambda 不会被触发,所以我不确定将规则的操作从调用 Lambda 更改为在 SNS 主题上发布消息是否可行。但我会尝试
【解决方案2】:

所以...阅读IOT页面上的MQTT客户端帮助,我实际上找到了这部分:

Reserved topics

Topics beginning with $ are considered reserved and are not supported for publishing and 
subscribing except when working with the Thing Shadows service. To learn more, 
see Thing Shadows.

这将解释为什么阴影主题会触发我在问题中提到的 Lambda,而不是基于作业主题的其他 Lambda。 我想我必须找到另一种方法来完成这项工作,但感谢谁试图帮助:)

【讨论】:

    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2019-05-21
    • 2019-01-30
    • 1970-01-01
    相关资源
    最近更新 更多