

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

# Elastic Beanstalk 滚动环境配置更新
<a name="using-features.rollingupdates"></a>

当[配置更改要求替换实例](environments-updating.md)时，Elastic Beanstalk 可以批量执行更新以避免在传播更改时停机。在滚动更新期间，容量只按单批次大小减少，而您可以配置这个大小。Elastic Beanstalk 禁用一批实例，终止这些实例，然后启动一批具有新配置的实例。在新批次开始处理请求后，Elastic Beanstalk 将移至下一个批次。

滚动配置更新批次可以基于时间定期处理 (每个批次之间有延迟) 或根据运行状况来处理。对于基于时间的滚动更新，您可以配置 Elastic Beanstalk 在启动完一批实例后和移至下一个批次前所等待的时间。此暂停时间可让您的应用程序引导并开始处理请求。

当采用基于运行状况的滚动更新时，Elastic Beanstalk 会等一个批次中的实例通过运行状况检查之后再继续下一个批次。实例的运行状况由运行状况报告系统确定，可以是基本运行状况或增强型运行状况。当采用[基本运行状况](using-features.healthstatus.md)时，一旦某个批次中的所有实例都通过 Elastic Load Balancing (ELB) 运行状况检查，该批次即被视为运行状况良好。

当采用[增强型运行状况报告](health-enhanced.md)时，某个批次中的所有实例必须先通过连续的多次运行状况检查，Elastic Beanstalk 才能移至下一个批次。除了 ELB 运行状况检查（仅检查您的实例）之外，增强型运行状况还监视应用程序日志和环境中其他资源的状态。在采用增强型运行状况报告的 Web 服务器环境中，所有实例都必须在 2 分钟内通过 12 项运行状况检查 (对于工作线程环境，则必须在 12 分钟内通过 18 次检查)。如果任何实例未能通过一项运行状况检查，则将重置计数。

如果某个批次在滚动更新超时时间内（默认为 30 分钟）未变成正常运行，则会取消更新。滚动更新超时时间是一个在 `aws:autoscaling:updatepolicy:rollingupdate` 命名空间中可用的[配置选项](command-options.md)。如果应用程序未通过运行状况检查（即未处于 `Ok` 状态），但在另一级别很稳定，您可以在 [`aws:elasticbeanstalk:healthreporting:system`](command-options-general.md#command-options-general-elasticbeanstalkhealthreporting) 命名空间中设置 `HealthCheckSuccessThreshold` 选项，从而更改 Elastic Beanstalk 将实例视为运行状况良好的级别。

如果滚动更新过程失败，Elastic Beanstalk 会启动另一个滚动更新以回滚到之前的配置。运行状况检查失败或启动新实例导致超出账户配额都可能导致滚动更新失败。例如，如果您达到了 Amazon EC2 实例数量的配额，则在尝试配置一批新实例时，滚动更新可能会失败。在这种情况下，回滚也会失败。

回滚失败会终止更新过程，并令您的环境运行状况不佳。未处理的批次仍然使用旧的配置运行实例，而成功完成的批次具有新配置。要在回滚失败后修复环境，首先要解决导致更新失败的潜在问题，然后再次启动环境更新。

替代方法是将应用程序的新版本部署到不同的环境，然后执行别名记录交换重定向流量，这样不会产生停机时间。请参阅[使用 Elastic Beanstalk 进行蓝/绿部署](using-features.CNAMESwap.md)了解更多信息。

## 滚动更新与滚动部署
<a name="environments-cfg-rollingupdates-deployments"></a>

当您更改需要为您的环境配置新 Amazon EC2 实例的设置时，就会发生滚动更新。这包括对 Auto Scaling 组配置的更改（如实例类型和密钥对设置）和对 VPC 设置的更改。在滚动更新中，在配置新批次替换每个旧批次前，都会终止旧实例批次。

只要您部署应用程序就会发生[滚动部署](using-features.rolling-version-deploy.md)，通常无需替换环境中的实例就可以执行滚动部署。Elastic Beanstalk 将每个批次取出服务，部署新的应用程序版本，然后将其放回服务中。

例外情况是，在部署新应用程序版本的同时更改需要替换实例的设置。例如，如果您更改源包中的[配置文件](ebextensions.md)中的[密钥名称](command-options-general.md#command-options-general-autoscalinglaunchconfiguration)设置并将其部署到环境，就会触发滚动更新。它不是将新应用程序版本部署到现有实例的每个批次，而是用新配置对新的实例批次进行配置。在这种情况下，不会发生单独部署，因为新应用程序版本采用新实例。

只要将新实例作为环境更新的一部分进行预配置，就有一个部署阶段，在此阶段，应用程序的源代码将部署到新实例，并且将应用任何修改实例上的操作系统或软件的配置设置。[部署运行状况检查设置](using-features.rolling-version-deploy.md#environments-cfg-rollingdeployments-console)（**忽略运行状况检查**、**正常阈值**和**命令超时**）还在部署阶段应用于基于运行状况的滚动更新和不可变更新。

## 配置滚动更新
<a name="rollingupdates-configure"></a>

您可以在 Elastic Beanstalk 控制台中启用和配置滚动更新。

**启用滚动更新**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Rolling updates and deployments**（滚动更新和部署）配置类别中，选择 **Edit**（编辑）。

1. 在**配置更新**部分中，对于**滚动更新类型**，选择一个**滚动**选项。  
![修改滚动更新和部署配置页面上的“配置更新”部分](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-rolling-updates-health.png)

1. 选择**批处理大小**、**最小容量**和**暂停时间**设置。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

**Rolling updates and deployments**（滚动更新和部署）页面的 **Configuration updates**（配置更新）部分提供以下滚动更新选项：
+ **Rolling update type (滚动更新类型)** - Elastic Beanstalk 在完成一个实例批次更新后等待多长时间再进行下一批次，以允许这些实例完成引导启动并开始提供流量服务。从以下选项中进行选择：
  + **Rolling based on Health (根据运行状况滚动)** - 等待直至当前批次中的实例运行状况良好，然后再将这些实例投入使用并开始下一个批次。
  + **Rolling based on Time (基于时间滚动)** - 指定在开始下一个批次之前，在启动新实例和将实例投入使用之间等待的时间。
  + **Immutable (不可变的)** - 通过执行[不可变更新](environmentmgmt-updates-immutable.md)将配置更改应用于新实例组。
+ **Batch size (批处理大小)** - 每个批次要替换的实例的数量，介于 **1** 和 **10000** 之间。默认情况下，此值是 Auto Scaling 组的最小大小的三分之一，向上舍入取整。
+ **Minimum capacity (最小容量)** - 在更新其他实例时要保持运行状态的最小实例数，介于 **0** 和 **9999** 之间。默认值为 Auto Scaling 组的最小大小，或 Auto Scaling 组的最大大小减一（取两者中较小的值）。
+ **Pause time (暂停时间)**（仅限基于时间的滚动更新）- 更新一个批次后到继续处理下一批次前等待的时间，以允许您的应用程序开始接收流量。介于 0 秒到一小时之间。

## aws:autoscaling:updatepolicy:rollingupdate 命名空间
<a name="rollingupdate-namespace"></a>

您也可以使用 `aws:autoscaling:updatepolicy:rollingupdate` 命名空间中的[配置选项](command-options.md)来配置滚动更新。

使用 `RollingUpdateEnabled` 选项可启用滚动更新；使用 `RollingUpdateType` 可选择更新类型。`RollingUpdateType` 支持下列值：
+ `Health` - 等待直至当前批次中的实例运行状况良好，然后再将这些实例投入使用并开始下一个批次。
+ `Time` - 指定在开始下一个批次之前，在启动新实例和将实例投入使用之间等待的时间。
+ `Immutable` - 通过执行[不可变更新](environmentmgmt-updates-immutable.md)将配置更改应用于新实例组。

启用滚动更新时，设置 `MaxBatchSize` 和 `MinInstancesInService` 选项以配置每个批次的大小。对于基于时间的滚动更新和基于运行状况的滚动更新，您也可以分别配置 `PauseTime` 和 `Timeout`。

例如，要一次性启动最多 5 个实例并使至少 2 个实例保持使用状态，同时在各个批次之间等待 5 分 30 秒的时间，请指定以下选项和值。

**Example .ebextensions/timebased.config**  

```
option_settings:
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateEnabled: true
    MaxBatchSize: 5
    MinInstancesInService: 2
    RollingUpdateType: Time
    PauseTime: PT5M30S
```

要启用基于运行状况的滚动更新，并将每个批次的超时设置为 45 分钟，请指定以下选项和值。

**Example .ebextensions/healthbased.config**  

```
option_settings:
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateEnabled: true
    MaxBatchSize: 5
    MinInstancesInService: 2
    RollingUpdateType: Health
    Timeout: PT45M
```

`Timeout`和`PauseTime`值必须在 [ISO8601 durat](http://en.wikipedia.org/wiki/ISO_8601#Durations) ion: 中指定`PT{{#}}H{{#}}M{{#}}S`，其中每个 \# 分别是小时数、分钟数或秒数。

EB CLI 和 Elastic Beanstalk 控制台会对前面的选项应用建议的值。如果您需要使用配置文件来配置相同的项，则必须删除这些设置。有关详细信息，请参阅[建议值](command-options.md#configuration-options-recommendedvalues)。