如何為託管於 Amazon ECS 的服務執行藍/綠部署?
我想為託管於 Amazon Elastic Container Service (Amazon ECS) 的服務執行藍/綠部署。
簡短說明
依照步驟執行藍/綠部署前,請確定您具備以下項目:
解決方法
建立 IAM 服務角色
若要將 AWS CodeDeploy 的藍/綠部署類型與 Amazon ECS 搭配使用,CodeDeploy 服務必須具備代表您更新 ECS 服務的權限。若要授予這些權限,請完成以下步驟:
- 開啟 AWS Identity and Access Management (IAM) console (AWS Identity and Access Management (IAM) 主控台)。
- 在瀏覽窗格中,選擇 Roles (角色)。
- 選擇 Create role (建立角色)。
- 在 Select type of trusted entity (選取受信任實體類型) 區段中,選擇 AWS service (AWS 服務),然後選擇 CodeDeploy。
- 在 Select your use case (選取使用案例) 區段中,選擇 CodeDeploy - ECS,然後選擇 Next (下一步)。
**注意:**保留預設的 AWSCodeDeployRoleForECS 政策。此政策包含 CodeDeploy 與 Amazon ECS 和其他服務正確互動所需的權限。 - 選擇 Next (下一步)
- 在 Role name (角色名稱),輸入 ecsCodeDeployRole
- (選用) 新增標籤
- 選擇 Create role (建立角色)。
建立 Application Load Balancer
完成以下步驟以建立 Application Load Balancer:
- 開啟 Amazon EC2 console (Amazon EC2 主控台)。
- 在瀏覽窗格的 Load Balancing (負載平衡) 區段中,選擇 Load Balancers (負載平衡器)。
- 選擇 Create Load Balancer (建立負載平衡器)。
- 在 Select load balancer type (選取負載平衡器類型) 區段中,在 Application Load Balancer,選擇 Create (建立)。
- 在 Name (名稱),輸入負載平衡器的名稱。
- 在 Network Mapping (網路對應) 區段中,選取您建立 Amazon ECS 叢集所在的 VPC。然後,選取可存取網際網路的任意兩個子網路。
- 在安全群組區段中,選取「Create a new security group (建立新的安全群組)」超連結。
- 在 Security group name (安全群組名稱),輸入 Sample Security-group。
- 選擇 Add Rule (新增規則)。
- 在 Port Range (連接埠範圍),輸入 8080。在 Source (來源),輸入 0.0.0.0/0。
- 選擇 Create Security Group (建立安全群組)。
- 重新整理 Load Balancer 頁面檢視中的安全群組,然後選取新建立的安全群組。
- 在 Listeners and Routing (接聽程式和路由) 區段中,選取「Create Target Group (建立目標群組)」超連結。
- 在 Target type (目標類型),選擇 IP addresses (IP 位址)。
- 在 Target group (目標群組),輸入目標群組的名稱。
- 選擇 Next (下一步),然後註冊目標群組並設定 IP。
- 選擇 Create Target Group (建立目標群組)。
建立任務定義
完成以下步驟:
- 開啟 Amazon ECS console (Amazon ECS 主控台)。
- 在瀏覽窗格中,選擇 Task Definitions (任務定義)。
- 選擇 Create new Task Definition (建立新任務定義)。
- 選擇 Fargate (Fargate),然後選擇 Next step (下一步)。
- 設定任務定義,然後選擇 Create (建立)。
以下範例任務定義使用 AWS Fargate 啟動類型和 Docker Hub 中的 NGINX 映像檔:
**注意:**在此範例和以下範例中,將 account_ID 值替換為您自己的帳戶編號。
{ "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "sample-website", "image": "nginx:latest", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "sample-website" }
建立 Amazon ECS 服務
完成以下步驟:
- 開啟 Amazon ECS console (Amazon ECS 主控台)。
- 在瀏覽窗格的 Amazon ECS (Amazon ECS) 區段中,選擇 Clusters (叢集),然後選擇您的叢集。
- 在 Services (服務) 索引標籤上,選擇 Create (建立) 以建立服務。
- 在 Environment (環境) 區段中,選取 Launch type (啟動類型),然後選取 FARGATE。
- 在 Task Definition (任務定義),選取您在上一節建立的任務定義。
- 在 Service name (服務名稱),輸入服務的名稱。例如: Sample-Website。
- 在 Number of tasks (任務數量),輸入您希望服務執行的任務數量。
- 在 Deployment options (部署選項) 區段中,選取 Blue/green deployment (powered by AWS CodeDeploy) (藍/綠部署 (由 AWS CodeDeploy 提供支援))。
- 在 Service role for CodeDeploy (CodeDeploy 的服務角色),選擇您先前建立的 ecsCodeDeployRole 服務角色。
- 在 Networking (網路) 區段中,選擇叢集 VPC、子網路,以及您先前建立的安全群組。
- 在 Load balancing (負載平衡) 區段中,在 Load balancer (負載平衡器) 類型,選擇 Application Load Balancer。
- 在 Load balancer name (負載平衡器名稱),選取您先前建立的負載平衡器。
- 在 Listeners (接聽程式) 區段中,在 Production listener port (生產環境接聽程式連接埠),選取 80:HTTP。
- 選取 Add a Test listener (新增測試接聽程式) 核取方塊。
- 在 Test listener port (測試接聽程式連接埠),選擇 create new (建立新項目),然後輸入 8080 作為接聽程式連接埠。
- 在 Target groups (目標群組) 區段中,在 Target group 1 name (目標群組 1 名稱),選擇您在建立負載平衡器時建立的目標群組。
- 在 Target group 2 name (目標群組 2 名稱),在 Amazon ECS 主控台中建立名為 sample-website-tg-2 的新目標群組。
- 選擇 Create (建立)。
現在,您可以看到新建立的服務,其中有一個任務正在執行。
確認 Amazon ECS 藍/綠部署正常運作
建立藍/綠 Amazon ECS 服務後,請建立包含變更的新任務定義修訂版,然後更新 Amazon ECS 服務。此動作會在 CodeDeploy 主控台中建立部署。
完成以下步驟,確認您的部署正常運作:
-
開啟 Amazon ECS console (Amazon ECS 主控台)。
-
在瀏覽窗格中,選擇 Task Definitions (任務定義)。
-
選取您的任務定義,選擇 Create new revision (建立新修訂版),然後選擇 Create (建立)。
**注意:**在以下範例中,將 image 屬性更新為使用 httpd:2.4。{ "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "sample-website", "image": "httpd:2.4", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "sample-website" } -
在瀏覽窗格中,選擇 Clusters (叢集),然後選擇您部署 Amazon ECS 服務的叢集。
-
在 Services (服務) 索引標籤上,選取您的 Amazon ECS 服務,然後選擇 Update (更新)。
-
在 Deployment configuration (部署組態) 區段中,在 Task Definition (任務定義),選擇您在步驟 3 建立的最新修訂版。
-
選擇 Update (更新)。
-
在 Deployments (部署) 索引標籤的 Deployment Id (部署 ID) 欄中,選擇部署 ID 以檢視 CodeDeploy 部署。
This article was reviewed and updated on 2024-07-22.
相關內容
已提問 3 年前

