需要运行需要超过 15 分钟才能完成的 aws lambda 函数吗?

viv*_*vek 8 amazon-web-services aws-lambda

我的 Lambda 函数有 15 分钟的限制,这是 5 分钟更早。Lambda 进程在 15 分钟后自动终止,但我的进程需要超过 15 分钟。我怎么办?

Rya*_*ies 25

通常使用 Fat Lambda 策略或 Step Function

胖拉姆达策略

当您的任务很单一但运行时间很长和/或您有很高的硬件要求时,可以使用 Fat Lambda 策略。这个想法是,您将创建一个执行长流程的脚本,并将其放入 Fargate 中托管的 docker 容器中。这意味着执行时间和对强大硬件的访问没有限制(如何创建 Fat Lambda https://youtu.be/XUp9SHIHU8w

阶跃函数策略

Step Function 策略用于将整个过程分解 为更小的步骤。通常,如果您的流程可以将许多微型阶段连接在一起,而不是尝试同时完成所有工作,那么阶梯函数策略将适合您。请记住,“Fat Lambda”也可以由 Step Function 触发(如何创建 Step Function https://www.youtube.com/watch?v=s0XFX3WHg0w

另外,请注意,记住 lambda 表达式还可以触发其他 lambda 表达式。因此,您甚至可以让不同的 lambda 运行您的 lambda 代码。例如,FOR 循环发送大量迷你 lambda 来运行小任务。您甚至可能不需要 Step Function 或 Fat Lambda。

如果您不知道如何选择,请按照以下步骤操作。它将帮助您解决问题。

单一 Lambda >> Lambda 调用另一个 Lambda?>> 步骤功能?>> Fargate(胖Lambda)?

  • 欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下也是有用的:[在链接周围添加上下文](//meta.stackexchange.com/a/8259),这样您的其他用户就会知道它是什么,并且为什么它在那里,然后引用您链接到的页面中最相关的部分,以防目标页面不可用。[仅是链接的答案可能会被删除。](/help/deleted-answers) (6认同)

Chr*_*ort 9

没有办法解决这个问题。如果您正在进行某种长时间运行的处理,那么您的另一个选择可能是在 EC2 实例上运行此任务。如果这个长时间运行的过程可以分解为多个步骤,那么您可以查看 Lambda Step Functions。

15 分钟是最大值,这个最大值不能延长。

编辑:

最近我开始运行一些长度可变的长时间运行的任务(从几分钟到几个小时不等)。为了实现这一点,我一直在使用 AWS Fargate,我的任务是在 ECR 中存储为 Docker 容器的 node.js 脚本。这样做相当容易,也相当便宜(我认为我们在一个月内每天花费 1 美元多一点来运行这项任务)。对于可能遇到此答案的其他人来说,这可能值得研究。

https://docs.aws.amazon.com/AmazonECS/latest/userguide/scheduled_tasks.html

  • 是否有任何理由说明为什么 15 分钟是最长的时间?感觉完全是随意的。 (7认同)

sas*_*hee 9

如果您可以对任务进行检查点,那么您可以检查getRemainingTimeInMillis文档),如果时间已用完,则可以使用参数调用相同的 lambda 来继续。

像这样的流程:

  • 开始工作(完成 0%)
  • 时间所剩无几(已完成 40%)=> 启动一个新的 lambda 告诉它从 40% 开始
  • 旧的 lambda 终止,新的 lambda 开始工作 (40%)
  • 当时间不足时,再次启动新的 lambda (80%)
  • 第三个 lambda 完成工作

但它需要一种非常特定类型的任务来支持这一点。如果您需要从开始到结束执行一次,那么 lambda 不是一个好的选择。