View a markdown version of this page

Amazon ECS Canary 部署 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon ECS Canary 部署

Canary 部署會先將一小部分的流量路由到新修訂版以進行初始測試,然後在 Canary 階段成功完成之後一次轉移所有剩餘的流量。透過 Amazon ECS Canary 部署,使用實際使用者流量驗證新的服務修訂,同時將暴露風險降至最低。此方法提供一種受控方式來部署變更,並能夠監控效能,並在偵測到問題時快速復原。

Canary 部署中涉及的資源

以下是 Amazon ECS Canary 部署中涉及的資源:

  • 流量轉移 - Amazon ECS 用來轉移生產流量的程序。對於 Amazon ECS Canary 部署,流量會分兩個階段轉移:先到 Canary 百分比,然後完成部署。

  • Canary 百分比 - 在評估期間路由至新版本的流量百分比。

  • Canary 製作時間 - 在繼續完整部署之前監控 Canary 版本的持續時間。

  • 部署製作時間 - 在將所有生產流量轉移到新服務修訂版之後,Amazon ECS 會在終止舊服務修訂版之前等待的時間,以分鐘為單位。這是生產流量轉移後,藍色和綠色服務修訂同時執行的持續時間。

  • 生命週期階段 – 部署操作中的一系列事件,例如「生產流量轉移後」。

  • 生命週期掛鉤 - 在特定生命週期階段的 Lambda 函數或暫停點。Lambda 勾點會叫用您定義用來執行自訂程式碼的 Lambda 函數。暫停掛鉤會暫停部署,並等待您呼叫 ContinueServiceDeployment 以繼續。

  • 目標群組 – 一種 Elastic Load Balancing 資源,用於將請求路由至一個或多個已註冊的目標 (例如 EC2 執行個體)。當您建立接聽程式時,可以為其預設動作指定一個目標群組。流量會轉送至接聽程式規則中指定的目標群組。

  • 接聽程式 – 一種 Elastic Load Balancing 資源,用於透過已設定的通訊協定與連接埠檢查連線請求。您為接聽程式定義的規則決定了 Amazon ECS 如何將請求路由至已註冊的目標。

  • 規則 – 與接聽程式相關聯的 Elastic Load Balancing 資源。規則定義了請求的路由方式,包含動作、條件與優先順序。

考量事項

選擇部署類型時,請考量下列事項:

  • 資源用量:Canary 部署會在評估期間同時執行原始任務集和 Canary 任務集,進而增加資源用量。

  • 流量:確保 Canary 百分比產生足夠的流量,以便對新版本進行有意義的驗證。

  • 監控複雜性:Canary 部署需要同時監控和比較兩個不同版本之間的指標。

  • 回復速度:Canary 部署可透過將流量移回原始任務集來啟用快速回復。

  • 風險緩解:Canary 部署透過將暴露限制在少數百分比的使用者,提供絕佳的風險緩解。

  • 部署持續時間:Canary 部署包含延長整體部署時間但提供驗證機會的評估期間。

Canary 部署的運作方式

Amazon ECS Canary 部署程序遵循具有六個不同階段的結構化方法,以確保安全可靠的應用程式更新。每個階段都有特定用途,以驗證應用程式,並將其從目前版本 (藍色) 轉換為新版本 (綠色)。

  1. 準備階段 – 在現有的藍色環境旁建立綠色環境。

  2. 部署階段:將新的服務修訂版部署到綠色環境。Amazon ECS 會使用更新後的服務修訂版啟動新任務,同時藍色環境會繼續處理生產流量。

  3. 測試階段:使用測試流量路由驗證綠色環境。Application Load Balancer 會將測試請求導向綠色環境,同時生產流量仍保留在藍色環境中。

  4. Canary 流量轉移階段:在 Canary 階段將流量設定百分比轉移至新的綠色服務修訂版本,接著將 100.0% 的流量轉移至 Green 服務修訂版本

  5. 監控階段:在封裝時間段內監控應用程式運作狀態、效能指標與警示狀態。偵測到問題時,會啟動復原操作。

  6. 完成階段:透過終止藍色環境來完成部署。

Canary 流量轉移階段遵循下列步驟:

  • 初始 - 部署從 100% 路由到藍色 (目前) 服務修訂版的流量開始。綠色 (新) 服務修訂最初會接收測試流量,但不會接收生產流量。

  • Canary 流量轉移 - 這是兩步驟流量轉移策略。

    • 步驟 1:10.0% 到綠色,90.0% 到藍色

    • 步驟 2:100.0% 到綠色,0.0% 到藍色

  • Canary 製作時間 - 在 Canary 流量轉移後等待可設定的持續時間 (Canary 製作時間),以允許在流量負載增加時監控和驗證新修訂版的效能。

  • 生命週期掛鉤 - 在部署期間,可以在各種生命週期階段設定選用的 Lambda 函數或暫停掛鉤,以執行自動驗證、監控或自訂邏輯。為每個生產流量轉移步驟PRE_PRODUCTION_TRAFFIC_SHIFT調用為 PRODUCTION_TRAFFIC_SHIFT或 設定的勾點。

部署生命週期階段

Canary 部署程序會經過不同的生命週期階段,每個階段都有特定的責任和驗證檢查點。了解這些階段有助於監控部署進度並對問題進行有效的疑難排解。

每個生命週期階段最多可持續 24 小時,此外,ProductION_TRAFFIC_SHIFT 中的每個流量轉移步驟最多可持續 24 小時。建議將該值保持在 24 小時標記以內。這是因為非同步程序需要時間來觸發勾點。系統逾時、部署失敗,然後在階段達到 24 小時後啟動轉返。

CloudFormation 部署有額外的逾時限制。雖然 24 小時階段限制仍然有效,但 對整個部署 CloudFormation 強制執行 36 小時限制。 部署 CloudFormation 失敗,然後在程序未在 36 小時內完成時啟動轉返。

對於暫停掛鉤,您可以設定逾時最多 20,160 分鐘 (14 天)。整體部署逾時為 30 天。

生命週期階段
生命週期階段 說明 生命週期掛鉤支援
RECONCILE_SERVICE 僅當啟動新的服務部署且存在多個處於 ACTIVE 狀態的服務修訂版時,此階段才會發生。
PRE_SCALE_UP 綠色服務修訂版尚未啟動。藍色服務修訂版正在處理 100% 的生產流量。沒有測試流量。
SCALE_UP 綠色服務修訂版向上擴展到 100% 並啟動新任務的時間。此時綠色服務修訂版不處理任何流量。
POST_SCALE_UP 綠色服務修訂版已啟動。藍色服務修訂版正在處理 100% 的生產流量。沒有測試流量。
TEST_TRAFFIC_SHIFT 藍色與綠色服務修訂版均在執行中。藍色服務修訂版處理 100% 的生產流量。綠色服務修訂版正在從 0% 遷移至 100% 的測試流量。 是 (僅限 Lambda)
POST_TEST_TRAFFIC_SHIFT 測試流量轉移已完成。綠色服務修訂版處理 100% 的生產流量。
PRE_PRODUCTION_TRAFFIC_SHIFT 在每個生產流量轉移步驟之前發生。對於 Canary,這發生在 Canary 流量轉移之前以及剩餘的流量轉移之前。
PRODUCTION_TRAFFIC_SHIFT Canary 生產流量會路由至綠色修訂版,並使用 24 小時逾時叫用生命週期掛鉤。第二個步驟會將剩餘的生產流量轉移到綠色修訂版。 是 (僅限 Lambda)
POST_PRODUCTION_TRAFFIC_SHIFT 生產流量轉移已完成。
BAKE_TIME 藍色與綠色服務修訂版同時執行的持續時間。
CLEAN_UP 藍色服務修訂已完全縮減至 0 項執行中任務。在此階段之後,綠色服務修訂版現在是生產服務修訂版。

組態參數

Canary 部署需要下列組態參數:

  • Canary 百分比 - 在 Canary 階段期間路由至新服務修訂的流量百分比。這允許使用受控的生產流量子集進行測試。

  • Canary 製作時間 - 在 Canary 階段期間等待的持續時間,然後再將剩餘的流量轉移到新的服務修訂版。這提供了監控和驗證新版本的時間。

流量管理

Canary 部署使用負載平衡器目標群組來管理流量分佈:

  • 原始目標群組 - 包含目前穩定版本的任務,並接收大部分流量。

  • Canary 目標群組 - 包含新版本的任務,並接收一小部分的流量進行測試。

  • 加權路由 - 負載平衡器使用加權路由規則,根據設定的 Canary 百分比在目標群組之間分配流量。

監控和驗證

有效的 Canary 部署依賴於全面監控:

  • 運作狀態檢查 - 在接收流量之前,兩個任務集都必須通過運作狀態檢查。

  • 指標比較 - 比較原始版本和 Canary 版本之間的關鍵效能指標,例如回應時間、錯誤率和輸送量。

  • 自動化轉返 - 如果 Canary 版本顯示效能降低,將 CloudWatch 警示設定為自動觸發轉返。

  • 手動驗證 - 在繼續之前,使用評估期間手動檢閱日誌、指標和使用者意見回饋。

Canary 部署的最佳實務

遵循這些最佳實務,以確保使用 服務成功部署 Canary。

選擇適當的流量百分比

選取 Canary 流量百分比時,請考慮下列因素:

  • 從小開始 - 從 5-10% 的流量開始,在發生問題時將影響降至最低。

  • 考慮應用程式關鍵性 - 對關鍵任務應用程式使用較小的百分比,對較不關鍵的服務使用較大的百分比。

  • 流量帳戶 - 確保 Canary 百分比產生足夠的流量以進行有意義的驗證。

設定適當的評估期間

根據下列考量設定評估期間:

  • 允許足夠的時間 - 設定足夠長的評估期間以擷取有意義的效能資料,通常為 10-30 分鐘。

  • 考慮流量模式 - 考慮應用程式的流量模式和尖峰使用時間。

  • 平衡速度和安全性 - 較長的評估期間提供更多資料,但部署速度緩慢。

實作全方位監控

設定監控以追蹤 Canary 部署效能:

  • 關鍵指標 - 監控兩個任務集的回應時間、錯誤率、輸送量和資源使用率。

  • 警示型回復 - 設定 CloudWatch 警示,以在指標超過閾值時自動觸發回復。

  • 比較分析 - 設定儀表板來side-by-side比較原始版本和 Canary 版本之間的指標。

  • 業務指標 - 包含業務特定的指標,例如轉換率或使用者參與度以及技術指標。

規劃復原策略

使用以下策略準備潛在的回復案例:

  • 自動化轉返 - 根據運作狀態檢查和效能指標設定自動轉返觸發條件。

  • 手動轉返程序 - 當自動觸發未擷取所有問題時,記錄手動轉返的清除程序。

  • 回復測試 - 定期測試回復程序,以確保在需要時正常運作。

在部署之前徹底驗證

在繼續 Canary 部署之前,請確保徹底驗證:

  • 部署前測試 - 在 Canary 部署之前,徹底測試預備環境中的變更。

  • 運作狀態檢查組態 - 確保運作狀態檢查準確反映應用程式的準備程度和功能。

  • 相依性驗證 - 確認新版本與下游和上游服務相容。

  • 資料一致性 - 確保資料庫結構描述變更和資料遷移回溯相容。

協調團隊參與

確保 Canary 部署期間有效的團隊協調:

  • 部署時段 - 當團隊可以監控和回應時,在上班時間排程 Canary 部署。

  • 通訊管道 - 為部署狀態和問題升級建立明確的通訊管道。

  • 角色指派 - 定義監控、決策和復原執行的角色和責任。