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 函数超时的主要内容,如果未能解决你的问题,请参考以下文章