无法在SQS FIFO上触发Lambda函数

26

我正在尝试触发 Lambda 执行以执行 FIFO 队列上的项目。除了轮询之外,我们还有哪些选项可以完成这个任务?我们刚刚得知,在当前时刻,我们无法直接从 FIFO 队列触发 Lambda 执行,而只能从标准队列支持此操作。

我还了解到,我们无法将 SNS 主题订阅到 FIFO 队列 - 这也仅受标准队列支持。

在亚马逊发布更新之前,是否有人找到了解决方法?


5
2019年11月:AWS Lambda现在支持Lambda触发器。请参阅:AWS Lambda支持Amazon SQS FIFO(先进先出)作为事件源 - John Rotenstein
3个回答

24

3
我很想知道亚马逊为什么会这样做,根据我的有限知识,我认为这可能与Lambda在调用时生成多个实例有关?如果你把它们放在FIFO SQS上,你不能确定项目是否按顺序处理,因为它们是异步运行的。如果我错了,请纠正我。 - 845614720
2
是的。那就是我认为的原因。如果你的 SQS 中有更多的消息,就会有更多的 Lambda 函数在后台被调用,这意味着有更多的 Lambda 实例轮询同一个队列,因此难以管理顺序执行。 - Asdfg
@Andrew - 使用消息组需要使用FIFO。如何在FIFO队列上触发lambda?如果无法触发,则如何消费此队列? - Anup Kalbalia
除非这个限制改变,Lambda 事件源 只能与标准队列一起使用,而不能与 FIFO 队列一起使用。因此,您需要以其他方式触发 Lambda,例如答案中提到的 CloudWatch 事件触发器。我的评论涉及到我有一个用例,其中我不需要所有的 FIFO 功能,但是我不能在没有 FIFO 的情况下使用消息组,所以我只能用困难的方法来做事情。 - Andrew
@Andrew - 你是否正在使用CloudWatch事件触发器?这是否允许在队列中有项目时立即处理队列?我猜想你无法安排触发器以少于一分钟的频率运行。我计划使用SNS来调用Lambda函数。 - Anup Kalbalia
显示剩余2条评论

4

-4

SQS事件源不做任何事情,只是每秒钟使用长轮询从队列中拉取。

如果您想让一切有序; - 为每秒钟创建一个Cloudwatch事件触发器(如Asdfg建议的那样) - 将并发限制设置为1 - 使用长轮询接收消息以降低成本


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接