AWS Lambda 中的重试次数

3

在设置AWS Lambda时,默认情况下我们有一个最大重试次数为2。

enter image description here

但是,当我给它添加DynamoDB触发器时,有一个10,000次的重试选项

enter image description here

那么哪个设置是正确的?如果出现异常,重试次数是10,000次还是2次。能否有人指导一下。谢谢!


不要发布代码、数据、错误信息等图像-将文本复制或输入到问题中 [ask] - Rob
2个回答

4
你所描述的是两件不同的事情。
第一种情况(2次重试)适用于Lambda的异步调用,这意味着你(或某个服务)调用Lambda函数并且不等待结果。在这种情况下,Lambda服务将尝试在后台调用你的函数2次,前提是原始调用失败。
第二种情况(10000次重试)适用于事件源映射(Event Source Mapping)。这是Lambda服务中的一个特殊过程,它监视数据源(在本例中是DynamoDB流)并代表你调用你的函数。在此过程中,除了设置映射之外,你无需参与。在这种情况下,事件源映射会同步调用你的Lambda函数。如果发生错误,它将尝试执行此操作10000次。这是与用于异步调用的重试设置不同的设置。
希望这可以帮到你。

在您的第一段中,您建议说 ->“在这种情况下,Lambda服务将尝试在后台调用您的函数2次。”...但是“在什么情况下”?您的意思是每次异步调用都会发生1次,总共加上2次重试吗? - Unbreakable
为什么异步操作被重试?你在回答中没有提到。 - Unbreakable
@Unbreakable 我明白了,我刚刚把它添加到答案中了。 - Marcin
是的,我知道这很令人困惑。AWS因为对不同事物采用类似的命名约定而闻名,导致了很多头疼的问题。你已经提供了一个例子。如果你使用DynamoDB和lambda一起使用,你需要使用事件源映射。它只支持同步调用。对于异步调用,例如,你可以手动使用aws cli,并使用[--invocation-type](https://docs.aws.amazon.com/cli/latest/reference/lambda/invoke.html)中的“Event”选项。 - Marcin
我以为只需在处理程序中添加async就可以使我的Lambda异步化。 - Unbreakable
显示剩余7条评论

2
那么哪些设置是正确的呢?如果发生异常,重试次数是10,000次还是2次?
两个重试具有不同的目的和含义。
1. Lambda 重试意味着您的 Lambda 函数已被触发,并且在处理事件期间发生了某些错误,因此它将再次重试以处理相同的事件。

enter image description here

在此情况下,您的 Lambda 函数尚未被触发,因为在从事件源中拉取流时出现了错误。

enter image description here

Lambda从事件源读取项目并触发函数。这个术语不是在函数的上下文中使用的。一旦它从流中获取事件,它就会使用所需的流事件触发Lambda。您可以查看下面的图表,这是Kinesis流的相同示例(下面的图表)。您可以阅读更多关于此的信息{{link3:异步调用}},{{link4:创建事件源映射}}和{{link5:了解Lambda事件重试}}。

使用DynamoDB Stream的Lambda


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