Python AWS Lambda-SQS指数退避集成

Python AWS Lambda-SQS指数退避集成,python,amazon-web-services,aws-lambda,boto3,amazon-sqs,Python,Amazon Web Services,Aws Lambda,Boto3,Amazon Sqs,我有一个由SQS事件触发的AWS Lambda(python)。如果lambda失败,SQS将根据重试设置重试。如何更改重试设置以启用指数退避?如果使用SQS触发器,我不确定是否可以使用指数退避,因为在幕后,这本质上不是一个触发器。Lambda会继续轮询SQS队列中的消息 SQS将使消息在可见性超时属性中定义的任何时间段内都不可见,这意味着每次Lambda函数拾取新消息时,该超时将在其他使用者再次看到该消息之前得到遵守 这给您留下了两个选择: 1) 不要使用Lambda触发器并亲自轮询队列。请记

我有一个由SQS事件触发的AWS Lambda(python)。如果lambda失败,SQS将根据重试设置重试。如何更改重试设置以启用指数退避?

如果使用SQS触发器,我不确定是否可以使用指数退避,因为在幕后,这本质上不是一个触发器。Lambda会继续轮询SQS队列中的消息

SQS将使消息在
可见性超时
属性中定义的任何时间段内都不可见,这意味着每次Lambda函数拾取新消息时,该超时将在其他使用者再次看到该消息之前得到遵守

这给您留下了两个选择:

1) 不要使用Lambda触发器并亲自轮询队列。请记住,如果是这种情况,您还必须手动删除消息

2) 增加源SQS队列上的可见性超时,使超时足以使潜在的故障系统恢复


有关Lambda如何处理来自AWS服务的事件的更多信息,请参见

感谢Thales Minussi,这很有帮助。我正在考虑一种方法,在这种方法中,我仍然可以使用SQS触发器并在代码中处理指数退避。我可以设置最大重试次数为15次。当SQS重试计数=1时,我将继续执行该过程。然后将处理重试计数=3、重试计数=7和重试计数=15。你认为这种方法有什么缺点吗?听起来不错。除了你的Lambda函数会被多次无效地触发,不必要地增加了成本,但是它可能会在审查@Thales时起作用。是的,我同意,这将导致不必要的调用。但是,我不需要为选项1实现类似的功能吗?我想我可能需要使用cloudwatch警报来触发lambda来轮询队列。这是一个有趣的问题,但不一定。在场景1)中,您处于控制状态,这意味着您可以在消息级别更改可见性超时,因此您可以使用它来计算指数退避。如果您真的想实现它,我认为唯一的方法就是亲自轮询队列。这对你有意义吗?太好了,谢谢!sdk现在允许您在将消息放入队列时指定延迟。我没有提供答案,因为我还没有尝试过,但它的工作方式应该是确保lambda成功,但在此之前,将消息延迟放回队列,并添加一个名为retries的额外属性,以便您可以根据该属性计算未来的延迟。我刚刚发现了这个属性,它描述了我解释的内容,但将应用程序逻辑中的指数退避策略