Amazon 弹性容器服务和 CodeDeploy 蓝绿色部署操作参考 - AWS CodePipeline

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon 弹性容器服务和 CodeDeploy 蓝绿色部署操作参考

您可以在中配置一个使用蓝/ AWS CodePipeline 绿部署部署容器应用程序的管道。在蓝绿部署中,您可以将应用程序新版本与旧版本一起启动,并在将流量重新路由到新版本之前对其进行测试。您还可以监控部署流程并且在存在问题的情况下迅速回滚。

已完成的管道会检测您的图像或任务定义文件的更改,并用于 CodeDeploy 将流量路由和部署到 Amazon ECS 集群和负载均衡器。 CodeDeploy 在您的负载均衡器上创建一个新的侦听器,该侦听器可以通过特殊端口定位您的新任务。您也可以将管道配置为使用存储您的 Amazon ECS 任务定义的源位置,例如存储 CodeCommit 库。

在创建管道之前,您必须已经创建了 Amazon ECS 资源、 CodeDeploy 资源以及负载均衡器和目标组。您必须已将图像标记并存储在图像存储库中,并将任务定义和 AppSpec 文件上传到文件存储库。

注意

本主题介绍了 Amazon ECS 的 CodeDeploy 蓝/绿部署操作。 CodePipeline有关中 Amazon ECS 标准部署操作的参考信息 CodePipeline,请参阅Amazon 弹性容器服务部署操作参考

操作类型

  • 类别:Deploy

  • 拥有者:AWS

  • 提供方:CodeDeployToECS

  • 版本:1

配置参数

ApplicationName

必需:是

中的应用程序名称 CodeDeploy。在创建管道之前,您必须已经在中创建了应用程序 CodeDeploy。

DeploymentGroupName

必需:是

为您为 CodeDeploy 应用程序创建的 Amazon ECS 任务集指定的部署组。在创建管道之前,您必须已经在中创建了部署组 CodeDeploy。

TaskDefinitionTemplateArtifact

必需:是

用于为部署操作提供任务定义文件的输入构件的名称。这通常为源操作的输出构件的名称。使用控制台时,源操作输出构件的默认名称为 SourceArtifact

AppSpecTemplateArtifact

必需:是

为部署操作提供 AppSpec 文件的输入对象的名称。此值会在管道运行时进行更新。这通常为源操作的输出构件的名称。使用控制台时,源操作输出构件的默认名称为 SourceArtifact。对于TaskDefinition在 AppSpec 文件中,您可以保留<TASK_DEFINITION>占位符文本,如下所

AppSpecTemplatePath

必需:否

存储在管道源 AppSpec 文件位置(例如您的管道存储 CodeCommit 库)中的文件的文件名。默认文件名为 appspec.yaml。如果您的 AppSpec 文件名相同,并且存储在文件存储库的根级别,则无需提供文件名。如果路径不是默认路径,请输入路径和文件名。

TaskDefinitionTemplatePath

必需:否

存储在管道文件源位置(例如您的管道存储 CodeCommit 库)中的任务定义的文件名。默认文件名为 taskdef.json。如果您的任务定义文件同名且存储在文件存储库的根级别,则无需提供文件名。如果路径不是默认路径,请输入路径和文件名。

图片 <Number>ArtifactName

必需:否

用于为部署操作提供映像的输入构件的名称。这通常是图像存储库的输出项目,例如 Amazon s ECR ource 操作的输出。

<Number> 的可用值为 1 到 4。

图片 <Number>ContainerName

必需:否

图像存储库(例如 Amazon ECR 源存储库)中可用图像的名称。

<Number> 的可用值为 1 到 4。

输入构件

  • 构件数:1 to 5

  • 描述:CodeDeployToECS操作首先在源文件存储库中查找任务定义文件和文件,然后在图像存储库中查找图像,然后动态生成任务定义的新修订版,最后运行 AppSpec 命令将任务集和容器部署到集群。 AppSpec

    CodeDeployToECS操作会查找将图像映射URI到图像的imageDetail.json文件。当您向 Amazon ECR 图像存储库提交更改时,管道ECR源操作会为该提交创建一个imageDetail.json文件。在未自动执行操作的情况下,您还可以为管道手动添加 imageDetail.json 文件。有关 imageDetail.json 文件的信息,请参阅imageDetail用于亚马逊ECS蓝/绿部署操作的.json 文件

    CodeDeployToECS 操作会动态生成任务定义的新修订版。在此阶段,此操作将任务定义文件中的占位符替换为从 imageDetail .json 文件URI检索到的图像。例如,如果您将 IMAGE1_ 设置NAME为 Image1 ContainerName 参数,则应将占位符 < IMAGE1 _ NAME > 指定为任务定义文件中图像字段的值。在这种情况下,该 CodeDeployToECS操作会将占位符 < IMAGE1 _ NAME > 替换为从您指定为 Image1 的工件中的 imageDetail .json 中URI检索到的实际图像。ArtifactName

    对于任务定义更新,该 CodeDeploy AppSpec.yaml文件包含TaskDefinition属性。

    TaskDefinition: <TASK_DEFINITION>

    创建新任务定义后,CodeDeployToECS 操作将会更新此属性。

    对于该TaskDefinition字段的值,占位符文本必须为 < TASK _ DEFINITION >。该CodeDeployToECS操作将此占位符替换为动态生成的任务定义ARN的实际占位符。

输出构件

  • 构件数:0

  • 描述:输出构件不适用于此操作类型。

操作声明

YAML
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
JSON
{ "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 映像推送到亚马逊ECR并创建列出您的 Docker 映像名称、容器名称、亚马逊ECS服务名称和负载均衡器配置的亚马逊ECS任务定义。然后,本教程将引导您完成为部署创建 AppSpec 文件和管道的过程。

    注意

    本主题和教程介绍了 CodeDeploy/ECSblue/green 的操作。 CodePipeline有关中ECS标准操作的信息 CodePipeline,请参阅教程:使用进行持续部署 CodePipeline

  • AWS CodeDeploy 用户指南 — 有关如何在蓝/绿部署中使用负载均衡器、生产侦听器、目标组和您的 Amazon ECS 应用程序的信息,请参阅教程:部署 Ama ECS zon 服务AWS CodeDeploy 用户指南中的此参考信息概述了 Ama ECS zon 和。 AWS CodeDeploy

  • Amazon 弹性容器服务开发者指南 — 有关使用 Docker 镜像和容器、ECS服务和集群以及ECS任务集的信息,请参阅什么是亚马逊 ECS