

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

# 教學課程：將應用程式部署至 Amazon ECS
<a name="tutorial-ecs-deployment"></a>

 在本教學課程中，您將了解如何使用 CodeDeploy 將應用程式部署至 Amazon ECS。您從已建立並部署到 Amazon ECS 的應用程式開始。第一步是加上新標籤修改應用程式的任務定義檔案，以更新您的應用程式。接著，您可以使用 CodeDeploy 部署更新。在部署期間，CodeDeploy 會將您的更新安裝到新的替換任務集。然後，它會將生產流量從位於其原始任務集中的 Amazon ECS 應用程式的原始版本轉移到替代任務集中的更新版本。

 在 Amazon ECS 部署期間，CodeDeploy 會使用負載平衡器，其設定有兩個目標群組和一個生產流量接聽程式。下圖顯示部署開始之前，負載平衡器、生產接聽程式、目標群組和 Amazon ECS 應用程式之間的關聯。本教學課程會使用 Application Load Balancer。您也可以使用 Network Load Balancer。

![\[Application Load Balancer 或 Network Load Balancer、一個生產接聽程式、兩個目標群組、一個任務集和一個 Amazon ECS 服務。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-1.png)


 成功部署後，生產流量接聽程式會將流量轉送至新的替換任務集，並終止原始任務集。下圖顯示您的資源在成功部署後如何相關。如需詳細資訊，請參閱[Amazon ECS 部署期間會發生什麼情況](deployment-steps-ecs.md#deployment-steps-what-happens)。

![\[Application Load Balancer 或 Network Load Balancer、一個生產接聽程式、兩個目標群組和一個替代任務集。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-5.png)


如需如何使用 AWS CLI 將應用程式部署到 Amazon ECS 的詳細資訊，請參閱[教學課程：使用藍/綠部署建立服務](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html)。如需有關如何使用 CodePipeline 透過 CodeDeploy 偵測和自動部署變更至 Amazon ECS 服務的資訊，請參閱[教學課程：使用 Amazon ECR 來源和 ECS-to-CodeDeploy 部署建立管道](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-ecs-ecr-codedeploy.html)。

完成本教學課程後，您可以使用您建立的 CodeDeploy 應用程式和部署群組，在 中新增部署驗證測試[教學課程：使用驗證測試部署 Amazon ECS 服務](tutorial-ecs-deployment-with-hooks.md)。

**Topics**
+ [先決條件](tutorial-ecs-prereqs.md)
+ [步驟 1：更新您的 Amazon ECS 應用程式](tutorial-ecs-update-the-ecs-application.md)
+ [步驟 2：建立 AppSpec 檔案](tutorial-ecs-create-appspec-file.md)
+ [步驟 3：使用 CodeDeploy 主控台部署您的應用程式](tutorial-ecs-deployment-deploy.md)
+ [步驟 4：清理](tutorial-ecs-clean-up.md)

# 先決條件
<a name="tutorial-ecs-prereqs"></a>

若要完成此教學課程，您必須先：
+  完成 [CodeDeploy 入門](getting-started-codedeploy.md)中的步驟 2 和 3。
+  建立已設定兩個目標群組和一個接聽程式的 Application Load Balancer。如需有關使用主控台建立負載平衡器的資訊，請參閱[設定 CodeDeploy Amazon ECS 部署的負載平衡器、目標群組和接聽程式](deployment-groups-create-load-balancer-for-ecs.md)。如需有關使用 建立負載平衡器的資訊 AWS CLI，請參閱《*Amazon Elastic Container Service 使用者指南*》中的[步驟 1：建立 Application Load Balancer](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html#create-blue-green-loadbalancer)。當您建立負載平衡器時，請為此教學課程記下以下事項：
  +  負載平衡器的名稱。
  +  目標群組的名稱。
  +  負載平衡器接聽程式所使用的連接埠。
+  建立 Amazon ECS 叢集和服務。如需詳細資訊，請參閱《*Amazon Elastic Container Service 使用者指南*》中的[教學課程：使用藍/綠部署建立](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html)服務中的步驟 2、3 和 4。請為此教學課程記下以下事項：
  +  Amazon ECS 叢集的名稱。
  +  Amazon ECS 服務所使用的任務定義的 ARN。
  +  Amazon ECS 服務所使用的容器名稱。
+  為您的 AppSpec 檔案建立 Amazon S3 儲存貯體。

# 步驟 1：更新您的 Amazon ECS 應用程式
<a name="tutorial-ecs-update-the-ecs-application"></a>

 在本節中，您可以使用其任務定義的新修訂來更新 Amazon ECS 應用程式。更新後的修訂會新增金鑰和標籤對。在 中[步驟 3：使用 CodeDeploy 主控台部署您的應用程式](tutorial-ecs-deployment-deploy.md)，您可以部署更新版本的 Amazon ECS 應用程式。

**更新您的任務定義**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1.  在導覽窗格中，選擇 **Task Definitions** (任務定義)。

1. 選擇 Amazon ECS 服務使用的任務定義。

1. 選擇任務定義修訂版，然後選擇**建立新修訂版**、**建立新修訂版**。

1.  針對本教學課程，稍微更新任務定義，只新增一個標籤。在頁面底部標籤下****，輸入新的索引鍵和值對來建立新的標籤。

1.  選擇**建立**。

   任務定義的修訂編號會遞增 1。

1.  選擇 **JSON** 標籤。請記下以下項目，因為您在下一個步驟中需要此資訊。
   +  `taskDefinitionArn` 的值。格式為 `arn:aws:ecs:aws-region:account-id:task-definition/task-definition-family:task-definition-revision`。這是已更新之任務定義的 ARN。
   +  在 `containerDefinitions` 元素中，`name` 的值。這是容器的名稱。
   +  在 `portMappings` 元素中，`containerPort` 的值。這是容器的連接埠。

# 步驟 2：建立 AppSpec 檔案
<a name="tutorial-ecs-create-appspec-file"></a>

 在本節中，您會建立 AppSpec 檔案，並將其上傳至您在 [先決條件](tutorial-ecs-prereqs.md)區段中建立的 Amazon S3 儲存貯體。Amazon ECS 部署的 AppSpec 檔案會指定您的任務定義、容器名稱和容器連接埠。如需詳細資訊，請參閱[Amazon ECS 部署的 AppSpec 檔案範例](reference-appspec-file-example.md#appspec-file-example-ecs)及[Amazon ECS 部署的 AppSpec 'resources' 區段](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)。

**建立 AppSpec 檔案**

1.  如果您想要使用 YAML 建立 AppSpec 檔案，請建立名為 的檔案`appspec.yml`。如果您想要使用 JSON 建立 AppSpec 檔案，請建立名為 的檔案`appspec.json`。

1.  根據您的 AppSpec 檔案是否使用 YAML 或 JSON，選擇適當的標籤，並將其內容複製到您剛建立的 AppSpec 檔案。對於 `TaskDefinition` 屬性，請使用您在[步驟 1：更新您的 Amazon ECS 應用程式](tutorial-ecs-update-the-ecs-application.md)一節記下的任務定義 ARN。

------
#### [ JSON AppSpec ]

   ```
   {
     "version": 0.0,
     "Resources": [
       {
         "TargetService": {
           "Type": "AWS::ECS::Service",
           "Properties": {
             "TaskDefinition": "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number",
             "LoadBalancerInfo": {
               "ContainerName": "your-container-name",
               "ContainerPort": your-container-port
             }
           }
         }
       }
     ]
   }
   ```

------
#### [ YAML AppSpec ]

   ```
   version: 0.0
   Resources:
     - TargetService:
         Type: AWS::ECS::Service
         Properties:
           TaskDefinition: "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number"
           LoadBalancerInfo:
             ContainerName: "your-container-name"
             ContainerPort: your-container-port
   ```

------
**注意**  
 您的替換任務集會從原始任務集繼承子網路、安全群組、平台版本及指派的公有 IP 值。您可以在 AppSpec 檔案中設定替代任務集的選用屬性，以覆寫這些值。如需詳細資訊，請參閱[Amazon ECS 部署的 AppSpec 'resources' 區段](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)及[Amazon ECS 部署的 AppSpec 檔案範例](reference-appspec-file-example.md#appspec-file-example-ecs)。

1.  將您的 AppSpec 檔案上傳至您建立做為本教學課程先決條件的 S3 儲存貯體。

# 步驟 3：使用 CodeDeploy 主控台部署您的應用程式
<a name="tutorial-ecs-deployment-deploy"></a>

 在本節中，您會建立 CodeDeploy 應用程式和部署群組，將更新的應用程式部署到 Amazon ECS。在部署期間，CodeDeploy 會在新的替換任務集中，將應用程式的生產流量轉移到其新版本。若要完成此步驟，您需要下列項目：
+  您的 Amazon ECS 叢集名稱。
+  您的 Amazon ECS 服務名稱。
+  您的 Application Load Balancer 名稱。
+  您的生產接聽程式連接埠。
+  您的目標群組名稱。
+  您建立的 S3 儲存貯體的名稱。

**建立 CodeDeploy 應用程式**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/codedeploy/](https://console.aws.amazon.com/codedeploy/) 開啟 CodeDeploy 主控台。

1. 選擇**建立應用程式**。

1. 在 **Application name (應用程式名稱)** 中，輸入 **ecs-demo-codedeploy-app**。

1. 在 **Compute Platform (運算平台)** 中，選擇 **Amazon ECS**。

1. 選擇**建立應用程式**。

**建立 CodeDeploy 部署群組**

1. 在應用程式頁面的 **Deployment groups (部署群組)** 標籤上，選擇 **Create deployment group (建立部署群組)**。

1. 在 **Deployment group name (部署群組名稱)** 中，輸入 **ecs-demo-dg**。

1. 在**服務角色**中，選擇授予 CodeDeploy 存取 Amazon ECS 的服務角色。如需詳細資訊，請參閱[的身分和存取管理 AWS CodeDeploy](security-iam.md)。

1. 在**環境組態**中，選擇您的 Amazon ECS 叢集名稱和服務名稱。

1. 從**負載平衡器**中，選擇為 Amazon ECS 服務提供流量的負載平衡器名稱。

1. 從**生產接聽程式連接埠**中，選擇為 Amazon ECS 服務提供生產流量的接聽程式連接埠和通訊協定 （例如 **HTTP：80**)。本教學課程不包含選用的測試接聽程式，因此請勿從 **Test listener port (測試接聽程式連接埠)** 中選擇連接埠。

1. 從 **Target group 1 name (目標群組 1 名稱)** 和 **Target group 2 name (目標群組 2 名稱)** 中，選擇在部署期間路由流量的目標群組。確定這些是您為負載平衡器建立的目標群組。何者用於目標群組 1，何者用於目標群組 2，都沒關係。

1. 選擇 **Reroute traffic immediately (立即重新路由流量)**。

1. 對於 **Original revision termination (原始修訂終止)**，選擇 0 天、0 小時和 5 分鐘。這可讓您看到部署比使用預設值 (1 小時) 更快完成。  
![\[CodeDeploy 主控台的環境組態區段。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/ecs-demo-create-acd-dg.png)

1. 選擇 **Create deployment group (建立部署群組)**。

**部署 Amazon ECS 應用程式**

1. 從您的部署群組主控台頁面，選擇 **Create deployment (建立部署)**。

1.  針對 **Deployment group (部署群組)**，選擇 **ecs-demo-dg**。

1.  針對 **Revision type (修訂版類型)**，選擇 **My application is stored in Amazon S3 (我的應用程式存放在 Amazon S3)**。在 **Revision location (修訂版位置)** 中，輸入您的 S3 儲存貯體的名稱。

1.  針對 **Revision file type (修訂檔案類型)**，視需要選擇 **.json** 或 **.yaml**。

1.  (選用) 在 **Deployment description (部署描述)** 中，輸入部署的描述。

1. 選擇 **Create deployment (建立部署)**。

1.  在 **Deployment status (部署狀態)** 中，您可以監控部署。在 100% 的生產流量路由到替代任務集之後，並在五分鐘等待時間到期之前，您可以選擇**終止原始任務集**，以立即終止原始任務集。如果您不選擇 **Terminate original task set (終止原始任務集)**，原始任務集會在您指定的五分鐘等待時間到期之後終止。  
![\[CodeDeploy 主控台的部署狀態區段。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/ecs-tutorial-deployment-status-without-test-listener.png)

# 步驟 4：清理
<a name="tutorial-ecs-clean-up"></a>

 下一個教學課程 以本教學課程為基礎[教學課程：使用驗證測試部署 Amazon ECS 服務](tutorial-ecs-deployment-with-hooks.md)，並使用您建立的 CodeDeploy 應用程式和部署群組。如果您想要遵循該教學課程中的步驟，請略過此步驟，並且不要刪除您建立的資源。

**注意**  
 AWS 您的帳戶不會對您建立的 CodeDeploy 資源產生費用。

這些步驟中的資源名稱是本教學課程中建議的名稱 （例如，**ecs-demo-codedeploy-app**適用於 CodeDeploy 應用程式的名稱）。如果您使用不同的名稱，請務必在清理期間使用這些名稱。

1. 使用 [delete-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html) 命令來刪除 CodeDeploy 部署群組。

   ```
   aws deploy delete-deployment-group --application-name ecs-demo-codedeploy-app --deployment-group-name ecs-demo-dg --region aws-region-id
   ```

1. 使用 [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) 命令來刪除 CodeDeploy 應用程式。

   ```
   aws deploy delete-application --application-name ecs-demo-codedeploy-app --region aws-region-id
   ```