15 分钟后 lambda 函数超时

Posted

技术标签:

【中文标题】15 分钟后 lambda 函数超时【英文标题】:Timeout in lambda function after 15 minutes 【发布时间】:2021-05-13 10:26:45 【问题描述】:

我编写了一个查询数据的函数,然后我处理该数据并调用两个外部 API。如果记录数为 2000,我的函数工作正常,但超过 900 秒后会导致超时错误。我已经为这个功能分配了 4GB。 在这种情况下还能做什么?

【问题讨论】:

如果您有更多记录,请使用更多 lambda。 请接受其中一个答案 【参考方案1】:

如果您有一个需要运行无服务器且执行时间超过 15 分钟的单体应用程序,您可以考虑改用 ECS:

    使用您的函数创建 Docker 映像 将 Docker 映像上传到 ECR 创建 ECS 任务定义以运行容器映像 运行 ECS 任务

【讨论】:

【参考方案2】:

Lambda 非常好用并且超级容易使用,但是你有 15 个时间限制,你不能以任何方式增加。您还有 10GB 内存的限制(CPU 会相应地扩展),所以如果您正在考虑提高性能,请记住这一点。我遇到了同样的问题,我正在转移到 Fargate,您可以在其中定义一个任务,该任务运行一个上传到 ECR 的 docker 容器。您没有超时,您可以拥有多 CPU 环境,并且可以使用 lambda 调用任务。这与@Paolo 描述的方法类似,请查看here 了解两种服务之间的差异。

【讨论】:

【参考方案3】:

看起来 lambda 的最大时间限制是 15 分钟,来自 AWS Lambda Time limit

尝试重新设计您的解决方案以提高效率,您可以使两个 API 调用并发并使用批处理或并行扫描这是一个很好的指南Best Practices for Querying and Scanning Data

【讨论】:

【参考方案4】:

您可以使用初始 lambda 执行来触发 other 异步 lambda 调用。您将遍历您的 2000 条记录,并为每条记录触发另一个 lambda,传递有关要处理的记录的详细信息。每个异步触发的 lambda 将只处理它发送的单个记录。这样,您基本上可以并行处理记录,而不是以串行方式。

这些资源解释了一些事情:

https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html

通过异步调用,您的 initial lambda 只会循环遍历记录并为每条记录触发异步 lambda 调用。您将需要考虑并发性,以确保不会因并发执行过多的 lambda 而受到限制。

【讨论】:

以上是关于15 分钟后 lambda 函数超时的主要内容,如果未能解决你的问题,请参考以下文章

Lambda 函数在与 redis 的简单连接上超时

AWS Lambda RDS 连接超时

AWS Lambda 任务在 6.00 秒后超时

Aws lambda 描述实例超时

将 AWS Lambda 连接到 Redshift - 60 秒后超时

在将 aws lambda 与 redis 连接时,任务在 23.02 秒后超时错误