觀點 · 資訊分享

ECS 部署可以「九成健康就放行」:不必再等最慢的那幾個容器,流水線少卡一截

AWS 的容器服務 ECS 讓滾動部署可以自訂「幾成的新容器健康就算成功」,剩下的交給一般擴充慢慢補上,也能決定舊容器要不要先清乾淨再宣告完成。

發布
2026-09-05
篇幅
約 4 分鐘 · 1,666 字
結構
7 節 + 4 題常見問題
標籤
#AWS#Amazon ECS#滾動部署#CI/CD#容器
ECS 部署可以「九成健康就放行」:不必再等最慢的那幾個容器,流水線少卡一截

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

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:自動測試、自動打包、自動上線的流程,俗稱流水線。

資料來源

常見問題

Early Success Criteria 是什麼?
它讓你自己決定「新版容器健康到什麼程度,就算這次部署成功」。例如預期 100 個容器、門檻設 90%,等 90 個健康就宣告成功,其餘 10 個用一般的擴充流程慢慢補上。
門檻要設多少才安全?
healthyPercent 必須落在服務的 minimumHealthyPercent 與 100 之間,並且會無條件進位。官方提醒,部署算成功之後回滾機制就不再保護,所以請設在你確定新版本沒問題的比例。
BLOCKING 和 DEFERRED 差在哪?
BLOCKING 會先把舊版本容器清乾淨才宣告成功;DEFERRED 則是達到門檻就先宣告成功,舊版本容器在部署之外慢慢結束,適合有長時間連線的服務。DEFERRED 最多會嘗試兩週。
藍綠部署也能用嗎?
官方公告寫明這個功能適用於滾動(rolling)部署策略,沒有提到藍綠部署,需要的話請以官方文件為準。
LINE