Amazon ECS Compute Platform 上的部署 - AWS CodeDeploy

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

Amazon ECS Compute Platform 上的部署

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

開始 Amazon ECS 部署之前

在開始 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叢集

Amazon ECS服務

Amazon ECS服務會在 Amazon ECS叢集中維護和執行任務定義的指定執行個體。必須啟用 的 Amazon ECS服務 CodeDeploy。根據預設,Amazon ECS服務會針對 Amazon ECS 部署啟用。當您建立部署群組時,您可以選擇部署 Amazon ECS叢集中的 Amazon ECS服務。如需詳細資訊,請參閱 Amazon Elastic Container ECS Service 使用者指南 中的 Amazon 服務。

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 部署設定負載平衡器、目標群組和接聽程式建立負載平衡器

一或兩個接聽程式

接聽程式供負載平衡器用來將流量導向到您的目標群組。一個生產接聽程式為必要項目。您可以指定選用的第二個測試接聽程式,負責在您執行驗證測試時引導流量到您的替換任務。當您建立部署群組時,您指定一或兩個接聽程式。如果您使用 Amazon ECS主控台來建立 Amazon ECS服務,則會為您建立接聽程式。如需詳細資訊,請參閱 Elastic Load Balancing 使用者指南中的應用程式負載平衡器接聽程式,以及 Amazon Elastic Container Service 使用者指南中的建立服務

兩個 Amazon ECS目標群組

目標群組是用於將流量路由到已註冊的目標。Amazon ECS 部署需要兩個目標群組:一個用於 Amazon ECS 應用程式的原始任務集,另一個用於其替換任務集。在部署期間, 會 CodeDeploy 建立替代任務集,並將流量從原始任務集重新路由至新的任務集。您可以在建立 CodeDeploy 應用程式部署群組時指定目標群組。

在部署期間, CodeDeploy 決定哪個目標群組與 Amazon ECS服務中具有 狀態 PRIMARY(這是原始任務集) 的任務集相關聯,並將一個目標群組與其相關聯,然後將另一個目標群組與替代任務集相關聯。如果您進行其他部署,與目前部署之原始任務集相關聯的目標群組會與下一個部署的替換任務集建立關聯。如需詳細資訊,請參閱 Elastic Load Balancing 使用者指南中的應用程式負載平衡器的目標群組

Amazon ECS任務定義

執行包含 Amazon ECS應用程式的 Docker 容器需要任務定義。您可以在 CodeDeploy 應用程式 AppSpec 檔案中指定ARN任務定義的 。如需詳細資訊,請參閱 Amazon Elastic Container Service 使用者指南 和 中的 Amazon ECS任務定義 AppSpec Amazon ECS 部署的 'resources' 區段

Amazon ECS應用程式的容器

Docker 容器是一個軟體單位,將程式碼和其相依性封裝,讓您的應用程式能夠執行。容器會隔離您的應用程式,讓其在不同的運算環境中執行。您的負載平衡器會將流量導向 Amazon ECS 應用程式任務集中的容器。您可以在 CodeDeploy 應用程式的 AppSpec 檔案中指定容器的名稱。 AppSpec 檔案中指定的容器必須是 Amazon ECS任務定義中指定的容器之一。如需詳細資訊,請參閱 Amazon Elastic Container Service 使用者指南 和 中的什麼是 Amazon Elastic Container Service AppSpec Amazon ECS 部署的 'resources' 區段

取代任務集的連接埠

在 Amazon ECS 部署期間,負載平衡器會將流量導向應用程式 AppSpec 檔案中指定 CodeDeploy容器上的此連接埠。您可以在 CodeDeploy 應用程式的 AppSpec 檔案中指定連接埠。如需詳細資訊,請參閱 AppSpec Amazon ECS 部署的 'resources' 區段

在 Amazon ECS運算平台上部署工作流程 (高階)

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

如何 CodeDeploy 將應用程式部署為 Amazon 的任務集ECS。

這些步驟包括:

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

  2. 指定下列項目來設定部署群組:

    • 部署群組名稱。

    • 您的 Amazon ECS叢集和服務名稱。Amazon ECS服務的部署控制器必須設定為 CodeDeploy。

    • 生產接聽程式、選用的測試接聽程式和部署期間使用的目標群組。

    • 部署設定,例如何時將生產流量重新路由至 Amazon ECS服務中的替代 Amazon ECS任務集,以及何時終止 Amazon ECS服務中的原始 Amazon ECS任務集。

    • 選用設定,例如觸發條件、警示和轉返行為。

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

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

  5. 檢查部署結果。如需詳細資訊,請參閱監控部署 CodeDeploy

Amazon ECS 部署期間會發生什麼

使用測試接聽程式啟動 Amazon ECS 部署之前,您必須設定其元件。如需詳細資訊,請參閱開始 Amazon ECS 部署之前

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

當 Amazon ECS 部署準備好啟動時,負載平衡器、接聽程式、目標群組和任務集之間的關係。

部署開始,部署生命週期事件開始逐一執行。有些生命週期事件是僅執行 AppSpec 檔案中指定 Lambda 函數的掛鉤。下表中的部署生命週期事件依其執行順序列出。如需詳細資訊,請參閱AppSpec Amazon ECS 部署的 'hooks' 區段

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

注意

鉤中的 Lambda 函數是選用的。

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

  2. Install 生命週期事件期間:

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

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

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

    下圖顯示具有新替代任務集的部署元件。容器化應用程式在此任務集中。任務集包含三個任務。(應用程式可以有任何數量的任務。) 第二個目標群組現在與替換任務集相關聯。

    具有新替換任務集的部署元件。容器化應用程式在此任務集中。任務集包含三個任務。第二個目標群組現在與替換任務集相關聯。
  3. 執行 AppSpec 檔案中AfterInstall掛鉤中指定的任何 Lambda 函數。

  4. 已叫用 AllowTestTraffic 事件。在這個生命週期事件期間,測試接聽程式將流量路由到更新的容器化應用程式。

    測試接聽程式會將流量路由至更新的容器化應用程式。
  5. 執行 AppSpec 檔案中AfterAllowTestTraffic掛鉤中指定的任何 Lambda 函數。Lambda 函數可以使用測試流量驗證部署。例如,Lambda 函數可以為測試接聽程式提供流量,以及追蹤來自替代任務集的指標。如果已設定回復,您可以設定警示,當 Lambda 函數中的驗證測試失敗時,該 CloudWatch 警示會觸發回復。

    驗證測試完成後,會發生以下其中一種情況:

    • 如果驗證失敗而轉返已設定,則會將部署狀態標示為 Failed,且元件在部署開始時恢復到他們的狀態。

    • 如果驗證失敗而轉返未設定,則會將部署狀態標示為 Failed,且元件會維持他們的目前狀態。

    • 如果驗證成功,部署會繼續至 BeforeAllowTraffic 勾點 。

    如需詳細資訊,請參閱使用 CloudWatch 警示監控部署 CodeDeploy自動回復設定部署群組的進階選項

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

  7. 已叫用 AllowTraffic 事件。系統會將生產流量從原始任務集重新路由到替換任務集。下圖顯示接收生產流量的替換任務集。

    替換任務集會接收生產流量。
  8. 執行 AppSpec 檔案中AfterAllowTraffic掛鉤中指定的任何 Lambda 函數。

  9. 所有事件成功後,部署狀態設定為 Succeeded,而原始任務集則會移除。

    所有事件都成功。

上傳您的應用程式修訂版

在 Amazon S3 中放置 AppSpec 檔案,或將其直接輸入主控台或 AWS CLI。如需詳細資訊,請參閱Application Specification Files

建立應用程式和部署群組

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

部署應用程式修訂版

現在,您已準備好部署部署群組中指定的更新 Amazon ECS服務。您可以使用 CodeDeploy 主控台或 create-deployment 命令。您可以指定參數來控制部署,包含修訂和部署群組。

更新您的應用程式

您可以更新應用程式,然後使用 CodeDeploy 主控台或呼叫 create-deployment 命令來推送修訂。

已停止和失敗的部署

您可以使用 CodeDeploy 主控台或停止部署命令來停止部署。當您嘗試停止部署時,會發生下列三者之一:

  • 部署停止,而且操作傳回成功狀態。在此情況下,不需要在已停止部署的部署群組上執行其他部署生命週期事件。

  • 此部署不會立即停止,而且操作傳回擱置中狀態。在此情況下,一些部署生命週期事件可能仍然在部署群組上執行。擱置中操作完成之後,後續呼叫停止部署會傳回成功狀態。

  • 部署無法停止,而且操作傳回錯誤。如需詳細資訊,請參閱 參考中的 AWS CodeDeploy API錯誤資訊和常見錯誤

重新部署和部署復原

CodeDeploy 透過將流量從替代任務集重新路由至原始任務集,實作復原。

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

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

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

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

如需詳細資訊,請參閱使用以下方式重新部署和復原部署 CodeDeploy

透過 的 Amazon ECS 藍/綠部署 AWS CloudFormation

您可以使用 透過 AWS CloudFormation 管理 Amazon ECS 藍/綠部署 CodeDeploy。如需詳細資訊,請參閱透過 建立 Amazon ECS藍/綠部署 AWS CloudFormation

注意

使用 管理 Amazon ECS藍/綠部署 AWS CloudFormation 不適用於亞太區域 (大阪) 區域。