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

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

在部署之前驗證 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 藍/綠部署時所需的許可。