本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊弹性容器服务和 CodeDeploy 蓝绿色部署操作参考
您可以在中配置管道 AWS CodePipeline ,使用部署来 blue/green 部署容器应用程序。在 blue/green 部署中,您可以启动应用程序的新版本和旧版本,并且可以在将流量重新路由到新版本之前对其进行测试。您还可以监控部署流程并且在存在问题的情况下迅速回滚。
完成的管道会检测您的映像或任务定义文件的更改,并用于 CodeDeploy 将流量路由和部署到 Amazon ECS 集群和负载均衡器。 CodeDeploy 在您的负载均衡器上创建一个新的监听器,该监听器可以通过特殊端口将您的新任务作为目标。您还可以将管道配置为使用存储您的 Amazon ECS 任务定义的源位置,例如存储 CodeCommit 库。
在创建管道之前,您必须已经创建了 Amazon ECS 资源、 CodeDeploy 资源以及负载均衡器和目标组。您必须已经标记图像并将其存储在图像存储库中,并将任务定义和 AppSpec 文件上传到您的文件存储库。
注意
本主题介绍了 Amazon ECS 的 CodeDeploy blue/green 部署操作 CodePipeline。有关中的 Amazon ECS 标准部署操作的参考信息 CodePipeline,请参阅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>占位符文本。 - AppSpecTemplatePath
-
必需:否
存储在管道源 AppSpec 文件位置(例如管道的存储 CodeCommit 库)中的文件的文件名。默认文件名为
appspec.yaml。如果您的 AppSpec 文件同名并且存储在文件存储库的根级别,则无需提供文件名。如果路径不是默认路径,请输入路径和文件名。 - TaskDefinitionTemplatePath
-
必需:否
存储在管道文件源位置(例如管道的存储 CodeCommit 库)中的任务定义的文件名。默认文件名为
taskdef.json。如果您的任务定义文件同名且存储在文件存储库的根级别,则无需提供文件名。如果路径不是默认路径,请输入路径和文件名。 - 图片 <Number>ArtifactName
-
必需:否
用于为部署操作提供映像的输入构件的名称。这通常是映像存储库的输出构件,如 Amazon ECR 源操作的输出。
<Number>的可用值为 1 到 4。 - 图片 <Number>ContainerName
-
必需:否
映像存储库(如 Amazon ECR 源存储库)中可用映像的名称。
<Number>的可用值为 1 到 4。
输入构件
-
构件数:
1 to 5 -
描述:该
CodeDeployToECS操作首先在源文件存储库中查找任务定义文件和文件,然后在镜像存储库中查找图像,然后动态生成任务定义的新修订版,最后运行 AppSpec 命令将任务集和容器部署到集群。 AppSpecCodeDeployToECS操作会查找将映像 URI 映射到映像的imageDetail.json文件。当您向 Amazon ECR 映像存储库提交更改时,管道 ECR 源操作会为该提交创建imageDetail.json文件。在未自动执行操作的情况下,您还可以为管道手动添加imageDetail.json文件。有关imageDetail.json文件的信息,请参阅Amazon ECS blue/green 部署操作的图像Detail.json 文件。CodeDeployToECS操作会动态生成任务定义的新修订版。在此阶段,此操作将任务定义文件中的占位符替换为从图像文件检索的图像 Detail.json URI。例如,如果您将 IMAGE1_NAME 设置为 Image1ContainerName 参数,则应将占位符指定<IMAGE1_NAME>为任务定义文件中图像字段的值。在这种情况下,该 CodeDeployToECS 操作会将占位符替换为<IMAGE1_NAME>从您指定为的构件Detail.json 中的图像中检索到的实际图像 URI。 Image1ArtifactName对于任务定义更新,该 CodeDeploy
AppSpec.yaml文件包含该TaskDefinition属性。TaskDefinition: <TASK_DEFINITION>创建新任务定义后,
CodeDeployToECS操作将会更新此属性。对于
TaskDefinition字段的值,占位符文本必须为 <TASK_DEFINITION>。CodeDeployToECS操作会将此占位符替换为动态生成的任务定义的实际 ARN。
输出构件
-
构件数:
0 -
描述:输出构件不适用于此操作类型。
服务角色权限:CodeDeployToECS 操作
对于CodeDeployToECS操作(blue/green 部署),以下是使用 CodeDeploy 到 Amazon ECS blue/green 部署操作创建管道所需的最低权限。
您可以选择加入以使用 Amazon ECS 中的标记授权。选择加入后,您必须授予以下权限:ecs:TagResource。有关如何选择加入以及如何确定是否需要权限和是否强制执行标记授权的更多信息,请参阅《Amazon Elastic Container Service 开发者指南》中的标记授权时间表。
您还必须添加 iam:PassRole 权限以使用任务 IAM 角色。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色和任务 IAM 角色。
您还可以将 ecs-tasks.amazonaws.com 添加到 iam:PassedToService 条件下的服务列表中,如上述示例所示。
操作声明
另请参阅
下列相关资源在您使用此操作的过程中会有所帮助。
-
教程:使用 Amazon ECR 源和 ECS-to-CodeDeploy 部署创建管道— 本教程引导您创建 blue/green 部署所需的 Amazon ECS 资源 CodeDeploy 和 Amazon ECS 资源。本教程展示了如何将 Docker 映像推送到 Amazon ECR,并创建 Amazon ECS 任务定义,其中列出您的 Docker 映像名称、容器名称、Amazon ECS 服务名称和负载均衡器配置。然后,本教程将引导您创建用于部署的 AppSpec 文件和管道。
注意
本主题和教程介绍的 CodeDeploy/ECS blue/green 操作 CodePipeline。有关中的 ECS 标准操作的信息 CodePipeline,请参见教程:使用进行持续部署 CodePipeline。
-
AWS CodeDeploy 用户指南 -有关如何在 blue/green 部署中使用负载均衡器、生产侦听器、目标组和您的 Amazon ECS 应用程序的信息,请参阅教程:部署 Amazon ECS 服务。AWS CodeDeploy 用户指南中的参考信息概述了使用 Amazon ECS 和进行 blue/green部署的情况 AWS CodeDeploy。
-
Amazon Elastic Container Service 开发者指南:有关使用 Docker 映像和容器、ECS 服务和集群以及 ECS 任务集的信息,请参阅什么是 Amazon ECS?