本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以在 中設定管道 AWS CodePipeline ,以使用藍/綠部署來部署容器應用程式。在藍/綠部署中,您可以啟動應用程式的新版本與舊版本,並在重新路由流量到新版本之前進行測試。您也可以監控部署程序,並在發生問題時快速轉返。
已完成的管道會偵測映像或任務定義檔案的變更,並使用 CodeDeploy 將流量路由和部署至 Amazon ECS 叢集和負載平衡器。CodeDeploy 會在您的負載平衡器上建立新的接聽程式,該接聽程式可以透過特殊連接埠將新任務設為目標。您也可以將管道設定為使用來源位置,例如 CodeCommit 儲存庫,其中存放您的 Amazon ECS 任務定義。
建立管道之前,您必須已建立 Amazon ECS 資源、CodeDeploy 資源,以及負載平衡器和目標群組。您必須已標記映像並將其儲存在映像儲存庫中,並將任務定義和 AppSpec 檔案上傳到您的檔案儲存庫。
注意
本主題說明 CodePipeline 的 Amazon ECS 至 CodeDeploy 藍/綠部署動作。如需 CodePipeline 中 Amazon ECS 標準部署動作的參考資訊,請參閱 Amazon Elastic Container Service 部署動作參考。
動作類型
-
類別:
Deploy
-
擁有者:
AWS
-
提供者:
CodeDeployToECS
-
版本:
1
組態參數
- ApplicationName
-
必要:是
CodeDeploy 中的應用程式名稱。建立管道之前,您必須先在 CodeDeploy 中建立應用程式。
- DeploymentGroupName
-
必要:是
針對您為 CodeDeploy 應用程式建立的 Amazon ECS 任務集指定的部署群組。建立管道之前,您必須已在 CodeDeploy 中建立部署群組。
- TaskDefinitionTemplateArtifact
-
必要:是
將任務定義檔案提供給部署動作的輸入成品名稱。這通常是來源動作的輸出成品名稱。當您使用 主控台時,來源動作輸出成品的預設名稱為
SourceArtifact
。 - AppSpecTemplateArtifact
-
必要:是
將 AppSpec 檔案提供給部署動作的輸入成品名稱。當您的管道執行時,此值即會更新。這通常是來源動作的輸出成品名稱。當您使用 主控台時,來源動作輸出成品的預設名稱為
SourceArtifact
。在TaskDefinition
AppSpec 檔案中,您可以保留<TASK_DEFINITION>
預留位置文字,如下所示步驟 2:建立任務定義和 AppSpec 來源檔案,並推送至 CodeCommit 儲存庫。 - AppSpecTemplatePath
-
必要:否
存放在管道來源檔案位置的 AppSpec 檔案的檔案名稱,例如管道的 CodeCommit 儲存庫。預設檔案名稱為
appspec.yaml
。如果您的 AppSpec 檔案具有相同的名稱,且存放在檔案儲存庫的根層級,則不需要提供檔案名稱。如果路徑不是預設值,請輸入路徑和檔案名稱。 - TaskDefinitionTemplatePath
-
必要:否
存放在管道檔案來源位置的任務定義檔案名稱,例如管道的 CodeCommit 儲存庫。預設檔案名稱為
taskdef.json
。如果您的任務定義檔案具有相同的名稱,且存放在檔案儲存庫的根層級,則不需要提供檔案名稱。如果路徑不是預設值,請輸入路徑和檔案名稱。 - Image<Number>ArtifactName
-
必要:否
提供映像給部署動作的輸入成品名稱。這通常是影像儲存庫的輸出成品,例如來自 Amazon ECR 來源動作的輸出。
的可用值
<Number>
為 1 到 4。 - Image<Number>ContainerName
-
必要:否
可從映像儲存庫取得的映像名稱,例如 Amazon ECR 來源儲存庫。
的可用值
<Number>
為 1 到 4。
Input artifacts (輸入成品)
-
成品數量:
1 to 5
-
描述:
CodeDeployToECS
動作會先在來源檔案儲存庫中尋找任務定義檔案和 AppSpec 檔案,接著在映像儲存庫中尋找映像,然後動態產生任務定義的新修訂版,最後執行 AppSpec 命令,將任務集和容器部署到叢集。CodeDeployToECS
動作會尋找將映像 URI 映射至映像imageDetail.json
的檔案。當您將變更遞交至 Amazon ECR 映像儲存庫時,管道 ECR 來源動作會為該遞交建立imageDetail.json
檔案。您也可以手動為未自動化動作的管道新增imageDetail.json
檔案。如需imageDetail.json
詳細資訊,請參閱 Amazon ECS 藍/綠部署動作的 imageDetail.json 檔案。CodeDeployToECS
動作會動態產生任務定義的新修訂。在此階段中,此動作會將任務定義檔案中的預留位置取代為從 imageDetail.json 檔案擷取的影像 URI。例如,如果您將 IMAGE1_NAME 設定為 Image1ContainerName 參數,則應在任務定義檔案中將預留位置 <IMAGE1_NAME> 指定為影像欄位的值。在此情況下,CodeDeployToECS 動作會將預留位置 <IMAGE1_NAME> 取代為您指定為 Image1ArtifactName 的成品中從 imageDetail.json 擷取的實際影像 URI。對於任務定義更新,CodeDeploy
AppSpec.yaml
檔案包含TaskDefinition
屬性。TaskDefinition: <TASK_DEFINITION>
建立新任務定義後,
CodeDeployToECS
動作會更新此屬性。對於
TaskDefinition
欄位的值,預留位置文字必須是 <TASK_DEFINITION>。CodeDeployToECS
動作會將此預留位置取代為動態產生的任務定義的實際 ARN。
輸出成品
-
成品數量:
0
-
描述:輸出成品不適用於此動作類型。
動作宣告
Name: Deploy
Actions:
- Name: Deploy
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CodeDeployToECS
Version: '1'
RunOrder: 1
Configuration:
AppSpecTemplateArtifact: SourceArtifact
ApplicationName: ecs-cd-application
DeploymentGroupName: ecs-deployment-group
Image1ArtifactName: MyImage
Image1ContainerName: IMAGE1_NAME
TaskDefinitionTemplatePath: taskdef.json
AppSpecTemplatePath: appspec.yaml
TaskDefinitionTemplateArtifact: SourceArtifact
OutputArtifacts: []
InputArtifacts:
- Name: SourceArtifact
- Name: MyImage
Region: us-west-2
Namespace: DeployVariables
另請參閱
以下相關資源可協助您使用此動作。
-
教學課程:使用 Amazon ECR 來源和 ECS-to-CodeDeploy 部署建立管道 – 本教學課程會逐步引導您建立藍/綠部署所需的 CodeDeploy 和 Amazon ECS 資源。本教學課程說明如何將 Docker 映像推送至 Amazon ECR,並建立 Amazon ECS 任務定義,其中列出您的 Docker 映像名稱、容器名稱、Amazon ECS 服務名稱和負載平衡器組態。此教學課程接著會逐步引導您建立部署的 AppSpec 檔案和管道。
注意
本主題和教學課程說明 CodePipeline 的 CodeDeploy/ECS 藍色/綠色動作。如需 CodePipeline 中 ECS 標準動作的相關資訊,請參閱教學課程:使用 CodePipeline 持續部署。
-
AWS CodeDeploy 使用者指南 – 如需如何在藍/綠部署中使用負載平衡器、生產接聽程式、目標群組和 Amazon ECS 應用程式的相關資訊,請參閱教學課程:部署 Amazon ECS 服務。AWS CodeDeploy 使用者指南中的此參考資訊提供使用 Amazon ECS 和 進行藍/綠部署的概觀 AWS CodeDeploy。
-
Amazon Elastic Container Service 開發人員指南 – 如需有關使用 Docker 映像和容器、ECS 服務和叢集以及 ECS 任務集的資訊,請參閱什麼是 Amazon ECS?