当 AWS Lambda 超时时会发生什么?

What happens when an AWS Lambda times out?

我知道当 Lambda 超时时,它 returns 一个错误。

不过,一旦 Lambda 超时,我想知道它是否会立即被 AWS 杀死,或者它是否可以在后台继续 运行 任意时间(与原来的要求,可以这么说)。

我问是因为在我的情况下很重要,当 Lambda 超时时,该 Lambda 内部的所有处理也会立即停止。如果 AWS 不保证这一点,那么我将需要实施自己的措施来确保这一点,即定期检查时钟并在超时后手动停止执行。


(p.s。如果 Lambda 在超时时立即被杀死,我想知道 AWS 如何使 Lambda 保持在温暖的初始化状态以供后续调用使用。也就是说,它不能简单地杀死进程超时,否则下一次 Lambda 会很冷...)

lambda 函数的执行将停止,但不一定会停止从 lambda 调用的外部进程的执行,例如外部 API 或其他 AWS 服务。

为避免问题,lambda 有一个上下文方法 getRemainingTimeInMillis(),允许在执行期间检查超时前剩余的时间。 https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html

根据我自己的经验,大部分时间 lambda 都保持温暖。 AWS 杀死了代码的执行,而不是实例。

根据您发布的内容,我认为您需要某种编排而不是依赖 AWS 服务的行为特征。而是使用匹配服务来开发以满足您的要求。

这可能意味着您可以使用 StepFunction 来处理 Lambda 超时、失败时清理和重试逻辑,而不是调用 vanilla Lambda。或者您可能需要一个带有 TTL 的实际锁,您可以为此使用启用了 TTL 属性的 DynamoDB,这完全取决于您的要求。

总的来说,我认为您不能依赖 Lambda 或任何服务(而不是数据库中的 ACID 事务)将在您可以依赖的高度一致的庄园中执行。如果您的要求不是太严格,您可以简单地延迟下一次尝试的调用。这可以通过 SQS 延迟队列来完成。如果您决定使用 SQS,FIFO 也可以帮助您防止重复。