有没有办法为 AWS Batch 作业(或队列)设置最长运行时间?这是大多数批处理管理器中的标准设置,可避免在作业因任何原因挂起时浪费资源。
5 回答
自 2018 年 4 月起,AWS Batch 现在支持在提交作业时或在作业定义中设置作业超时。
您可以在作业定义中或在提交作业时指定一个 attemptDurationSeconds 参数,该参数必须至少为 60 秒。在作业尝试的 startedAt 时间戳之后经过此秒数时,AWS Batch 将终止作业。在计算资源上,您的作业容器会收到一个 SIGTERM 信号,让您的应用程序有机会正常关闭;如果容器在 30 秒后仍在运行,则会发送 SIGKILL 信号以强制关闭容器。
来源:https ://docs.aws.amazon.com/batch/latest/userguide/job_timeouts.html
POST /v1/submitjob HTTP/1.1
Content-type: application/json
{
...
"timeout": {
"attemptDurationSeconds": number
}
}
AFAIK 没有功能可以做到这一点。但是,论坛中针对类似问题提出了解决方法。
一个想法是从 Step Functions 调用 Batch 作为 Activity,从该作业按计划(例如每分钟)回拨。如果它停止响应,那么您可以将该情况检测为活动中的超时并采取相应措施(终止作业等)。不是一个理想的解决方案(特别是如果工作继续作为“僵尸”返回),但这是一个开始。您还可能必须将活动令牌存储在数据库中以将它们跟踪到批处理作业 ID。
或者,您将该设置分为两个步骤,并在第一个状态下从 Lambda 调度批处理作业,然后将批处理作业 ID 传递给第二个步骤,然后使用 Retry 和 IntervalSeconds 轮询批处理(来自另一个 Lambda)的状态(例如每分钟一次,甚至使用指数退避),MaxAttempts 根据您的超时计算。这样,您不需要任何外部状态存储机制、长轮询甚至是从作业中“ping back”(它可能是僵尸),但缺点是步骤更多。
使用 aws 已经有一段时间了,找不到为批处理作业设置最大运行时间的方法。但是,您可以使用一些替代方法。 AWS 论坛
没有设置timeout
批处理作业的选项,但您可以设置一个 lambda 函数,该函数每 1 小时左右触发一次,并删除之前创建的作业 say 24 hours
。
遗憾的是,无法在 AWS Batch 上设置限制执行时间。一种解决方案可能是编辑 docker 的入口点以安排执行时间限制。