

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

# Amazon ECS Canary 部署
<a name="canary-deployment"></a>

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

## Canary 部署中涉及的資源
<a name="canary-deployment-resources"></a>

以下是 Amazon ECS Canary 部署中涉及的資源：
+ 流量轉移 - Amazon ECS 用來轉移生產流量的程序。對於 Amazon ECS Canary 部署，流量會分兩個階段轉移：先到 Canary 百分比，然後完成部署。
+ Canary 百分比 - 在評估期間路由至新版本的流量百分比。
+ Canary 製作時間 - 在繼續完整部署之前監控 Canary 版本的持續時間。
+ 部署製作時間 - 在將所有生產流量轉移到新服務修訂版之後，Amazon ECS 會在終止舊服務修訂版之前等待的時間，以分鐘為單位。這是生產流量轉移後，藍色和綠色服務修訂同時執行的持續時間。
+ 生命週期階段 – 部署操作中的一系列事件，例如「生產流量轉移後」。
+ 生命週期掛鉤 - 在特定生命週期階段執行的 Lambda 函數。您可以建立驗證部署的 函數。
+ 目標群組 – 一種 Elastic Load Balancing 資源，用於將請求路由至一個或多個已註冊的目標 (例如 EC2 執行個體)。當您建立接聽程式時，可以為其預設動作指定一個目標群組。流量會轉送至接聽程式規則中指定的目標群組。
+ 接聽程式 – 一種 Elastic Load Balancing 資源，用於透過已設定的通訊協定與連接埠檢查連線請求。您為接聽程式定義的規則決定了 Amazon ECS 如何將請求路由至已註冊的目標。
+ 規則 – 與接聽程式相關聯的 Elastic Load Balancing 資源。規則定義了請求的路由方式，包含動作、條件與優先順序。

## 考量事項
<a name="canary-deployment-considerations"></a>

選擇部署類型時，請考量下列事項：
+ 資源用量：Canary 部署會在評估期間同時執行原始任務集和 Canary 任務集，進而增加資源用量。
+ 流量：確保 Canary 百分比產生足夠的流量，以便對新版本進行有意義的驗證。
+ 監控複雜性：Canary 部署需要同時監控和比較兩個不同版本之間的指標。
+ 回復速度：Canary 部署可透過將流量移回原始任務集來啟用快速回復。
+ 風險緩解：Canary 部署透過將暴露限制在少數百分比的使用者，提供絕佳的風險緩解能力。
+ 部署持續時間：Canary 部署包含延長整體部署時間但提供驗證機會的評估期間。

## Canary 部署的運作方式
<a name="canary-how-it-works"></a>

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

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

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

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

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

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

1. 完成階段：終止藍色環境以完成部署。

Canary 流量轉移階段遵循下列步驟：
+ 初始 - 部署從 100% 路由至藍色 （目前） 服務修訂版的流量開始。綠色 （新） 服務修訂最初會接收測試流量，但不會接收生產流量。
+ Canary 流量轉移 - 這是兩步驟流量轉移策略。
  + 步驟 1：10.0% 到綠色，90.0% 到藍色
  + 步驟 2：100.0% 到綠色，0.0% 到藍色
+ Canary 製作時間 - 在 Canary 流量轉移後等待可設定的持續時間 (Canary 製作時間），以允許在流量負載增加時監控和驗證新修訂版的效能。
+ 生命週期關聯 - 選用 Lambda 函數可以在部署期間的不同生命週期階段執行，以執行自動驗證、監控或自訂邏輯。為每個生產流量轉移步驟調用為 PRODUCTION\$1TRAFFIC\$1SHIFT 設定的 Lambda 函數或生命週期掛鉤。

### 部署生命週期階段
<a name="canary-deployment-lifecycle-stages"></a>

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

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

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


**生命週期階段**  

| 生命週期階段 | Description | 生命週期掛鉤支援 | 
| --- | --- | --- | 
| RECONCILE\$1SERVICE | 僅當啟動新的服務部署且存在多個處於 ACTIVE 狀態的服務修訂版時，此階段才會發生。 | 是 | 
| PRE\$1SCALE\$1UP | 綠色服務修訂版尚未啟動。藍色服務修訂版正在處理 100% 的生產流量。沒有測試流量。 | 是 | 
| SCALE\$1UP | 綠色服務修訂版向上擴展到 100% 並啟動新任務的時間。此時綠色服務修訂版不處理任何流量。 | 否 | 
| POST\$1SCALE\$1UP | 綠色服務修訂版已啟動。藍色服務修訂版正在處理 100% 的生產流量。沒有測試流量。 | 是 | 
| TEST\$1TRAFFIC\$1SHIFT | 藍色與綠色服務修訂版均在執行中。藍色服務修訂版處理 100% 的生產流量。綠色服務修訂版正在從 0% 遷移至 100% 的測試流量。 | 是 | 
| POST\$1TEST\$1TRAFFIC\$1SHIFT | 測試流量轉移已完成。綠色服務修訂版處理 100% 的生產流量。 | 是 | 
| PRODUCTION\$1TRAFFIC\$1SHIFT | Canary 生產流量會路由至綠色修訂版，並使用 24 小時逾時叫用生命週期掛鉤。第二個步驟會將剩餘的生產流量轉移到綠色修訂版。 | 是 | 
| POST\$1PRODUCTION\$1TRAFFIC\$1SHIFT | 生產流量轉移已完成。 | 是 | 
| BAKE\$1TIME | 藍色與綠色服務修訂版同時執行的持續時間。 | 否 | 
| CLEAN\$1UP | 藍色服務修訂已完全縮減至 0 項執行中任務。在此階段之後，綠色服務修訂版現在是生產服務修訂版。 | 否 | 

### 組態參數
<a name="canary-configuration-parameters"></a>

Canary 部署需要下列組態參數：
+ Canary 百分比 - 在 Canary 階段期間路由至新服務修訂的流量百分比。這允許使用受控的生產流量子集進行測試。
+ Canary 製作時間 - 在 Canary 階段期間等待的持續時間，然後再將剩餘的流量轉移到新的服務修訂版。這提供了監控和驗證新版本的時間。

### 流量管理
<a name="canary-traffic-management"></a>

Canary 部署使用負載平衡器目標群組來管理流量分佈：
+ 原始目標群組 - 包含目前穩定版本的任務，並接收大部分流量。
+ Canary 目標群組 - 包含新版本的任務，並接收一小部分的流量進行測試。
+ 加權路由 - 負載平衡器使用加權路由規則，根據設定的 Canary 百分比在目標群組之間分配流量。

### 監控和驗證
<a name="canary-monitoring-validation"></a>

有效的 Canary 部署依賴於全面監控：
+ 運作狀態檢查 - 在接收流量之前，兩個任務集都必須通過運作狀態檢查。
+ 指標比較 - 比較原始版本和 Canary 版本之間的關鍵效能指標，例如回應時間、錯誤率和輸送量。
+ 自動化轉返 - 如果 Canary 版本顯示效能降低，將 CloudWatch 警示設定為自動觸發轉返。
+ 手動驗證 - 在繼續之前，使用評估期間手動檢閱日誌、指標和使用者意見回饋。

### Canary 部署的最佳實務
<a name="canary-best-practices"></a>

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

#### 選擇適當的流量百分比
<a name="canary-traffic-percentage"></a>

選取 Canary 流量百分比時，請考慮下列因素：
+ 啟動小型 - 從 5-10% 的流量開始，在發生問題時將影響降至最低。
+ 考慮應用程式關鍵性 - 對關鍵任務應用程式使用較小的百分比，對較不重要的服務使用較大的百分比。
+ 流量帳戶 - 確保 Canary 百分比產生足夠的流量以進行有意義的驗證。

#### 設定適當的評估期間
<a name="canary-evaluation-time"></a>

根據下列考量設定評估期間：
+ 允許足夠的時間 - 設定足夠長的評估期間以擷取有意義的效能資料，通常為 10-30 分鐘。
+ 考慮流量模式 - 考慮應用程式的流量模式和尖峰使用時間。
+ 平衡速度和安全性 - 較長的評估期間提供更多資料，但部署速度緩慢。

#### 實作全方位監控
<a name="canary-monitoring-setup"></a>

設定監控以追蹤 Canary 部署效能：
+ 關鍵指標 - 監控兩個任務集的回應時間、錯誤率、輸送量和資源使用率。
+ 警示型回復 - 設定 CloudWatch 警示，以在指標超過閾值時自動觸發回復。
+ 比較分析 - 設定儀表板來side-by-side比較原始版本和 Canary 版本之間的指標。
+ 業務指標 - 包括業務特定的指標，例如轉換率或使用者參與度以及技術指標。

#### 規劃復原策略
<a name="canary-rollback-strategy"></a>

使用以下策略準備潛在的回復案例：
+ 自動化轉返 - 根據運作狀態檢查和效能指標設定自動轉返觸發條件。
+ 手動轉返程序 - 當自動觸發未擷取所有問題時，記錄手動轉返的清除程序。
+ 回復測試 - 定期測試回復程序，以確保在需要時正常運作。

#### 在部署之前徹底驗證
<a name="canary-testing-validation"></a>

在繼續 Canary 部署之前，請確保徹底驗證：
+ 部署前測試 - 在 Canary 部署之前，徹底測試預備環境中的變更。
+ 運作狀態檢查組態 - 確保運作狀態檢查準確反映應用程式準備程度和功能。
+ 相依性驗證 - 確認新版本與下游和上游服務相容。
+ 資料一致性 - 確保資料庫結構描述變更和資料遷移回溯相容。

#### 協調團隊參與
<a name="canary-team-coordination"></a>

在 Canary 部署期間確保有效的團隊協調：
+ 部署時段 - 當團隊可以監控和回應時，在上班時間排程 Canary 部署。
+ 通訊管道 - 為部署狀態和問題升級建立明確的通訊管道。
+ 角色指派 - 定義監控、決策和復原執行的角色和責任。