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

Law*_*eld 2 amazon-web-services aws-lambda aws-lambda-edge

据我了解,当 Lambda 超时时,它会返回错误。

不过,一旦 Lambda 超时,我想知道它是否会立即被 AWS 终止,或者它是否可以在后台继续运行任意时间(可以这么说,与原始请求分离)。

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


(ps,如果 Lambda 在超时时立即被杀死,我想知道 AWS 如何实现将 Lambda 保持在温暖的初始化状态以供后续调用。即,它不能简单地在超时时杀死进程,否则 Lambda 将被下次冷了……)

Jer*_*mie 5

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

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

根据我自己的经验,大多数时候 lambda 都保持温暖。AWS 终止了代码的执行,而不是实例。

  • 只是对答案的注释 - 使用nodejs异步函数存在执行泄漏,当重用执行上下文时,未完成的异步可能会继续https://lumigo.io/blog/node-js-lambda-execution-leaks-a-practical -指导/ (2认同)
  • 我不知道他们是怎么做到的。我发现 lambda 保持温暖,所以我猜实例/容器没有被杀死 (2认同)