

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

# Amazon ECS 運算平台上的部署
<a name="deployment-steps-ecs"></a>

本主題提供使用 Amazon ECS 運算平台之 CodeDeploy 部署元件和工作流程的相關資訊。

**Topics**
+ [開始 Amazon ECS 部署之前](#deployment-steps-prerequisites-ecs)
+ [Amazon ECS 運算平台上的部署工作流程 （高階）](#deployment-process-workflow-ecs)
+ [Amazon ECS 部署期間會發生什麼情況](#deployment-steps-what-happens)
+ [上傳您的應用程式修訂版](#deployment-steps-uploading-your-app-ecs)
+ [建立您的應用程式和部署群組](#deployment-steps-registering-app-deployment-groups-ecs)
+ [部署您的應用程式修訂版](#deployment-steps-deploy-ecs)
+ [更新您的應用程式](#deployment-steps-updating-your-app-ecs)
+ [已停止和失敗的部署](#deployment-stop-fail-ecs)
+ [重新部署和部署轉返](#deployment-rollback-ecs)
+ [透過 的 Amazon ECS 藍/綠部署 AWS CloudFormation](#deployment-steps-ecs-cf)

## 開始 Amazon ECS 部署之前
<a name="deployment-steps-prerequisites-ecs"></a>

 在開始 Amazon ECS 應用程式部署之前，您必須備妥下列項目。當您建立部署群組時，會指定一些需求，而 AppSpec 檔案中會指定一些需求。


****  

| 需求 | 指定位置 | 
| --- | --- | 
| Amazon ECS 叢集 | 部署群組 | 
| Amazon ECS 服務 | 部署群組 | 
| Application Load Balancer 或 Network Load Balancer | 部署群組 | 
| 生產接聽程式 | 部署群組 | 
| 測試接聽程式 (選用) | 部署群組 | 
| 兩個目標群組 | 部署群組 | 
| Amazon ECS 任務定義 | AppSpec 檔案 | 
| 容器名稱 | AppSpec 檔案 | 
| 容器連接埠 | AppSpec 檔案 | 

**Amazon ECS 叢集**  
Amazon ECS *叢集*是任務或服務的邏輯分組。您可以在建立 CodeDeploy 應用程式部署群組時，指定包含 Amazon ECS 服務的 Amazon ECS 叢集。如需詳細資訊，請參閱《[Amazon Elastic Container Service 使用者指南》中的 Amazon ECS 叢集](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_clusters.html)。 **

**Amazon ECS 服務**  
Amazon ECS *服務*會在 Amazon ECS 叢集中維護和執行任務定義的指定執行個體。必須啟用 CodeDeploy 的 Amazon ECS 服務。根據預設，Amazon ECS 部署會啟用 Amazon ECS 服務。建立部署群組時，您可以選擇部署 Amazon ECS 叢集中的 Amazon ECS 服務。如需詳細資訊，請參閱《[Amazon Elastic Container Service 使用者指南》中的 Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html) *服務*。

**Application Load Balancer 或 Network Load Balancer**  
 您必須將 Elastic Load Balancing 與要透過 Amazon ECS 部署更新的 Amazon ECS 服務搭配使用。您可以使用 Application Load Balancer 或 Network Load Balancer。我們建議您使用 Application Load Balancer，以便充分利用動態連接埠映射、路徑型路由和優先順序規則等功能。您可以在建立 CodeDeploy 應用程式部署群組時指定負載平衡器。如需詳細資訊，請參閱《*Amazon Elastic Container Service 使用者指南*》中的[設定 CodeDeploy Amazon ECS 部署的負載平衡器、目標群組和接聽程式](deployment-groups-create-load-balancer-for-ecs.md)和[建立負載平衡器](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-load-balancer.html)。

**一或兩個接聽程式**  
*接聽程式*供負載平衡器用來將流量導向到您的目標群組。一個生產接聽程式為必要項目。您可以指定選用的第二個測試接聽程式，負責在您執行驗證測試時引導流量到您的替換任務。當您建立部署群組時，您指定一或兩個接聽程式。如果您使用 Amazon ECS 主控台來建立 Amazon ECS 服務，則會為您建立接聽程式。如需詳細資訊，請參閱 *Elastic Load Balancing 使用者指南*中的[應用程式負載平衡器接聽程式](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listener.html)，以及《*Amazon Elastic Container Service 使用者指南*》中的[建立服務](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service.html)。

**兩個 Amazon ECS 目標群組**  
 *目標群組*是用於將流量路由到已註冊的目標。Amazon ECS 部署需要兩個目標群組：一個用於 Amazon ECS 應用程式的原始任務集，另一個用於其替換任務集。在部署期間，CodeDeploy 會建立替代任務集，並將流量從原始任務集重新路由至新的任務集。您可以在建立 CodeDeploy 應用程式部署群組時指定目標群組。  
 在部署期間，CodeDeploy 會判斷哪個目標群組與 Amazon ECS 服務中具有 狀態 `PRIMARY`（這是原始任務集） 的任務集相關聯，並將一個目標群組與其建立關聯，然後將另一個目標群組與替換任務集建立關聯。如果您進行其他部署，與目前部署之原始任務集相關聯的目標群組會與下一個部署的替換任務集建立關聯。如需詳細資訊，請參閱 *Elastic Load Balancing 使用者指南*中的[應用程式負載平衡器的目標群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html)。

**Amazon ECS 任務定義**  
 執行包含 Amazon ECS 應用程式的 Docker 容器時，需要*任務定義*。您可以在 CodeDeploy 應用程式 AppSpec 檔案中指定任務定義的 ARN。如需詳細資訊，請參閱《[Amazon Elastic Container Service 使用者指南》中的 Amazon ECS 任務定義](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)和 [Amazon ECS 部署的 AppSpec 'resources' 區段](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)。 **

**Amazon ECS 應用程式的容器**  
 Docker 容器**是一個軟體單位，將程式碼和其相依性封裝，讓您的應用程式能夠執行。容器會隔離您的應用程式，讓其在不同的運算環境中執行。您的負載平衡器會將流量導向 Amazon ECS 應用程式任務集中的容器。您可以在 CodeDeploy 應用程式的 AppSpec 檔案中指定容器的名稱。AppSpec 檔案中指定的容器必須是 Amazon ECS 任務定義中指定的其中一個容器。如需詳細資訊，請參閱《[Amazon Elastic Container Service 使用者指南》和》中的什麼是](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) *Amazon Elastic Container Service*？[Amazon ECS 部署的 AppSpec 'resources' 區段](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)。

**取代任務集的連接埠**  
 在 Amazon ECS 部署期間，您的負載平衡器會將流量導向 CodeDeploy 應用程式 AppSpec 檔案中指定容器上的此*連接埠*。您可以在 CodeDeploy 應用程式的 AppSpec 檔案中指定連接埠。如需詳細資訊，請參閱[Amazon ECS 部署的 AppSpec 'resources' 區段](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)。

## Amazon ECS 運算平台上的部署工作流程 （高階）
<a name="deployment-process-workflow-ecs"></a>

下圖顯示部署更新 Amazon ECS 服務的主要步驟。

![\[CodeDeploy 如何將應用程式部署為 Amazon ECS 中的任務集。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/deployment-process-ecs.png)


這些步驟包括：

1. 透過指定可唯一代表您要部署之內容的名稱來建立 AWS CodeDeploy 應用程式。若要部署 Amazon ECS 應用程式，請在 AWS CodeDeploy 應用程式中選擇 Amazon ECS 運算平台。CodeDeploy 在部署期間使用 應用程式來參考正確的部署元件，例如部署群組、目標群組、接聽程式和流量重新路由行為，以及應用程式修訂。如需詳細資訊，請參閱[使用 CodeDeploy 建立應用程式](applications-create.md)。

1. 指定下列項目來設定部署群組：
   +  部署群組名稱。
   +  您的 Amazon ECS 叢集和服務名稱。Amazon ECS 服務的部署控制器必須設定為 CodeDeploy。
   +  生產接聽程式、選用的測試接聽程式和部署期間使用的目標群組。
   +  部署設定，例如何時將生產流量重新路由至 Amazon ECS 服務中的替代 Amazon ECS 任務集，以及何時終止 Amazon ECS 服務中的原始 Amazon ECS 任務集。
   +  選用設定，例如觸發條件、警示和轉返行為。

1. 指定*應用程式規格檔案* (AppSpec 檔案）。您可以將其上傳到 Amazon S3，以 YAML 或 JSON 格式在主控台中輸入，或使用 AWS CLI 或 SDK 指定它。AppSpec 檔案會指定部署的 Amazon ECS 任務定義、用於路由流量的容器名稱和連接埠映射，以及部署生命週期掛鉤後執行的 Lambda 函數。容器名稱必須是 Amazon ECS 任務定義中的容器。如需詳細資訊，請參閱[使用 CodeDeploy 的應用程式修訂](application-revisions.md)。

1. 將應用程式 revision. AWS CodeDeploy reroutes 流量從 Amazon ECS 服務中任務集的原始版本部署到新的替代任務集。部署群組中指定的目標群組是用於為原始和替換任務集提供流量。部署完成後，原始任務集會終止。您可以指定選用的測試接聽程式，在將流量重新路由到替換版本之前，為您的替換版本提供測試流量。如需詳細資訊，請參閱[使用 CodeDeploy 建立部署](deployments-create.md)。

1. 檢查部署結果。如需詳細資訊，請參閱[監控 CodeDeploy 中的部署](monitoring.md)。

## Amazon ECS 部署期間會發生什麼情況
<a name="deployment-steps-what-happens"></a>

在使用測試接聽程式的 Amazon ECS 部署開始之前，您必須設定其元件。如需詳細資訊，請參閱[開始 Amazon ECS 部署之前](#deployment-steps-prerequisites-ecs)。

 下圖顯示當 Amazon ECS 部署準備好啟動時，這些元件之間的關係。

![\[當 Amazon ECS 部署準備好啟動時，負載平衡器、接聽程式、目標群組和任務集之間的關係。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-1.png)


部署開始，部署生命週期事件開始逐一執行。有些生命週期事件是只會執行 AppSpec 檔案中指定之 Lambda 函數的勾點。下表中的部署生命週期事件依其執行順序列出。如需詳細資訊，請參閱[Amazon ECS 部署的 AppSpec 'hooks' 區段](reference-appspec-file-structure-hooks.md#appspec-hooks-ecs)。


| 生命週期事件 | 生命週期事件動作 | 
| --- | --- | 
| BeforeInstall (Lambda 函數的勾點） | 執行 Lambda 函數。 | 
| 安裝 | 設定替換任務集。 | 
| AfterInstall (Lambda 函數的勾點） | 執行 Lambda 函數。 | 
| AllowTestTraffic | 將流量從測試接聽程式路由到目標群組 2。 | 
| AfterAllowTestTraffic (Lambda 函數的勾點） | 執行 Lambda 函數。 | 
| BeforeAllowTraffic (Lambda 函數的勾點） | 執行 Lambda 函數。 | 
| AllowTraffic | 將流量從生產接聽程式路由到目標群組 2。 | 
| AfterAllowTraffic | 執行 Lambda 函數。 | 



**注意**  
勾點中的 Lambda 函數是選用的。

1. <a name="ecs-before-install"></a>

****

   執行 AppSpec 檔案中`BeforeInstall`掛鉤中指定的任何 Lambda 函數。

1. <a name="ecs-install"></a>

****

   在`Install` 生命週期事件期間：

   1.  替代任務集會在您的 Amazon ECS 服務中建立。

   1.  更新的容器化應用程式會安裝到替換任務集。

   1.  第二個目標群組與替換任務集相關聯。

    下圖顯示具有新替代任務集的部署元件。容器化應用程式在此任務集中。任務集包含三個任務。(應用程式可以有任何數量的任務。) 第二個目標群組現在與替換任務集相關聯。  
![\[具有新替換任務集的部署元件。容器化應用程式在此任務集中。任務集包含三個任務。第二個目標群組現在與替換任務集相關聯。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-2.png)

1. <a name="ecs-after-install"></a>

****

   執行 AppSpec 檔案中`AfterInstall`掛鉤中指定的任何 Lambda 函數。

1. <a name="ecs-allow-test-traffic"></a>

****

   已叫用 `AllowTestTraffic` 事件。在這個生命週期事件期間，測試接聽程式將流量路由到更新的容器化應用程式。  
![\[測試接聽程式會將流量路由到更新的容器化應用程式。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-3.png)

1. <a name="ecs-after-allow-test-traffic"></a>

****

   執行 AppSpec 檔案中`AfterAllowTestTraffic`掛鉤中指定的任何 Lambda 函數。Lambda 函數可以使用測試流量驗證部署。例如，Lambda 函數可以為測試接聽程式提供流量，以及追蹤來自替代任務集的指標。如果已設定轉返，您可以設定 CloudWatch 警示，在 Lambda 函數中的驗證測試失敗時觸發轉返。

    驗證測試完成後，會發生以下其中一種情況：
   +  如果驗證失敗而轉返已設定，則會將部署狀態標示為 `Failed`，且元件在部署開始時恢復到他們的狀態。
   +  如果驗證失敗而轉返未設定，則會將部署狀態標示為 `Failed`，且元件會維持他們的目前狀態。
   +  如果驗證成功，部署會繼續至 `BeforeAllowTraffic` 勾點 。

    如需詳細資訊，請參閱[在 CodeDeploy 中使用 CloudWatch 警示監控部署](monitoring-create-alarms.md)、[自動轉返](deployments-rollback-and-redeploy.md#deployments-rollback-and-redeploy-automatic-rollbacks)及[設定部署群組的進階選項](deployment-groups-configure-advanced-options.md)。

1. <a name="ecs-before-allow-traffic"></a>

****

   執行 AppSpec 檔案中`BeforeAllowTraffic`掛鉤中指定的任何 Lambda 函數。

1. <a name="ecs-allow-traffic"></a>

****

   已叫用 `AllowTraffic` 事件。系統會將生產流量從原始任務集重新路由到替換任務集。下圖顯示接收生產流量的替換任務集。  
![\[替換任務集會接收生產流量。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-4.png)

1. <a name="ecs-after-allow-traffic"></a>

****

   執行 AppSpec 檔案中`AfterAllowTraffic`掛鉤中指定的任何 Lambda 函數。

1. 

****

   所有事件成功後，部署狀態設定為 `Succeeded`，而原始任務集則會移除。  
![\[所有事件都成功。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-6.png)

## 上傳您的應用程式修訂版
<a name="deployment-steps-uploading-your-app-ecs"></a>

將 AppSpec 檔案放在 Amazon S3 中，或直接輸入至主控台或 AWS CLI。如需詳細資訊，請參閱[CodeDeploy 應用程式規格 (AppSpec) 檔案](application-specification-files.md)。

## 建立您的應用程式和部署群組
<a name="deployment-steps-registering-app-deployment-groups-ecs"></a>

Amazon ECS 運算平台上的 CodeDeploy 部署群組會識別接聽程式，為更新的 Amazon ECS 應用程式和部署期間使用的兩個目標群組提供流量。部署群組也會定義一組組態選項，例如警示和轉返組態。

## 部署您的應用程式修訂版
<a name="deployment-steps-deploy-ecs"></a>

現在您已準備好部署部署群組中指定的更新 Amazon ECS 服務。您可以使用 CodeDeploy 主控台或 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令。您可以指定參數來控制部署，包含修訂和部署群組。

## 更新您的應用程式
<a name="deployment-steps-updating-your-app-ecs"></a>

您可以更新應用程式，然後使用 CodeDeploy 主控台或呼叫 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令來推送修訂。

## 已停止和失敗的部署
<a name="deployment-stop-fail-ecs"></a>

您可以使用 CodeDeploy 主控台或 [stop-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/stop-deployment.html) 命令來停止部署。當您嘗試停止部署時，會發生下列三者之一：
+ 部署停止，而且操作傳回成功狀態。在此情況下，不需要在已停止部署的部署群組上執行其他部署生命週期事件。
+ 此部署不會立即停止，而且操作傳回擱置中狀態。在此情況下，一些部署生命週期事件可能仍然在部署群組上執行。擱置中操作完成之後，後續呼叫停止部署會傳回成功狀態。
+ 部署無法停止，而且操作傳回錯誤。如需詳細資訊，請參閱 AWS CodeDeploy API 參考中的[錯誤資訊和](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_ErrorInformation.html)[常見錯誤](https://docs.aws.amazon.com/codedeploy/latest/APIReference/CommonErrors.html)。

## 重新部署和部署轉返
<a name="deployment-rollback-ecs"></a>

CodeDeploy 透過將流量從替代任務集重新路由到原始任務集來實作轉返。

您可以設定部署群組以在符合特定條件時自動轉返部署 (包含部署失敗或符合警示監控閾值時)。您也可以覆寫針對個別部署中部署群組所指定的轉返設定。

您也可以手動重新部署先前部署的修訂，以選擇轉返失敗部署。

在所有情況下，新的或轉返的部署會獲指派其專屬部署 ID。CodeDeploy 主控台會顯示自動部署結果的部署清單。

如果您重新部署，與目前部署之原始任務集相關聯的目標群組會與重新部署的替換任務集建立關聯。

如需詳細資訊，請參閱[使用 CodeDeploy 重新部署以及復原部署](deployments-rollback-and-redeploy.md)。

## 透過 的 Amazon ECS 藍/綠部署 AWS CloudFormation
<a name="deployment-steps-ecs-cf"></a>

您可以使用 透過 CodeDeploy AWS CloudFormation 管理 Amazon ECS 藍/綠部署。如需詳細資訊，請參閱[透過 建立 Amazon ECS 藍/綠部署 CloudFormation](deployments-create-ecs-cfn.md)。

**注意**  
在亞太區域 （大阪） 區域 CloudFormation 無法使用 管理 Amazon ECS 藍/綠部署。