跳至內容

如何為託管於 Amazon ECS 的服務執行藍/綠部署?

4 分的閱讀內容
0

我想為託管於 Amazon Elastic Container Service (Amazon ECS) 的服務執行藍/綠部署。

簡短說明

依照步驟執行藍/綠部署前,請確定您具備以下項目:

解決方法

建立 IAM 服務角色

若要將 AWS CodeDeploy 的藍/綠部署類型與 Amazon ECS 搭配使用,CodeDeploy 服務必須具備代表您更新 ECS 服務的權限。若要授予這些權限,請完成以下步驟:

  1. 開啟 AWS Identity and Access Management (IAM) console (AWS Identity and Access Management (IAM) 主控台)。
  2. 在瀏覽窗格中,選擇 Roles (角色)。
  3. 選擇 Create role (建立角色)。
  4. 在 Select type of trusted entity (選取受信任實體類型) 區段中,選擇 AWS service (AWS 服務),然後選擇 CodeDeploy。
  5. 在 Select your use case (選取使用案例) 區段中,選擇 CodeDeploy - ECS,然後選擇 Next (下一步)。
    **注意:**保留預設的 AWSCodeDeployRoleForECS 政策。此政策包含 CodeDeploy 與 Amazon ECS 和其他服務正確互動所需的權限。
  6. 選擇 Next (下一步)
  7. 在 Role name (角色名稱),輸入 ecsCodeDeployRole
  8. (選用) 新增標籤
  9. 選擇 Create role (建立角色)。

建立 Application Load Balancer

完成以下步驟以建立 Application Load Balancer:

  1. 開啟 Amazon EC2 console (Amazon EC2 主控台)。
  2. 在瀏覽窗格的 Load Balancing (負載平衡) 區段中,選擇 Load Balancers (負載平衡器)。
  3. 選擇 Create Load Balancer (建立負載平衡器)。
  4. 在 Select load balancer type (選取負載平衡器類型) 區段中,在 Application Load Balancer,選擇 Create (建立)。
  5. 在 Name (名稱),輸入負載平衡器的名稱。
  6. 在 Network Mapping (網路對應) 區段中,選取您建立 Amazon ECS 叢集所在的 VPC。然後,選取可存取網際網路的任意兩個子網路。
  7. 在安全群組區段中,選取「Create a new security group (建立新的安全群組)」超連結。
  8. 在 Security group name (安全群組名稱),輸入 Sample Security-group。
  9. 選擇 Add Rule (新增規則)。
  10. 在 Port Range (連接埠範圍),輸入 8080。在 Source (來源),輸入 0.0.0.0/0。
  11. 選擇 Create Security Group (建立安全群組)。
  12. 重新整理 Load Balancer 頁面檢視中的安全群組,然後選取新建立的安全群組。
  13. 在 Listeners and Routing (接聽程式和路由) 區段中,選取「Create Target Group (建立目標群組)」超連結。
  14. 在 Target type (目標類型),選擇 IP addresses (IP 位址)。
  15. 在 Target group (目標群組),輸入目標群組的名稱。
  16. 選擇 Next (下一步),然後註冊目標群組並設定 IP。
  17. 選擇 Create Target Group (建立目標群組)。

建立任務定義

完成以下步驟:

  1. 開啟 Amazon ECS console (Amazon ECS 主控台)。
  2. 在瀏覽窗格中,選擇 Task Definitions (任務定義)。
  3. 選擇 Create new Task Definition (建立新任務定義)。
  4. 選擇 Fargate (Fargate),然後選擇 Next step (下一步)。
  5. 設定任務定義,然後選擇 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 服務

完成以下步驟:

  1. 開啟 Amazon ECS console (Amazon ECS 主控台)。
  2. 在瀏覽窗格的 Amazon ECS (Amazon ECS) 區段中,選擇 Clusters (叢集),然後選擇您的叢集。
  3. 在 Services (服務) 索引標籤上,選擇 Create (建立) 以建立服務。
  4. 在 Environment (環境) 區段中,選取 Launch type (啟動類型),然後選取 FARGATE。
  5. 在 Task Definition (任務定義),選取您在上一節建立的任務定義。
  6. 在 Service name (服務名稱),輸入服務的名稱。例如: Sample-Website。
  7. 在 Number of tasks (任務數量),輸入您希望服務執行的任務數量。
  8. 在 Deployment options (部署選項) 區段中,選取 Blue/green deployment (powered by AWS CodeDeploy) (藍/綠部署 (由 AWS CodeDeploy 提供支援))。
  9. 在 Service role for CodeDeploy (CodeDeploy 的服務角色),選擇您先前建立的 ecsCodeDeployRole 服務角色。
  10. 在 Networking (網路) 區段中,選擇叢集 VPC、子網路,以及您先前建立的安全群組。
  11. 在 Load balancing (負載平衡) 區段中,在 Load balancer (負載平衡器) 類型,選擇 Application Load Balancer。
  12. 在 Load balancer name (負載平衡器名稱),選取您先前建立的負載平衡器。
  13. 在 Listeners (接聽程式) 區段中,在 Production listener port (生產環境接聽程式連接埠),選取 80:HTTP。
  14. 選取 Add a Test listener (新增測試接聽程式) 核取方塊。
  15. 在 Test listener port (測試接聽程式連接埠),選擇 create new (建立新項目),然後輸入 8080 作為接聽程式連接埠。
  16. 在 Target groups (目標群組) 區段中,在 Target group 1 name (目標群組 1 名稱),選擇您在建立負載平衡器時建立的目標群組。
  17. 在 Target group 2 name (目標群組 2 名稱),在 Amazon ECS 主控台中建立名為 sample-website-tg-2 的新目標群組。
  18. 選擇 Create (建立)。

現在,您可以看到新建立的服務,其中有一個任務正在執行。

確認 Amazon ECS 藍/綠部署正常運作

建立藍/綠 Amazon ECS 服務後,請建立包含變更的新任務定義修訂版,然後更新 Amazon ECS 服務。此動作會在 CodeDeploy 主控台中建立部署。

完成以下步驟,確認您的部署正常運作:

  1. 開啟 Amazon ECS console (Amazon ECS 主控台)。

  2. 在瀏覽窗格中,選擇 Task Definitions (任務定義)。

  3. 選取您的任務定義,選擇 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"
    }
  4. 在瀏覽窗格中,選擇 Clusters (叢集),然後選擇您部署 Amazon ECS 服務的叢集。

  5. 在 Services (服務) 索引標籤上,選取您的 Amazon ECS 服務,然後選擇 Update (更新)。

  6. 在 Deployment configuration (部署組態) 區段中,在 Task Definition (任務定義),選擇您在步驟 3 建立的最新修訂版。

  7. 選擇 Update (更新)。

  8. 在 Deployments (部署) 索引標籤的 Deployment Id (部署 ID) 欄中,選擇部署 ID 以檢視 CodeDeploy 部署。

AWS 官方已更新 2 年前