You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置ECS在排空旧任务前等待负载均衡健康检查通过?

ECS部署时避免目标组无健康实例的平滑部署配置

问题核心是ECS默认部署逻辑仅以「容器进程启动」作为任务运行的判定标准,没有绑定负载均衡的健康检查状态作为任务切流、下线的判断依据,才会出现新任务还没就绪就把旧任务杀掉的流量空窗。按以下步骤配置即可解决:

1. 开启部署时等待目标组健康检查(核心必开)

在ECS服务的部署配置页,打开等待目标组健康检查开关。开启后ECS不会在新任务刚注册到目标组就立刻注销旧任务,会持续轮询目标组的实例状态,直到新任务被ALB标记为healthy,才会触发旧任务的注销流程,从根源上避免新任务未就绪就切流的问题。

2. 调整部署容量阈值

  • 将服务部署配置中的最小健康任务百分比设为100%:保证部署全流程中,始终有等同于期望副本数的任务处于可用状态,不会提前下线旧任务腾挪资源。
  • 将最大任务百分比设为200%:部署时会先启动等量的新任务副本,等新副本全部通过健康检查后,再批量下线旧副本,全程没有容量缺口。如果集群资源比较紧张,这个值最低不要低于150%,保证至少能先启动1台新副本完成健康校验再推进切流。

3. 对齐多层健康检查规则

  • 任务定义层面必须配置容器健康检查:不要只靠容器进程启动判定任务就绪,要给容器配置HTTP/TCP类型的健康检查,探测应用的实际就绪端口/健康检查端点(比如/healthz),只有通过容器健康检查的任务,才会被ECS注册到ALB目标组。容器健康检查的启动宽限期要匹配应用实际启动耗时,比如普通Go应用设10-20秒、Java SpringBoot应用设40-60秒即可,不要设太长拖慢部署节奏,也不要设太短导致应用还没启动完就被误判不健康。
  • ALB目标组层面调整健康检查阈值:建议设为连续2次检查成功即判定健康、检查间隔15秒,平衡健康判定的准确性和部署速度,避免等待太久拉长部署周期,也不会因为偶发的启动抖动误判状态。

4. 配置优雅下线规则避免在途请求报错

  • 把ALB目标组的注销延迟设为30-60秒,不要设为0:旧任务从目标组注销时,ALB会在这段时间里停止给旧任务转发新请求,等待旧任务把已经接收的存量请求处理完再断开连接。
  • 任务定义里的停止超时时间不要短于注销延迟时长,保证旧任务收到SIGTERM终止信号后,有足够时间处理完存量请求再退出,不会被强制杀掉导致请求5xx。

配置完成后的部署流程会变为:

  1. 旧版本任务正常运行承载流量
  2. 提交新任务定义后,ECS按最大任务百分比阈值启动新任务
  3. 新任务启动完成、通过容器级健康检查后,才会被注册到ALB目标组
  4. ALB对新任务做健康探测,直到新任务连续通过检查被标记为健康
  5. ECS确认新任务全部可用后,才会把旧任务从目标组注销
  6. 等待注销延迟时长结束、旧任务处理完所有在途请求后,再终止旧任务
    全程目标组始终有健康实例承载流量,不会出现1-2分钟的流量中断空窗。

内容的提问来源于stack exchange,提问作者Ian Ling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:30:46