觀點 · 資訊分享
ECS 部署可以「九成健康就放行」:不必再等最慢的那幾個容器,流水線少卡一截
AWS 的容器服務 ECS 讓滾動部署可以自訂「幾成的新容器健康就算成功」,剩下的交給一般擴充慢慢補上,也能決定舊容器要不要先清乾淨再宣告完成。
- 發布
- 2026-09-05
- 篇幅
- 約 4 分鐘 · 1,666 字
- 結構
- 7 節 + 4 題常見問題
- 標籤

一句話看懂:AWS 的容器服務 ECS 讓滾動部署可以自己決定「新容器健康到幾成就算成功」,不用再傻等最慢的那幾個容器。

先用白話講:滾動部署在做什麼?
想像全班要搭遊覽車去校外教學,舊車上的同學要一個個換到新車。老師原本的規定是:100 個人全部上了新車、點名完畢,才算出發成功。只要有兩三個同學還在福利社排隊,整台車就動不了,後面的行程也全部卡住。
ECS(Elastic Container Service)是 AWS 管理容器的服務,更新程式時用的「滾動部署」就是這種換車流程:一批一批把舊容器換成新容器。以前規定很死,新容器要 100% 到齊且健康,部署才算完成。
發生什麼事
AWS 在 9 月 4 日宣布,ECS 的滾動部署支援提早成功條件(Early Success Criteria)。你可以自己設一個「健康比例」:
- 官方範例:預期 100 個容器、門檻設 90%,ECS 等到 90 個健康就宣告部署成功
- 剩下的 10 個容器,交給一般的服務擴充(scaling)慢慢補,不再卡在部署流程裡
- 後面的部署、CI/CD 流水線和其他依賴這次部署的動作,可以早點開始
官方特別提到,GPU 推論這類機器不好搶的服務最有感:硬體有沒有空位,會讓部分容器啟動特別慢。
舊容器怎麼處理?
新版本達標之後,舊版本的容器要清掉。ECS 給你兩種選擇:
| 模式 | 做法 | 適合誰 |
|---|---|---|
| BLOCKING | 先把舊容器清乾淨,才宣告成功 | 想要部署結束時環境就是乾淨的 |
| DEFERRED | 先宣告成功,舊容器在部署外慢慢結束 | 有長時間連線、或開了縮減保護的服務 |
DEFERRED 模式下,ECS 最多會嘗試清理兩週;如果舊容器被保護超過兩週,就沒辦法自動清掉了。
給開發者的技術細節
在 --deployment-configuration 裡加上 earlySuccessCriteria:
aws ecs update-service \
--cluster MyCluster \
--service MyService \
--deployment-configuration '{
"strategy": "ROLLING",
"earlySuccessCriteria": {
"enable": true,
"healthyPercent": 90,
"sourceServiceRevisionCleanup": "BLOCKING"
}
}'
- 比例範圍:
healthyPercent必須介於服務的minimumHealthyPercent與 100 之間,計算時無條件進位(例如預期 3 個、門檻 50%,要 2 個健康) - 至少一台:ECS 會先啟動至少一個新容器並等它健康,才開始評估比例
- 回滾保護會結束:部署算成功之後,斷路器與 CloudWatch 警報的自動回滾就不再生效,包含後續補容器的期間
- 範圍:只適用滾動部署,所有 AWS 商業區域與 GovCloud(美國)都能用,主控台、CLI、SDK 與 IaC 工具都能設定
我的看法
接案時常見的情況是:服務其實早就穩穩跑著新版本,流水線卻在等最後一兩個容器,或是等舊容器把長連線慢慢結束,整個發版流程就拖了一大截。這個功能把「什麼時候算完成」的決定權交還給人,我覺得很實用。
但要小心的是,部署一算成功,自動回滾就收工了。如果門檻設太低,新版本有問題時反而少了一層保護。我會建議先從 90% 以上開始,確認健康檢查設定夠準,再視需要調整。另外,如果你的服務沒有卡過這種問題,其實不用特地去開它,維持預設最單純。
名詞小辭典
- ECS(Elastic Container Service):AWS 的容器管理服務,幫你決定容器要跑在哪台機器上、掛了要不要重開。
- 滾動部署(Rolling Deployment):一批一批把舊版本換成新版本,過程中服務不中斷。
- 斷路器(Circuit Breaker):部署時偵測到新容器一直失敗,就自動退回舊版本的機制。
- CI/CD:自動測試、自動打包、自動上線的流程,俗稱流水線。