本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在部署之前驗證 Amazon ECS 服務的狀態
藍/綠部署類型使用由 CodeDeploy 控制的藍/綠部署模式。使用此部署類型在傳送生產流量到服務之前,先驗證服務的新部署。如需詳細資訊,請參閱AWS CodeDeploy 《 使用者指南》中的什麼是 CodeDeploy。在部署之前驗證 Amazon ECS 服務的狀態
在藍/綠部署期間,流量有三種轉移方式:
-
Canary — 流量會以兩個增量轉移。您可以從預先定義的 canary 選項中選擇,這會指定流量轉移至您於第一次增量時更新之任務集的百分比,以及在剩餘流量於第二次增量前轉移的間隔 (以分鐘計)。
-
線性 — 流量以相等增量移動,每個增量之間的分鐘數相等。您可從預先指定的線性選項中指定每次增量的流量轉移百分比例,以及在每個增量之間的分鐘數。
-
All-at-once — 所有流量都會一次從原始任務集轉移到更新的任務集。
以下是當在服務使用藍/綠部署類型時,Amazon ECS 使用的 CodeDeploy 的元件:
- CodeDeploy 應用程式
-
CodeDeploy 資源的集合。這包含一或多個部署群組。
- CodeDeploy 部署群組
-
部署設定。這包含下列各項:
-
Amazon ECS 叢集和服務
-
負載平衡器目標群組和接聽器資訊
-
部署復原策略
-
流量重新路由設定
-
原始修訂終止設定
-
部署組態
-
可以設定為停止部署的 CloudWatch 警示組態
-
通知的 SNS 或 CloudWatch Events 設定
如需詳細資訊,請參閱 AWS CodeDeploy 使用者指南中的使用部署群組。
-
- CodeDeploy 部署組態
-
指定 CodeDeploy 在部署期間將生產流量路由到您替代任務集的方式。以下預先定義的線性和金絲雀部署組態可供使用。您也可以建立自訂定義的線性和金絲雀部署。如需詳細資訊,請參閱 AWS CodeDeploy 使用者指南中的使用部署組態。
-
CodeDeployDefault.ECSAllAtOnce:將所有流量一次轉移至更新的 Amazon ECS 容器
-
CodeDeployDefault.ECSLinear10PercentEvery1Minutes:每分鐘轉移 10% 的流量,直到轉移所有流量為止。
-
CodeDeployDefault.ECSLinear10PercentEvery3Minutes:每 3 分鐘轉移 10% 的流量,直到轉移所有流量為止。
-
CodeDeployDefault.ECSCanary10Percent5Minutes:在第一個增量中轉移 10% 的流量。剩餘的 90% 會在五分鐘之後部署。
-
CodeDeployDefault.ECSCanary10Percent15Minutes:在第一個增量中轉移 10% 的流量。剩餘的 90% 會在 15 分鐘之後部署。
-
- 修訂
-
修訂是 CodeDeploy 應用程式規格檔案 (AppSpec 檔案)。在 AppSpec 檔案中,您會指定任務定義的完整 ARN 和建立新部署時要路由流量到其中的替代任務集的容器和連接埠。容器名稱必須是在您的任務定義中參考的其中一個容器名稱。如果已在服務定義中更新網路組態或平台版本,您還必須在 AppSpec 檔案中指定這些詳細資訊。您也可以指定要在部署生命週期事件期間執行的 Lambda 函數。Lambda 函數可讓您在部署期間執行測試和傳回指標。如需詳細資訊,請參閱 AWS CodeDeploy 使用者指南中的 AppSpec 檔案參考。
考量事項
使用藍/綠部署類型時,請考慮下列各項:
-
一開始建立使用藍/綠部署類型的 Amazon ECS 服務時,會建立 Amazon ECS 任務集。
-
您必須設定服務,以使用 Application Load Balancer 或 Network Load Balancer。以下是負載平衡器需求:
-
您必須將生產接聽器新增到負載平衡器 (用於路由傳送生產流量)。
-
可以將選用的測試接聽器新增到負載平衡器,後者用於路由測試流量。如果您指定測試接聽程式,CodeDeploy 會在部署期間將您的測試流量路由到替代任務集。
-
生產和測試接聽器必須屬於相同的負載平衡器。
-
您必須為負載平衡器定義目標群組。目標群組會將流量透過生產接聽器路由到服務中的原始任務集。
-
當使用 Network Load Balancer 時,僅支援
CodeDeployDefault.ECSAllAtOnce
部署組態。
-
-
對於被設定為使用服務自動擴展和藍/綠部署類型的服務,自動擴展不會在部署期間被封鎖,但部署可能在某些情況下失敗。以下詳細說明此行為。
-
若服務在擴展而部署開始,綠任務集被建立,CodeDeploy 將最長等待一個小時並且不會轉移任何流量,直至綠任務集達到穩定狀態。
-
如果服務正在進行藍/綠部署而發生擴展事件,流量將持續轉移 5 分鐘。若服務未在 5 分鐘內達到穩定狀態,CodeDeploy 將停止部署並將其標記為失敗。
-
如果服務正在進行藍/綠部署且發生擴展事件,所需任務計數可能會設定為意外值。這是由於自動擴展將正在執行的任務計數視為當前容量,而其是所需任務計數計算中所使用的適當任務數的兩倍。
-
-
使用 Fargate 啟動類型或
CODE_DEPLOY
部署控制器類型的任務,不支援DAEMON
排程策略。 -
當您一開始建立 CodeDeploy 應用程式和部署群組時,必須指定下列項目:
-
您必須為負載平衡器定義兩個目標群組。一個目標群組必須是建立 Amazon ECS 服務時為負載平衡器定義的初始目標群組。第二個目標群組的唯一要求是,它無法與服務所使用的負載平衡器以外的其他負載平衡器相關聯。
-
-
當您為 Amazon ECS 服務建立 CodeDeploy 部署時,CodeDeploy 會在部署中建立替代任務集 (或綠任務集)。如果您將測試接聽程式新增至負載平衡器,CodeDeploy 會將您的測試流量路由到替代任務集。此時您可以執行任何驗證測試。然後,CodeDeploy 會根據部署群組的流量重新路由設定,將生產流量從原始任務集重新路由到替代任務集。
所需的 IAM 許可
Amazon ECS 和 CodeDeploy APIs 的組合可實現藍/綠部署。使用者必須擁有這些服務的適當許可,才能在 或 AWS Management Console 或 AWS CLI SDKs 中使用 Amazon ECS 藍/綠部署。
除了建立和更新服務的標準 IAM 許可之外,Amazon ECS 也需要下列許可。已將這些權限新增至 AmazonECS_FullAccess
IAM 政策。如需詳細資訊,請參閱AmazonECS_FullAccess。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment", "sns:ListTopics", "cloudwatch:DescribeAlarms", "lambda:ListFunctions" ], "Resource": ["*"] } ] }
注意
除了執行任務和服務所需的標準 Amazon ECS 許可之外,使用者還需要 iam:PassRole
許可,才能使用任務的 IAM 角色。
CodeDeploy 需要許可來呼叫 Amazon ECS API、修改 Elastic Load Balancing、叫用 Lambda 函數和說明 CloudWatch 警示,以及代表您修改服務所需計數的許可。建立使用藍/綠部署類型的 Amazon ECS 服務之前,您必須建立一個 IAM 角色 (ecsCodeDeployRole
)。如需詳細資訊,請參閱Amazon ECS CodeDeploy IAM 角色。
建立 Amazon ECS 服務範例 和 更新 Amazon ECS 服務範例 IAM 政策範例顯示使用者在 AWS Management Console上使用 Amazon ECS 藍/綠部署時所需的許可。