Amazon web services 如何在无服务器框架中向Lambda订阅AWS Iot作业主题

Amazon web services 如何在无服务器框架中向Lambda订阅AWS Iot作业主题,amazon-web-services,aws-lambda,serverless-framework,aws-iot,Amazon Web Services,Aws Lambda,Serverless Framework,Aws Iot,我使用的是无服务器框架,我需要将Lambda函数订阅到AWS Iot作业主题,更具体地说是“开始下一步/#”主题。我已经有另一个Lambda函数订阅了AWS Iot工具的另一个主题,使用serverless.yml文件中的这段代码: events: - iot: sql: "SELECT topic() AS topic, * FROM '$aws/things/+/shadow/update'" 这很好,Lambda函数被触发,我可

我使用的是无服务器框架,我需要将Lambda函数订阅到AWS Iot作业主题,更具体地说是“开始下一步/#”主题。我已经有另一个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函数吗?

在查询结束时,使用通配符#让您的规则订阅以

'$aws/things/thingName/jobs/start-next/[...]'
'$aws/things/thingName/jobs/start-next/[...]/[...]'
'...'
如果您正在向这样的主题发布消息(在/start next之后没有任何内容)

那就不符合你的规则了。在这种情况下,您应该在查询结束时不使用“#”通配符。像这样的

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

在查询结束时,您可以使用通配符#查找有关此类通配符及其覆盖范围的更多详细信息,您可以让规则订阅以开头的任何主题

'$aws/things/thingName/jobs/start-next/[...]'
'$aws/things/thingName/jobs/start-next/[...]/[...]'
'...'
如果您正在向这样的主题发布消息(在/start next之后没有任何内容)

那就不符合你的规则了。在这种情况下,您应该在查询结束时不使用“#”通配符。像这样的

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

您可以找到有关此类通配符及其覆盖范围的更多详细信息,因此。。。阅读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。
我想我必须找到另一种方法来实现这一目标,但多亏了那些试图帮助我的人:)

所以。。。阅读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。
我想我必须找到另一种方法来实现这一点,但多亏了那些试图提供帮助的人:)

我处理过无服务器框架,但从未处理过AWS IOT,但我发现这篇文章可能会有所帮助:,它包括GIST(GIST有指向其他.yml文件的链接)。我处理过无服务器框架,但从未处理过AWS IOT,但是我发现这篇文章可能很有帮助:,它包括GIST(GIST有指向其他.yml文件的链接)。根据AWS IOT文档,这里:,为了接收作业的详细信息,您需要订阅“$AWS/things/{thingName}/jobs/start next/#”主题,或者成功请求的“/accepted”主题,或者失败请求的“/rejected”主题,但在我的情况下,我希望在这两种情况下都接收消息。我会试试你的建议,但考虑到文档说明,我怀疑它是否有效。在这种情况下,你是对的。#将匹配到../rejected或../accepted。是的,不幸的是它仍然不起作用:/而且我意识到我已经尝试了你的建议,但也没有什么好处,感谢你的帮助:)我将尝试使用@Mu Majid建议的链接中显示的一些内容配置.yml文件,看看它是否起作用。真遗憾。我建议你通过painel手动创建一个规则,向SNS发送消息。然后你可以订阅你的电子邮件,这样你就可以加快测试速度。如果你获得了任何成功,请告诉我们我们(我的团队)确实考虑过这一点,但问题是规则似乎根本没有执行。Lambda不会被触发,因此我不确定将规则的操作从调用Lambda更改为在SNS主题上发布消息是否有效。但我将尝试根据AWS IOT文档在这里进行说明:,为了接收作业的详细信息,您需要订阅“$AWS/things/{thingName}/jobs/start next/#”主题,或者成功请求的“/accepted”主题,或者失败请求的“/rejected”主题,但在我的情况下,我希望在这两种情况下都接收消息。我会试试你的建议,但考虑到文档说明,我怀疑它是否有效。在这种情况下,你是对的。#将匹配到../rejected或../accepted。是的,不幸的是它仍然不起作用:/而且我意识到我已经尝试了你的建议,但也没有什么好处,感谢你的帮助:)我将尝试使用@Mu Majid建议的链接中显示的一些内容配置.yml文件,看看它是否起作用。真遗憾。我建议你通过painel手动创建一个规则,向SNS发送消息。然后你可以订阅你的电子邮件,这样你就可以加快测试速度。如果你获得了任何成功,请告诉我们我们(我的团队)确实考虑过这一点,但问题是规则似乎根本没有执行。Lambda不会被触发,因此我不确定将规则的操作从调用Lambda更改为在SNS主题上发布消息是否有效。但我会努力的