AWS Lambda 最长运行 90 分钟:长任务能用,但别当成同步请求

2026-09-19 28 预计阅读时间: 1 分钟
来源: infoq.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:5 分钟

AWS Lambda 正在向长时间运行的任务靠近:运行在 Lambda Managed Instances 上的函数,单次执行最长可达 90 分钟,是此前 15 分钟上限的六倍。不过,这不意味着可以让传统同步请求等待 90 分钟;同步请求的限制没有随之改变。选型时,关键不只是“函数能跑多久”,还有调用方如何等待、任务中断后如何恢复。

90 分钟改变了哪些选择

过去,一个预计运行半小时的数据处理任务,很容易因为 15 分钟上限而被拆分,或者转向容器与常驻服务。新的执行时长让部分批处理、文件转换和周期性维护任务有机会继续采用函数模式。

但适用范围要看清:90 分钟针对 Lambda Managed Instances 上运行的函数,不能把它当作所有 Lambda 函数的新默认值。尤其不要把长时间计算直接塞进需要即时响应的 HTTP 请求里。即使后端可以继续工作,客户端、网关和调用链上的超时也可能先结束等待。

把长任务设计成“可提交、可查询”

可以这样实践:让 API 接收任务并返回任务 ID,由后台异步执行;调用方随后查询状态或接收完成通知。执行函数还应定期保存进度,使重试不必从头开始。

下面的命令演示如何异步调用一个已部署的函数。运行前,将 my-long-job 换成你的函数名,并确认该函数及其运行环境适用于你的目标执行时长。异步调用只说明调用方不等待执行完成,不会自动把函数的时长上限提高到 90 分钟

aws lambda invoke \
  --function-name my-long-job \
  --invocation-type Event \
  --cli-binary-format raw-in-base64-out \
  --payload '{"job_id":"job-2025-001","input":"s3://my-bucket/input.csv"}' \
  /tmp/lambda-invoke-response.json

cat /tmp/lambda-invoke-response.json

这条命令也不提供可靠的最终任务状态。生产环境中,可以用持久化存储记录 job_id、处理进度、完成结果和错误,并定义重复提交与重试的处理方式。

时长增加,不等于可以忽略故障

运行越久,越要明确超时、外部服务失败和部分结果的处理策略。一个实用检查清单是:

  • 留出收尾时间:不要把工作量排到执行时限的最后一秒。
  • 保存可恢复的进度:检查点应放在持久化存储中,而不是只放在进程内存或临时文件里。
  • 让步骤尽量幂等:任务重新执行时,避免重复写入或重复扣费。
  • 计算总成本:比较执行时间、资源占用和运维复杂度,而不只比较是否需要维护服务器。

90 分钟让 Lambda 能覆盖更多长任务,却没有抹平函数调用与传统服务之间的差异。如果任务需要持续对外提供连接或紧密控制进程生命周期,常驻服务或容器仍可能更合适;如果任务有明确起点和终点、可以异步提交且能够恢复进度,新的时长范围就值得评估。


相关推荐