在部署之前驗證 Amazon ECS服務的狀態 - Amazon Elastic Container Service

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

在部署之前驗證 Amazon ECS服務的狀態

藍/綠部署類型使用 控制的藍/綠部署模型 CodeDeploy。使用此部署類型在傳送生產流量到服務之前,先驗證服務的新部署。如需詳細資訊,請參閱AWS CodeDeploy 使用者指南 中的什麼內容 CodeDeploy。在部署之前驗證 Amazon ECS服務的狀態

在藍/綠部署期間,流量有三種轉移方式:

  • Canary — 流量以兩個增量轉移。您可以從預先定義的 canary 選項中選擇,這會指定流量轉移至您於第一次增量時更新之任務集的百分比,以及在剩餘流量於第二次增量前轉移的間隔 (以分鐘計)。

  • 線性 — 流量以相等增量移動,每個增量之間的分鐘數相等。您可從預先指定的線性選項中指定每次增量的流量轉移百分比例,以及在每個增量之間的分鐘數。

  • 答ll-at-once:所有流量都會一次從原始任務集轉移到更新的任務集。

以下是當服務ECS使用藍/綠部署類型時,Amazon CodeDeploy 使用的元件:

CodeDeploy 應用程式

資源集合 CodeDeploy 。這包含一或多個部署群組。

CodeDeploy 部署群組

部署設定。這包含下列各項:

  • Amazon ECS叢集和服務

  • 負載平衡器目標群組和接聽器資訊

  • 部署復原策略

  • 流量重新路由設定

  • 原始修訂終止設定

  • 部署組態

  • CloudWatch 可設定為停止部署的警示組態

  • SNS 或 通知 CloudWatch 的事件設定

如需詳細資訊,請參閱 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 或 中使用 Amazon ECS 藍/綠部署與 AWS CLI 或 SDKs。

除了建立和更新服務的標準IAM許可外,Amazon ECS還需要下列許可。這些許可已新增至AmazonECS_FullAccessIAM政策。如需詳細資訊,請參閱Amazon ECS_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 APIs、修改 Elastic Load Balancing 、叫用 Lambda 函數並描述 CloudWatch 警示,以及代表您修改服務所需計數的許可。在建立使用藍/綠部署類型的 Amazon ECS服務之前,您必須建立IAM角色 (ecsCodeDeployRole)。如需詳細資訊,請參閱Amazon ECS CodeDeploy IAM角色

建立 Amazon ECS服務範例更新 Amazon ECS服務範例IAM政策範例顯示使用者在 上使用 Amazon ECS 藍/綠部署所需的許可 AWS Management Console。