AWS Lambda现在允许在Lambda Managed Instances上运行的函数执行时间长达90分钟,是此前 15 分钟上限的 6 倍,这进一步模糊了 Lambda 调用与传统服务器之间的界限。传统同步请求的超时限制则保持不变。
Lambda 的超时时间从 2014 年推出时的 5 分钟增加到了 2018 年的 15 分钟,但该限制导致开发者必须针对长时间运行的工作负载寻找变通方案。这样的常见场景包括媒体处理、金融计算、数据处理与 ETL、AI 推理,以及网页抓取或大文件传输,在这些场景中,任务的持续执行时间往往会超过 15 分钟。
正如亚马逊云科技在“宣布AWS Lambda Managed Instances支持90分钟函数超时”一文中所指出的,运行时间更长的 Lambda 函数需要额外关注网络连接、临时凭证以及重复执行的问题。开发者应该确保连接和凭证在整个运行期间保持有效,并设计操作以安全地处理重试和重复处理。持久化函数(Durable Functions)同样需要保证幂等性,因为失败的步骤可能会被再次执行。亚马逊云科技团队针对幂等性发出了警告:
Lambda 不保证精确一次(exactly-once)的处理。随着函数运行时间的延长,重试和重复交付的时间窗口也随之增加。你可以使用 Powertools for AWS Lambda 在函数代码中实现幂等性,从而确保诸如支付或数据库写入等操作即使被执行多次,也能产生相同的结果。
15 分钟的限制一直是AWS社区中反复出现的痛点。无服务器专家兼 AWS Hero Yan Cui写到:
我感到有些遗憾,因为这进一步模糊了“运行服务器”与 Lambda 调用之间的界限。但这确实有其合理性,尤其是对于“用于智能体工作流的 Lambda”这一使用场景而言。
Lambda 目前主要提供两种形态:针对事件驱动型工作负载且超时时间为 15 分钟的函数,以及用于运行用户或 AI 生成代码、最长可运行 8 小时的 MicroVMs。Lambda Managed Instances 将这一模型扩展到了稳态工作负载,允许单个实例处理多个请求,并在无需管理基础设施的情况下,提供基于 EC2 的定价和计算选项。亚马逊云科技的首席工程师 Rajesh Pandey 强调了此次超时时间延长将如何简化众多部署:
我已经记不清客户问过多少次“你们什么时候才会构建‘长时间运行的 Lambda 函数’”了。现在它终于来了。过去围绕 Lambda 最大执行时长所搭建的那些“临时补丁”现在终于可以拆除了。
虽然社区的反馈大多是积极的,但也有一些人警告称,这可能会助长脆弱且成本高昂的设计模式。用户 Dull_Caterpillar_642写到:
如果任务需要 90 分钟,那么你很可能应该使用持久化函数(Durable Functions)之类的方案(……)除非你的代码在那段时间里确实一直在做有意义的工作,而不是在等待其他事情,否则 Lambda 的经济效益可能对你不太有利,而像 ECS Tasks 或 AWS Batch 这样的服务可能更合适。
延长超时时间并非 Lambda Managed Instances 近期的唯一公告,该服务现已经支持由Graviton5驱动的EC2实例。
在 Lambda Managed Instances 可用的所有区域中,现在均已经支持延长的超时时间。
查看英文原文:AWS Lambda Pushes Serverless Toward Long-Running Workloads