【问题标题】:Can't trigger lambda's on SQS FIFO无法在 SQS FIFO 上触发 lambda
【发布时间】:2019-04-24 07:22:27
【问题描述】:

我正在尝试触发 lambda 执行以执行 FIFO 队列中的项目。除了民意调查,我们还有哪些选择来实现呢?我们刚刚了解到,我们不能直接从 FIFO 队列触发 lambda 执行,目前仅支持标准队列。 我还了解到,我们不能将 SNS 主题订阅到 FIFO 队列——这也仅在标准队列上受支持。

在亚马逊发布更新之前,有没有人找到解决此问题的方法?

【问题讨论】:

标签: amazon-web-services aws-lambda amazon-sqs


【解决方案1】:

您唯一的选择是每隔一定时间轮询队列。

您可以创建一个CloudWatch event trigger,它调用一个lambda 函数(假设每10 分钟一次)轮询队列并进行处理。

更新

这现在是可能的。现在可以将 SQS FIFO 队列指定为 Lambda 函数的事件源。

https://aws.amazon.com/blogs/compute/new-for-aws-lambda-sqs-fifo-as-an-event-source/

【讨论】:

  • 我很想知道为什么亚马逊会这样做,以我有限的知识,我相信这与调用时产生多个实例的 lambdas 有关?因此,如果您将它们放在 FIFO SQS 上,您将无法确定它们的项目是否正在按顺序处理,因为它们是异步运行的?如果我错了,请纠正我。
  • 是的。这就是我认为的原因。如果 SQS 中有更多消息,则会在后台调用更多 lambda 函数,这意味着更多 lambda 实例轮询同一个队列,因此很难管理顺序执行。
  • 这很奇怪,因为让 lambda 函数返回类似于 status 200 的东西会调用下一个消息处理的复杂性是什么?在我看来,如果我们有标准的 SQS 队列,那么我们无法确定传入消息会调用多少个 lambdas
  • 呃。 Message groups 可以完全解决这个问题——对于我正在探索的用例,解决这个问题。我需要一个消息组中的重复消除和 FIFO within,但是在不同的 lambdas 中交错消息组就可以了(实际上是可取的)。
  • @Andrew - 使用消息组需要使用 FIFO。如何在 FIFO 队列上触发 lambda?如果你不能那么你如何消费这个队列?
【解决方案2】:

对于截至昨天对 AWS Now Supports Lambda Triggers from FIFO SQS 感兴趣的任何人。感谢@JohnRotenstein 指出这一点。

【讨论】:

    【解决方案3】:

    SQS 事件溯源除了通过长轮询每秒拉队列外没有做任何事情。

    如果您希望一切井井有条; - 每秒创建一个 Cloudwatch 事件触发器(如 Asdfg 建议的那样) - 将并发限制设置为 1 - 通过长轮询接收消息以降低成本

    【讨论】:

      猜你喜欢
      • 2021-01-22
      • 2020-02-15
      • 1970-01-01
      • 2020-05-17
      • 2021-07-21
      • 2020-07-28
      • 2021-03-28
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多