

# Amazon ECS 线性部署
<a name="deployment-type-linear"></a>

随着时间推移，线性部署会逐渐以相等增量将流量从旧服务修订转移到新服务修订，使您能够在继续下一步之前监控每个步骤。借助 Amazon ECS 线性部署，您可以控制流量转移的速度，并随着生产流量不断增加验证新的服务修订。这种方法提供了一种受控的方式来部署更改，并且能够监控每个增量的性能。

## 线性部署涉及的资源
<a name="linear-deployment-resources"></a>

下面是 Amazon ECS 线性部署涉及的资源：
+ 流量转移：Amazon ECS 用于转移生产流量的过程。对于 Amazon ECS 线性部署，流量以相等百分比增量转移，每个增量之间的等待时间可配置。
+ 步骤百分比：线性部署期间每个增量中要转移的流量百分比。此字段采用双精度值，有效值是 3.0 到 100.0。
+ 步骤烘焙时间：线性部署期间每个流量转移增量之间等待的持续时间。有效值是 0 到 1440 分钟。
+ 部署烘焙时间：Amazon ECS 将所有生产流量转移到新服务修订后，在终止旧服务修订之前等待的时间（以分钟为单位）。这是生产流量转移后蓝色服务修订和绿色服务修订同时运行的持续时间。
+ 生命周期阶段：部署操作中的一系列事件，例如“生产流量转移后”。
+ 生命周期挂钩：在特定生命周期阶段运行的 Lambda 函数。您可以创建一个函数来验证部署。为 PRODUCTION\$1TRAFFIC\$1SHIFT 配置的 Lambda 函数或生命周期挂钩将在每个生产流量转移步骤中被调用。
+ 目标组：一种 Elastic Load Balancing 资源，用于将请求路由到一个或多个已注册目标（例如 EC2 实例）。创建侦听器时，您为其默认操作指定目标组。流量将转发到在侦听器规则中指定的目标组。
+ 侦听器：一种 Elastic Load Balancing 资源，可通过所配置的协议和端口检查连接请求。为侦听器定义的规则决定了 Amazon ECS 如何将请求路由到其注册的目标。
+ 规则：与侦听器关联的 Elastic Load Balancing 资源。规则定义了请求的路由方式，由操作、条件和优先级组成。

## 注意事项
<a name="linear-deployment-considerations"></a>

选择部署类型时，请考虑以下因素：
+ 资源使用量：线性部署会暂时同时运行蓝色服务修订和绿色服务修订，这可能会使部署期间的资源使用量翻一番。
+ 部署监控：线性部署会提供详细的部署状态信息，允许您监控部署过程的每个阶段和每个流量转移增量。
+ 回滚：如果检测到问题，线性部署可以更轻松地回滚到先前版本，因为蓝色修订会一直运行直到烘焙时间到期。
+ 逐步验证：线性部署允许您随着生产流量不断增加验证新版本，从而增强部署的信心。
+ 部署持续时间：由于流量转移是以增量方式进行的，并且步骤之间存在等待时间，因此线性部署比一次性部署需要更长时间才能完成。

## 线性部署的工作原理
<a name="linear-deployment-how-works"></a>

Amazon ECS 线性部署过程遵循结构化方法，包含六个不同的阶段，可确保安全可靠地进行应用程序更新。在验证应用程序并将其从当前版本（蓝色环境）迁移到新版本（绿色环境）时，每个阶段都有其特定目的。

1. 准备阶段：在现有的蓝色环境旁创建绿色环境。

1. 部署阶段：将新的服务修订版部署到绿色环境。Amazon ECS 使用更新的服务修订版启动新任务，同时蓝色环境继续传送生产流量。

1. 测试阶段：使用测试流量路由来验证绿色环境。应用程序负载均衡器将测试请求定向到绿色环境，而生产流量仍保留在蓝色环境中。

1. 线性流量转移阶段：根据您配置的部署策略，以相等百分比增量将生产流量从蓝色逐渐转移为绿色。

1. 监控阶段：监控烘焙时间内的应用程序运行状况、性能指标和警报状态。检测到问题时将启动回滚操作。

1. 完成阶段：通过终止蓝色环境来完成部署。

线性流量转移阶段遵循下面的步骤：
+ 初始：部署开始时，100% 的流量都路由到蓝色（当前）服务修订。绿色（新）服务修订接收测试流量，但是最初不接收生产流量。
+ 增量流量转移：流量以相等百分比增量从蓝色逐渐转移为绿色。例如，在 10.0% 的步骤配置中，流量转移过程如下：
  + 步骤 1：10.0% 变为绿色，90.0% 变为蓝色
  + 步骤 2：20.0% 变为绿色，80.0% 变为蓝色
  + 步骤 3：30.0% 变为绿色，70.0% 变为蓝色
  + 依此类推，直到 100% 变为绿色
+ 步骤烘焙时间：在每个流量转移增量之间，部署将等待可配置的持续时间（步骤烘焙时间），以便在流量负载增加的情况下监控和验证新修订的性能。请注意，一旦流量转移 100.0% 后，将跳过最后一步烘焙时间。
+ 生命周期挂钩：可选的 Lambda 函数可以在部署期间的各个生命周期阶段执行，以执行自动化验证、监控或自定义逻辑。为 PRODUCTION\$1TRAFFIC\$1SHIFT 配置的 Lambda 函数或生命周期挂钩将在每个生产流量转移步骤中被调用。

## 部署生命周期阶段
<a name="linear-deployment-lifecycle-stages"></a>

线性部署过程会经历不同的生命周期阶段，每个阶段都有特定职责和验证检查点。了解这些阶段有助于监控部署进度并有效排查问题。

每个生命周期阶段最多可持续 24 小时，此外，PRODUCTION\$1TRAFFIC\$1SHIFT 中的每个流量转移步骤最多可持续 24 小时。建议将该值保持在 24 小时以内。这是因为异步进程需要时间来触发挂钩。当一个阶段达到 24 小时后，系统将超时，导致部署失败，然后会启动回滚。

CloudFormation 部署还有其他超时限制。尽管 24 小时的阶段限制仍然有效，但 CloudFormation 会对整个部署强制执行 36 小时的限制。如果整个过程未在 36 小时内完成，CloudFormation 将使部署失败，然后启动回滚。


| 生命周期阶段 | 说明 | 生命周期挂钩支持 | 
| --- | --- | --- | 
| RECONCILE\$1SERVICE | 仅当启动多个服务修订版处于活动状态的新服务部署时，才会发生此阶段。 | 是 | 
| PRE\$1SCALE\$1UP | 绿色服务修订版尚未启动。蓝色服务修订版正在处理 100% 的生产流量。没有测试流量。 | 是 | 
| SCALE\$1UP | 绿色服务修订版纵向扩展至 100% 并启动新任务的时间。此时绿色服务修订版不传送任何流量。 | 否 | 
| POST\$1SCALE\$1UP | 绿色服务修订版已经启动。蓝色服务修订版正在处理 100% 的生产流量。没有测试流量。 | 是 | 
| TEST\$1TRAFFIC\$1SHIFT | 蓝色服务修订版和绿色服务修订版正在运行。蓝色服务修订版可处理 100% 的生产流量。绿色服务修订版正在将测试流量从 0% 迁移到 100%。 | 是 | 
| POST\$1TEST\$1TRAFFIC\$1SHIFT | 测试流量转移已完成。绿色服务修订版可处理 100% 的测试流量。 | 是 | 
| PRODUCTION\$1TRAFFIC\$1SHIFT | 流量以相等百分比增量逐渐从蓝色转移为绿色，直到绿色接收 100% 的流量。每次流量转移都会调用具有 24 小时超时的生命周期挂钩。 | 
| POST\$1PRODUCTION\$1TRAFFIC\$1SHIFT | 生产流量转移已完成。 | 是 | 
| BAKE\$1TIME | 蓝色服务修订版和绿色服务修订版同时运行的持续时间。 | 否 | 
| CLEAN\$1UP | 蓝色服务修订版已完全缩减至 0 个运行任务。在此阶段之后，绿色服务修订版将成为生产服务修订版。 | 否 | 