

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

# 不可变的环境更新
<a name="environmentmgmt-updates-immutable"></a>

不可变环境更新是[滚动更新](using-features.rollingupdates.md)的替代方法。不可变环境更新可确保安全高效地应用需要替换实例的配置更改。如果不可变环境更新失败，则回滚过程仅需要终止 Auto Scaling 组。另一方面，一次失败的滚动更新需要执行额外的滚动更新来回滚更改。

为了执行不可变环境更新，Elastic Beanstalk 在您环境的负载均衡器后面创建第二个临时 Auto Scaling 组以包含新实例。首先，Elastic Beanstalk 在新组中使用新配置启动单个实例。此实例与在之前配置中运行的原始 Auto Scaling 组中的所有实例一起，为流量提供服务。

第一个实例通过了运行状况检查后，Elastic Beanstalk 使用新配置启动额外的实例，这些实例与在原始 Auto Scaling 组中运行的实例数相匹配。当所有新实例均通过运行状况检查后，Elastic Beanstalk 会将这些实例传输到原始 Auto Scaling 组，并终止临时 Auto Scaling 组和旧实例。

**注意**  
在不可变环境更新期间，当新 Auto Scaling 组中的实例开始处理请求并在终止原始 Auto Scaling 组的实例之前，您的环境在短时间内容量加倍。如果您的环境有许多实例，或者[按需实例配额](https://www.amazonaws.cn/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2)较低，请确保您有足够的容量来执行不可变的环境更新。如果您已接近配额，请考虑改为使用滚动更新。

不可变更新需要[增强型运行状况报告](health-enhanced.md)来评估更新期间您环境的运行状况。增强型运行状况报告将标准负载均衡器运行状况检查与实例监视结合在一起，确保运行新配置的实例[成功处理请求](health-enhanced.md#health-enhanced-factors)。

您还可以将不可变更新用作滚动部署的替代方法，用于部署应用程序的新版本。如果您[配置 Elastic Beanstalk 来为应用程序部署使用不可变更新](using-features.rolling-version-deploy.md)，在您每次部署应用程序的新版本时，它将替换您环境中的所有实例。如果不可变的应用程序部署失败，Elastic Beanstalk 将通过终止新 Auto Scaling 组来立即还原更改。这可以防止在某些批次完成后，在滚动部署失败时出现部分队列部署。

**警告**  
某些策略会在部署或更新期间替换所有实例。这会导致所有累积的 [Amazon EC2 突发余额](https://docs.amazonaws.cn/AWSEC2/latest/DeveloperGuide/burstable-performance-instances.html)丢失。这发生在以下情况下：  
已启用实例替换的托管平台更新
不可变更新
已启用不可变更新或流量拆分的部署

如果不可变更新失败，则新实例在 Elastic Beanstalk 终止它们之前，会将[包日志](using-features.logging.md)上传到 Amazon S3。Elastic Beanstalk 将来自失败的不可变更新的日志在 Amazon S3 中保留一小时后才将其删除，而不是针对包日志和尾日志的标准 15 分钟。

**注意**  
如果您为应用程序版本部署使用不可变更新，但未对配置使用，则在您尝试部署的应用程序版本包含通常会触发滚动更新的配置更改 (例如，更改实例类型的配置) 时，可能会遇到错误。为避免这一点，请在单独的更新中进行配置更改，或者为部署和配置更改同时配置不可变更新。

您不能与资源配置更改一起执行不可变更新。例如，您不能在更改[需要实例替换的设置](environments-updating.md)的同时更新其他设置，或者执行其配置文件会在源代码中更改配置设置或附加资源的不可变部署。如果您尝试更改资源设置（例如，负载均衡器设置）并同时执行不可变更新，Elastic Beanstalk 将返回错误。

如果资源配置更改不依赖于源代码更改或者实例配置，请在两个更新中执行它们。如果有依赖关系，请改为执行[蓝/绿部署](using-features.CNAMESwap.md)。

## 配置不可变更新
<a name="updates-immutable-configure"></a>

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

**启用不可变更新 (控制台)**

1. 打开 [Elastic Beanstalk](https://console.amazonaws.cn/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 Amazon Web Services 区域

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

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

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

1. 在**配置更新**部分中，将**滚动更新类型**设置为**不可变的**。  
![\[修改滚动更新和部署配置页面上的“配置更新”部分\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/environments-mgmt-updates-immutable.png)

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

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

您还可以使用 `aws:autoscaling:updatepolicy:rollingupdate` 命名空间中的选项配置不可变更新。以下示例[配置文件](ebextensions.md)为配置更改启用不可变更新。

**Example .ebextensions/immutable-updates.config**  

```
option_settings:
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateType: Immutable
```

以下示例为配置更改和部署启用不可变更新。

**Example .ebextensions/immutable-all.config**  

```
option_settings:
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateType: Immutable
  aws:elasticbeanstalk:command:
    DeploymentPolicy: Immutable
```

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