本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在亚马逊 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 Elastic Baliner Serv ice 用户指南中的 Amazon ECS 集群。
- Amazon ECS 服务
-
Amazon ECS 服务在 Amazon ECS 集群中维护和运行任务定义的指定实例。您的亚马逊 ECS 服务必须已启用 CodeDeploy。默认情况下,为亚马逊 ECS 部署启用亚马逊 ECS 服务。创建部署组时,您可以选择部署 Amazon ECS 集群中的 Amazon ECS 服务。有关更多信息,请参阅 Amazon Elastic Balancer 用户指南中的 Amazon ECS 服务。
- Application Load Balancer 或Network Load Balancer 的
-
您必须在要通过 Amazon ECS 部署进行更新的亚马逊 ECS 服务中使用Elastic Load Balancing。您可以使用Application Load Balancer 或Network Load Balancer 可以使用。我们建议使用Application Load Balancer,这样您就可以利用动态端口映射和基于路径的路由和优先级规则等功能。您在创建 CodeDeploy 应用程序的部署组时指定负载均衡器。有关更多信息,请参阅为 CodeDeploy Amazon ECS 部署设置负载均衡器、目标组和侦听器 Amazon 弹性容器服务用户指南中的创建负载均衡器。
- 一两个听众
-
侦听器 由负载均衡器用于将流量定向到目标组。必须提供一个生产侦听器。您可以指定可选的第二个测试侦听器,在您运行验证测试时该侦听器可以将流量定向到替换任务集。在创建部署组时,您需要指定一个或两个侦听器。如果您使用 Amazon ECS 控制台创建 Amazon ECS 服务,则会为您创建侦听器。有关更多信息,请参阅《Elastic Load Balancing 用户指南》中的应用程序负载均衡器的侦听器以及 Amazon Elastic Container Service 用户指南中的创建服务。
- 两个 Amazon ECS 目标组
-
目标组 用于将流量路由到一个注册目标。Amazon ECS 部署需要两个目标组:一个用于您的 Amazon ECS 应用程序的原始任务集,另一个用于其替换任务集。在部署期间, CodeDeploy 创建替换任务集并将流量从原始任务集重新路由到新的任务集重新路由到替换任务集重新路由到 Application Taing。在创建 CodeDeploy 应用程序的部署组时,您需要指定目标组。
在部署期间, CodeDeploy 确定哪个目标组与您的 Amazon ECS 服务中状态为
PRIMARY
(这是原始任务集)的任务集相关联并将一个目标组与其关联,然后将另一个目标组与替换任务集相关联。如果执行其他部署,则与当前部署的原始任务集关联的目标组将与下一个部署的替换任务集关联。有关更多信息,请参阅 Elastic Load Balancing 用户指南中的应用程序负载均衡器目标组。 - Amazon ECS 任务定义
-
运行包含 Amazon ECS 应用程序的 Docker 容器需要任务定义。您在 CodeDeploy 应用程序 AppSpec 文件中指定任务定义的 ARN。有关更多信息,请参阅 Amazon Elastic Container Serv ice 用户指南中的 Amazon EC S 任务定义 AppSpec 亚马逊 ECS 部署的 “资源” 部分 。
- 您的 Amazon ECS 应用程序的容器
-
Docker 容器 是一套打包代码及其依赖项以便应用程序运行的软件。容器可以隔离您的应用程序,使其在不同的计算环境中运行。您的负载均衡器将流量定向到 Amazon ECS 应用程序任务集中的容器。您在 CodeDeploy 应用程序 AppSpec 的文件中指定容器的名称。 AppSpec 文件中指定的容器必须是您的 Amazon ECS 任务定义中指定的容器之一。有关更多信息,请参阅什么是 Amazon Elastic Baliner Service 在《亚马逊弹性容器服务用户指南》和 AppSpec 亚马逊 ECS 部署的 “资源” 部分 。
- 您的替换任务集的端口
-
在您的 Amazon ECS 部署期间,您的负载均衡器将流量定向到 CodeDeploy应用程序 AppSpec 文件中指定的容器上的此端口。您在 CodeDeploy 应用程序 AppSpec 文件中指定端口。有关更多信息,请参阅 AppSpec 亚马逊 ECS 部署的 “资源” 部分 :
Amazon ECS 计算平台上的部署工作流程(高级别)
下图显示了部署更新的 Amazon ECS 服务的主要步骤。

这些步骤包括:
-
通过指定一个唯一表示要部署的内容的名称,创建 Amazon CodeDeploy 应用程序。要部署 Amazon ECS 应用程序,请在您的Amazon CodeDeploy应用程序中选择 Amazon ECS 计算平台。 CodeDeploy 在部署期间使用应用程序来引用正确的部署组件,例如部署组、目标组、侦听器、流量重新路由行为和应用程序修订版。有关更多信息,请参阅使用以下命令创建应用程序 CodeDeploy:
-
通过指定以下内容设置部署组:
-
部署组名称。
-
您的 Amazon ECS 集群和服务名称。Amazon ECS 服务的部署控制器必须设置为 CodeDeploy。
-
生产侦听器、可选的测试侦听器以及在部署期间使用的目标组。
-
部署设置,例如何时将生产流量重新路由到您的 Amazon ECS 服务中的替换 Amazon ECS 任务集,以及何时终止 Amazon ECS 服务中的原始 Amazon ECS 任务集。
-
可选设置,如触发器、警报和回滚行为。
-
-
指定应用程序规范文件(AppSpec 文件)。您可以将其上传到 Amazon S3,以 YAML 或 JSON 格式将其输入控制台,或者使用Amazon CLI或 SDK 进行指定。该 AppSpec 文件指定了部署的 Amazon ECS 任务定义、用于路由流量的容器名称和端口映射,以及 Lambda 函数在部署生命周期挂钩之后运行。容器名称必须是您的 Amazon ECS 任务定义中的容器。有关更多信息,请参阅使用 CodeDeploy 的应用程序修订:
-
部署应用程序修订版。 Amazon CodeDeploy将流量从 Amazon ECS 服务中任务集的原始版本重新路由到新的替代任务集。部署组中指定的目标组用于处理传输到原始和替换任务集的流量。在部署完成后,会终止原始任务集。您可以指定一个可选的测试侦听器,以便在将流量重新路由到替换版本之前为其提供测试流量。有关更多信息,请参阅使用创建部署 CodeDeploy:
-
检查部署结果。有关更多信息,请参阅监控 CodeDeploy 中的部署:
Amazon ECS 部署期间会发生什么
在启动带有测试侦听器的 Amazon ECS 部署之前,您必须配置其组件。有关更多信息,请参阅在您开始Amazon ECS 部署开始前的准备工作:
下图显示了 Amazon ECS 部署准备开始时这些组件之间的关系。

当部署启动时,开始一次执行一个部署生命周期事件。一些生命周期事件是仅执行 AppSpec 文件中指定的 Lambda 函数的挂钩。下表中的部署生命周期事件按照执行的顺序列出。有关更多信息,请参阅AppSpec 亚马逊 ECS 部署的 “挂钩” 部分:
生命周期事件 | 生命周期事件操作 |
---|---|
BeforeInstall (Lambda 函数的挂钩) |
运行 Lambda 函数。 |
安装 | 设置替换任务集。 |
AfterInstall (Lambda 函数的挂钩) |
运行 Lambda 函数。 |
AllowTestTraffic | 将流量从测试侦听器路由至目标组 2。 |
AfterAllowTestTraffic (Lambda 函数的挂钩) |
运行 Lambda 函数。 |
BeforeAllowTraffic (Lambda 函数的挂钩) |
运行 Lambda 函数。 |
AllowTraffic | 将流量从生产侦听器路由至目标组 2。 |
AfterAllowTraffic |
运行 Lambda 函数。 |
注意
挂钩中的 Lambda 函数是可选的。
-
在 AppSpec 文件中执行
BeforeInstall
挂钩中指定的任何 Lambda 函数。 -
在
Install
生命周期事件期间:-
替换任务集已在您的 Amazon ECS 服务中创建。
-
更新后的容器化应用程序安装到替换任务集中。
-
第二个目标组与替换任务集关联。
此图显示具有新替换任务集的部署组件。容器化应用程序位于此任务集的内部。任务集包含三个任务。(应用程序可以具有任意数量的任务。) 第二个目标组现与替换任务集关联。
-
-
在 AppSpec 文件中执行
AfterInstall
挂钩中指定的任何 Lambda 函数。 -
调用了
AllowTestTraffic
事件。在此生命周期事件中,测试侦听器将流量路由到更新后的容器化应用程序中。 -
在 AppSpec 文件中执行
AfterAllowTestTraffic
挂钩中指定的任何 Lambda 函数。Lambda 函数可以使用测试流量验证部署。例如,Lambda 函数可以向测试侦听器提供流量,并跟踪替换任务集的指标。如果配置了回滚,则可以配置 CloudWatch 警报,在 Lambda 函数中的验证测试失败时触发回滚。验证测试完成后,将会发生以下情况之一:
-
如果验证失败并配置了回滚,则部署状态标记为
Failed
,组件返回其开始部署时的状态。 -
如果验证失败但未配置回滚,则部署状态标记为
Failed
,并且组件保持其当前状态。 -
如果验证成功,则部署将继续到
BeforeAllowTraffic
挂钩。
有关更多信息,请参阅在 CodeDeploy 中使用 CloudWatch 警报监控部、自动回滚和为部署组配置高级选项。
-
-
在 AppSpec 文件中执行
BeforeAllowTraffic
挂钩中指定的任何 Lambda 函数。 -
调用了
AllowTraffic
事件。生产流量从原始任务集重新路由到替换任务集。下图显示了接收生产流量的替换任务集。 -
在 AppSpec 文件中执行
AfterAllowTraffic
挂钩中指定的任何 Lambda 函数。 -
所有事件成功后,部署状态设置为
Succeeded
并删除原始任务集。
上传您的应用程序修订版
将 AppSpec 文件放入 Amazon S3 或直接将其输入控制台或Amazon CLI。有关更多信息,请参阅Application Specification Files:
创建您的应用程序和部署组
Amazon ECS 计算平台上的 CodeDeploy 部署组可识别侦听器,为更新后的 Amazon ECS 应用程序和部署期间使用的两个目标组提供流量。部署组还定义一组配置选项,例如警报和回滚配置。
部署应用程序修订版
现在准备好部署部署组中指定的更新的 Amazon ECS 服务。您可以使用 CodeDeploy 控制台或 create-deploymen t 命令。可以指定一些参数(包括修订和部署组)来控制部署。
更新应用程序
您可以更新应用程序,然后使用 CodeDeploy 控制台或调用 create-deploy ment 命令推送修订版。
部署已停止且失败
您可以使用 CodeDeploy 控制台或 stop-deploy ment 命令来停止部署。当您尝试停止部署时,将发生下面三种情况之一:
重新部署和部署回滚
CodeDeploy 通过将流量从替换任务集重新路由到原始任务集来实现回滚。
您可以对部署组进行配置,使之在满足特定条件(例如部署失败或达到警报监控阈值)时自动回滚部署。您还可以在单个部署中覆盖为部署组指定的回滚设置。
另外,也可以选择通过手动重新部署以前部署的版本回滚失败的部署。
在所有情况下,新的或回滚的部署都分配有自己的部署 ID。 CodeDeploy 控制台显示列出自动部署结果的部署列表。
如果进行重新部署,则与当前部署的原始任务集关联的目标组将与重新部署的替换任务集关联。
有关更多信息,请参阅使用 CodeDeploy 重新部署和回滚部署:
Amazon ECS 蓝/绿部署Amazon CloudFormation
您可以使用通过Amazon CloudFormation来管理 Amazon ECS 蓝/绿部署 CodeDeploy。有关更多信息,请参阅通过创建 Amazon ECS 蓝/绿部署Amazon CloudFormation:
注意
亚太地区(大阪)区域无法使用 Amazon ECS 蓝/绿部署。Amazon CloudFormation