确保 ECS 仅在新任务准备就绪时终止旧任务
Ensure ECS only kills old tasks when new ones are ready
我们有基于 Docker 的 ECS 服务,一旦进程启动,它需要同步应用程序状态,然后才能准备好开始服务请求。这可能需要一些时间(进程开始后的几秒)。
使用 ECS 服务时,更改任务定义版本会触发任务的滚动替换(好),但速度太快。一旦任务达到 RUNNING
状态,下一个任务就会被终止。但是 RUNNING
只是意味着进程已经启动,并不意味着它已经满足了它自己的所有内部要求以准备工作......在这种情况下,还没有准备好服务请求
整个更新过程发生得如此之快,以至于在某些情况下,所有旧任务都会在任何新任务完成加载其状态之前被终止,我们最终会遇到中断。
确保 ECS 服务不会终止 old/hot 任务的最佳或正确方法是什么,直到新任务实际热且完全在线,而不仅仅是容器进程 运行 ?
您可以通过设置以下参数来控制部署进行的速度:
deploymentConfiguration
(具体来说,您的 minimumHealthyPercent
)
- 启用健康检查(load balancer health checks if you are using a load balancer or with container health checks)
- 设置
healthCheckGracePeriodSeconds
(用于负载均衡器健康检查)或 startPeriod
(用于容器健康检查)以考虑启动同步时间。
我们有基于 Docker 的 ECS 服务,一旦进程启动,它需要同步应用程序状态,然后才能准备好开始服务请求。这可能需要一些时间(进程开始后的几秒)。
使用 ECS 服务时,更改任务定义版本会触发任务的滚动替换(好),但速度太快。一旦任务达到 RUNNING
状态,下一个任务就会被终止。但是 RUNNING
只是意味着进程已经启动,并不意味着它已经满足了它自己的所有内部要求以准备工作......在这种情况下,还没有准备好服务请求
整个更新过程发生得如此之快,以至于在某些情况下,所有旧任务都会在任何新任务完成加载其状态之前被终止,我们最终会遇到中断。
确保 ECS 服务不会终止 old/hot 任务的最佳或正确方法是什么,直到新任务实际热且完全在线,而不仅仅是容器进程 运行 ?
您可以通过设置以下参数来控制部署进行的速度:
deploymentConfiguration
(具体来说,您的minimumHealthyPercent
)- 启用健康检查(load balancer health checks if you are using a load balancer or with container health checks)
- 设置
healthCheckGracePeriodSeconds
(用于负载均衡器健康检查)或startPeriod
(用于容器健康检查)以考虑启动同步时间。