在 Amazon ECS 運算平台上部署 - AWS CodeDeploy

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

在 Amazon ECS 運算平台上部署

本主題提供使用 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 彈性容器服務使用者指南中的 Amazon ECS 叢集

Amazon ECS 服務

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

Application Load Balancer 或 Network Load Balancer

您必須將 Elastic Load Balancing 與您想要透過 Amazon ECS 部署更新的 Amazon ECS 服務搭配使用。您可以使用應用程式負載平衡器或 Network Load Balancer。我們建議您使 Application Load Balancer,以利用動態連接埠對應、路徑型路由和優先順序規則等功能。您可以在建立 CodeDeploy 應用程式的部署群組時指定負載平衡器。如需詳細資訊,請參閱 Amazon 彈性容器服務使用者指南中的為 CodeDeploy Amazon ECS 部署設定負載平衡器、目標群組和接聽程式建立負載平衡

一個或兩個聽眾

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

兩個 Amazon ECS 目標群體

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

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

Amazon ECS 任務定義

若要執行包含 Amazon ECS 應用程式的 Docker 容器,則需要任務定義。您可以在 CodeDeploy 應用程式的 AppSpec 檔案中指定工作定義的 ARN。如需詳細資訊,請參閱 Amazon 彈性容器服務使用者指南中的 Amazon ECS 任務定義 AppSpec Amazon ECS 部署的「資源」部分

適用於您的 Amazon ECS 應用程式的容器

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

取代任務集的連接埠

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

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 或開發套件指定。該 AppSpec 檔案指定部署的 Amazon ECS 任務定義、用於路由流量的容器名稱和連接埠對應,以及 Lambda 函數在部署生命週期掛鉤後執行。容器名稱必須是 Amazon ECS 任務定義中的容器。如需詳細資訊,請參閱 使用的應用程式修訂 CodeDeploy

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

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

Amazon ECS 部署期間會發生什麼情況

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

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

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

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

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

注意

鉤子中的 Lambda 函數是可選的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    所有事件都成功。

上傳應用程式修訂

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

建立應用程式和部署群組

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

部署應用程式修訂

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

更新您的申請

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

已停止和失敗的部署

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

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

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

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

重新部署和部署復原

CodeDeploy 透過將取代工作集的流量重新路由傳送至原始工作集,以實作復原。

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

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

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

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

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

Amazon ECS 藍色/綠色部署 AWS CloudFormation

您可以透過管 AWS CloudFormation 理 Amazon ECS 藍色/綠色部署。 CodeDeploy如需詳細資訊,請參閱 透過以下方式建立亞馬遜ECS 藍色/綠色部署 AWS CloudFormation

注意

亞太區域 (大阪) 地區不 AWS CloudFormation 提供管理 Amazon ECS 藍/綠部署。