本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 CodeDeploy 藍/綠部署遷移至 Amazon ECS 藍/綠部署
CodeDeploy 藍/綠和 Amazon ECS 藍/綠部署提供類似的功能,但它們在您設定和管理它們的方式上有所不同。
CodeDeploy 藍/綠部署概觀
使用 CodeDeploy 建立 Amazon ECS 服務時,您會:
-
使用生產接聽程式和 (選擇性) 測試接聽程式建立負載平衡器。每個接聽程式都會設定單一 (預設) 規則,將所有流量路由至單一目標群組 (主要目標群組)。
-
建立 Amazon ECS 服務,設定為使用接聽程式和目標群組,
deploymentController
類型設定為CODE_DEPLOY
。服務建立會導致建立已向指定目標群組註冊的 (藍色) 任務集。 -
建立 CodeDeploy 部署群組 (做為 CodeDeploy 應用程式的一部分),並使用 Amazon ECS 叢集、服務名稱、負載平衡器接聽程式、兩個目標群組 (用於生產接聽程式規則的主要目標群組,以及用於替代任務的次要目標群組)、服務角色 (授予 CodeDeploy 許可來操作 Amazon ECS 和 Elastic Load Balancing 資源) 以及控制部署行為的各種參數的詳細資訊進行設定。
使用 CodeDeploy 時,會使用 部署新版本的服務CreateDeployment()
,指定 CodeDeploy 應用程式名稱、部署群組名稱和 AppSpec 檔案,提供新修訂和選用生命週期關聯的詳細資訊。CodeDeploy 部署會建立替代 (綠色) 任務集,並向次要目標群組註冊其任務。當運作狀態良好時,即可進行測試 (選用) 和生產。在這兩種情況下,透過將個別接聽程式規則變更為指向與綠色任務集相關聯的次要目標群組來實現重新路由。透過將生產接聽程式規則變更回主要目標群組來實現轉返。
Amazon ECS 藍/綠部署概觀
使用 Amazon ECS 藍/綠部署時,部署組態是 Amazon ECS 服務本身的一部分:
-
您必須使用包含兩個權重為 1 和 0 的目標群組的規則來預先設定負載平衡器生產接聽程式。
-
您需要指定下列資源,或更新服務資源:
-
此接聽程式規則的 ARN
-
兩個目標群組
-
授予 Amazon ECS 呼叫 Elastic Load Balancing APIsIAM 角色
-
執行 Lambda 函數的選用 IAM 角色
-
將
deploymentController
類型設定為ECS
,並將deploymentConfiguration.strategy
設定為BLUE_GREEN
。這會導致建立 (藍色) 服務部署,其任務已向主要目標群組註冊。
-
使用 Amazon ECS 藍/綠,透過呼叫 Amazon ECS 建立新的服務修訂UpdateService()
,傳遞新修訂的詳細資訊。服務部署會建立新的 (綠色) 服務修訂任務,並將其註冊至次要目標群組。Amazon ECS 透過切換接聽程式規則上的權重來處理重新路由和轉返操作。
關鍵實作差異
雖然這兩種方法都會導致建立初始任務集,但基礎實作會有所不同:
-
CodeDeploy 使用任務集,而 Amazon ECS 使用服務修訂。Amazon ECS 任務集是已由 Amazon ECS 服務修訂和部署取代的舊架構。後者提供更清楚的部署程序,以及服務部署和服務修訂歷史記錄。
-
使用 CodeDeploy,生命週期掛鉤會指定為提供給 的 AppSpec 檔案的一部分
CreateDeployment()
。這表示掛鉤可以從一個部署變更為下一個部署。使用 Amazon ECS 藍色/綠色時,掛鉤會指定為服務組態的一部分,而任何更新都需要UpdateService()
呼叫。 -
CodeDeploy 和 Amazon ECS 藍色/綠色都使用 Lambda 進行勾點實作,但預期的輸入和輸出會有所不同。
使用 CodeDeploy,函數必須呼叫
PutLifecycleEventHookExecutionStatus()
以傳回勾點狀態,可以是SUCCEEDED
或FAILED
。使用 Amazon ECS 時,Lambda 回應會用來指示勾點狀態。 -
CodeDeploy 會將每個勾點叫用為一次性呼叫,並預期會在一小時內傳回最終執行狀態。Amazon ECS 勾點更有彈性,因為它們可以傳回
IN_PROGRESS
指標,這表示勾點必須重複叫用,直到它導致SUCCEEDED
或 為止FAILED
。如需詳細資訊,請參閱Amazon ECS 服務部署的生命週期掛鉤。
遷移方法
有三種主要方法可從 CodeDeploy 藍/綠遷移至 Amazon ECS 藍/綠部署。每種方法在複雜性、風險、復原功能和潛在停機時間方面都有不同的特性。
重複使用用於 CodeDeploy 的相同 Elastic Load Balancing 資源
您更新現有的 Amazon ECS 服務以使用 Amazon ECS 部署控制器搭配藍/綠部署策略,而非 CodeDeploy 部署控制器。使用此方法時,請考慮下列事項:
-
遷移程序更為簡單,因為您正在更新現有的 Amazon ECS 服務部署控制器和部署策略。
-
正確設定和遷移時不會停機。
-
復原需要您還原服務修訂版。
-
風險很高,因為沒有平行藍/綠組態。
您可以使用與 CodeDeploy 相同的負載平衡器接聽程式和目標群組。如果您使用的是 AWS CloudFormation,請參閱 將 AWS CloudFormation CodeDeploy 藍/綠部署範本遷移至 Amazon ECS 藍/綠 AWS CloudFormation 範本。
-
修改生產/測試接聽程式的預設規則,以包含替代目標群組,並將主要目標群組的權重設定為 1,並將替代目標群組設定為 0。
對於 CodeDeploy,連接至服務的負載平衡器接聽程式會使用單一 (預設) 規則設定,將所有流量路由至單一目標群組。對於 Amazon ECS 藍/綠,負載平衡器接聽程式必須預先設定規則,其中包含具有權重的兩個目標群組。
-
呼叫
UpdateService
API 並將 參數設定為ECS
,並將 參數deploymentController
設定為 ,以更新現有的 Amazon ECSdeploymentStrategy
服務BLUE_GREEN
。指定目標群組ARNs、替代目標群組、生產接聽程式和選用的測試接聽程式。 -
驗證服務是否如預期般運作。
-
刪除此 Amazon ECS 服務的 CodeDeploy 設定,因為您現在使用 Amazon ECS 藍/綠。
具有現有負載平衡器的新服務
此方法使用藍/綠策略進行遷移。
使用此方法時,請考慮下列事項:
-
干擾最少。它只會在 Elastic Load Balancing 連接埠交換期間發生。
-
復原需要您還原 Elastic Load Balancing 連接埠交換。
-
風險很低,因為有平行組態。因此,您可以在流量轉移之前進行測試。
-
保持 CodeDeploy 設定的接聽程式、目標群組和 Amazon ECS 服務不變,以便在需要時輕鬆回復到此設定。
-
在現有負載平衡器下建立新的目標群組和新的接聽程式 (與原始接聽程式具有不同的連接埠)。然後,建立一個符合現有 Amazon ECS 服務的新 Amazon ECS 服務,但您
ECS
用作部署控制器、BLUE_GREEN
作為部署策略,並傳遞新目標群組和新接聽程式規則ARNs。 -
透過手動傳送 HTTP 流量到服務來驗證新設定。如果一切順利,請交換原始接聽程式和新接聽程式的連接埠,將流量路由到新設定。
-
驗證新設定,如果一切繼續如預期運作,請刪除 CodeDeploy 設定。
具有新負載平衡器的新服務
如同先前的方法,此方法使用藍/綠策略進行遷移。關鍵差異在於從 CodeDeploy 設定切換到 Amazon ECS 藍/綠設定發生在負載平衡器上方的反向代理層。反向代理層的範例實作是 Route 53 和 CloudFront。
此方法適用於已有此反向代理層的客戶,以及是否透過此服務進行的所有通訊 (例如,負載平衡器層級沒有直接通訊)。
使用此方法時,請考慮下列事項:
-
這需要反向代理層。
-
遷移程序更為複雜,因為您需要更新現有的 Amazon ECS 服務部署控制器和部署策略。
-
干擾最少。它只會在 Elastic Load Balancing 連接埠交換期間發生。
-
復原需要您反轉代理組態變更。
-
風險很低,因為有平行組態。因此,您可以在流量轉移之前進行測試。
-
請勿完整修改現有的 CodeDeploy 設定 (負載平衡器、接聽程式、目標群組、Amazon ECS 服務和 CodeDeploy 部署群組)。
-
建立針對 Amazon ECS 藍/綠部署設定的新負載平衡器、目標群組和接聽程式。
設定適當的資源。
-
Application Load Balancer - 如需詳細資訊,請參閱 藍/綠部署的 Application Load Balancer 資源。
-
Network Load Balancer - 如需詳細資訊,請參閱Amazon ECS 藍/綠部署的 Network Load Balancer 資源。
-
-
使用
ECS
作為部署控制器和BLUE_GREEN
部署策略建立新的服務,指向新的負載平衡器資源。 -
透過新的負載平衡器進行測試,以確認新的設定。
-
更新反向代理組態,將流量路由到新的負載平衡器。
-
觀察新的服務修訂版,如果一切繼續如預期運作,請刪除 CodeDeploy 設定。
後續步驟
遷移至 Amazon ECS 藍/綠部署之後:
-
更新您的部署指令碼和 CI/CD 管道,以使用 Amazon ECS
UpdateService
API 而非 CodeDeployCreateDeployment
API。 -
更新您的監控和提醒,以追蹤 Amazon ECS 服務部署,而不是 CodeDeploy 部署。
-
請考慮實作新部署程序的自動化測試,以確保其如預期般運作。