

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

# 更新 Elastic Beanstalk 环境的平台版本
<a name="using-features.platform.upgrade"></a>

Elastic Beanstalk 定期发布新平台版本以更新所有基于 Linux 和 Windows Server 的[平台](concepts.platforms.md)。新平台版本提供对现有软件组件的更新，并支持新功能和配置选项。要了解有关平台和平台版本的信息，请参阅[Elastic Beanstalk 平台词汇表](platforms-glossary.md)。

您可以使用 Elastic Beanstalk 控制台或 EB CLI 更新环境的平台版本。根据您要更新的平台版本，Elastic Beanstalk 建议使用以下两种方法之一来执行平台更新。
+ [方法 1 - 更新环境的平台版本](#using-features.platform.upgrade.config)。当您更新到平台分支中的最新平台版本（具有相同的运行时、Web 服务器、应用程序服务器和操作系统，但不更改主要平台版本）时，我们建议使用此方法。这是最常见的常规平台更新。
+ [方法 2-执行部 Blue/Green 署](#using-features.platform.upgrade.bluegreen)。当您更新到其他平台分支中的平台版本（具有不同的运行时、Web 服务器、应用程序服务器或操作系统版本）或更新到其他主要平台版本时，我们建议使用此方法。当您想要利用新的运行时功能或最新的 Elastic Beanstalk 功能时，或者当您想要脱离弃用或停用的平台分支时，这是一种很好的方法。

  [从旧平台版本迁移](using-features.migration.md)需要进行 blue/green 部署，因为这些平台版本与当前支持的版本不兼容。

  将 [Linux 应用程序迁移到亚马逊 Linux 2](using-features.migration-al.md) 需要进行 blue/green 部署，因为亚马逊 Linux 2 平台版本与之前的亚马逊 Linux AMI 平台版本不兼容。

有关选择最佳平台更新方法的更多帮助，请展开适用于您的环境平台的部分。

## Docker
<a name="using-features.platform.upgrade.docker-single"></a>

使用[方法 1](#using-features.platform.upgrade.config) 执行平台更新。

## 多容器 Docker
<a name="using-features.platform.upgrade.docker-multi"></a>

使用[方法 1](#using-features.platform.upgrade.config) 执行平台更新。

## 预配置的 Docker
<a name="using-features.platform.upgrade.docker-preconfigured"></a>

请考虑以下情况：
+ 如果您要将应用程序迁移到另一个平台，例如从 *Go 1.4 (Docker)* 迁移到 *Go 1.11* 或从 *Python 3.4 (Docker)* 迁移到 *Python 3.6*，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要将应用程序迁移到其他 Docker 容器版本，例如从 *Glassfish 4.1 (Docker)* 迁移到 *Glassfish 5.0 (Docker)*，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要更新到容器版本或主要版本没有变化的最新平台版本，请使用[方法 1](#using-features.platform.upgrade.config)。

## Go
<a name="using-features.platform.upgrade.go"></a>

使用[方法 1](#using-features.platform.upgrade.config) 执行平台更新。

## Java SE
<a name="using-features.platform.upgrade.java-se"></a>

请考虑以下情况：
+ 如果您要将应用程序迁移到其他 Java 运行时版本，例如从 *Java 7* 迁移到 *Java 8*，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要更新到运行时版本没有变化的最新平台版本，请使用[方法 1](#using-features.platform.upgrade.config)。

## 使用 Tomcat 的 Java
<a name="using-features.platform.upgrade.java-tomcat"></a>

请考虑以下情况：
+ 如果您要将应用程序迁移到其他 Java 运行时版本或 Tomcat 应用程序服务器版本，例如从 *Java 7 with Tomcat 7* 迁移到 *Java 8 with Tomcat 8.5*，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要跨主要 Java with Tomcat 平台版本（v1.x.x、v2.x.x 和 v3.x.x）迁移应用程序，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要更新到运行时版本、应用程序服务器版本或主要版本没有变化的最新平台版本，请使用[方法 1](#using-features.platform.upgrade.config)。

## 使用 IIS 的 Windows Server 上的 .NET
<a name="using-features.platform.upgrade.dotnet"></a>

请考虑以下情况：
+ 如果您要将应用程序迁移到其他 Windows 操作系统版本，例如从 *Windows Server 2008 R2* 迁移到 *Windows Server 2016*，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要跨主要 Windows Server 平台版本迁移应用程序，请参阅[从 Windows Server 平台更早的主要版本迁移](dotnet-v2migration.md#dotnet-v2migration.migration)，并使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您的应用程序当前运行在 Windows Server 平台 V2.x.x 上，并且您想要更新到最新的平台版本，请使用[方法 1](#using-features.platform.upgrade.config)。

**注意**  
v2 之前的 [Windows Server 平台版本](https://docs.amazonaws.cn/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.net)未从语义上进行版本控制。您只能启动其中每个 Windows Server 主要平台版本的最新版本，在升级之后无法回退。

## Node.js
<a name="using-features.platform.upgrade.nodejs"></a>

使用[方法 2](#using-features.platform.upgrade.bluegreen) 执行平台更新。

## PHP
<a name="using-features.platform.upgrade.php"></a>

请考虑以下情况：
+ 如果您要将应用程序迁移到其他 Java 运行时版本，例如从 *PHP 5.6* 迁移到 *PHP 7.2*，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要跨主要 PHP 平台版本（v1.x.x 和 v2.x.x）迁移应用程序，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要更新到运行时版本或主要版本没有变化的最新平台版本，请使用[方法 1](#using-features.platform.upgrade.config)。

## Python
<a name="using-features.platform.upgrade.python"></a>

请考虑以下情况：
+ 如果您要将应用程序迁移到其他 Python 运行时版本，例如从 *Python 2.7* 迁移到 *Python 3.6*，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要跨主要 Python 平台版本（v1.x.x 和 v2.x.x）迁移应用程序，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要更新到运行时版本或主要版本没有变化的最新平台版本，请使用[方法 1](#using-features.platform.upgrade.config)。

## Ruby
<a name="using-features.platform.upgrade.ruby"></a>

请考虑以下情况：
+ 如果您要将应用程序迁移到其他 Ruby 运行时版本或应用程序服务器版本，例如从 *Ruby 2.3 with Puma* 迁移到 *Ruby 2.6 with Puma*，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要跨主要 Ruby 平台版本（v1.x.x 和 v2.x.x）迁移应用程序，请使用[方法 2](#using-features.platform.upgrade.bluegreen)。
+ 如果您要更新到运行时版本、应用程序服务器版本或主要版本没有变化的最新平台版本，请使用[方法 1](#using-features.platform.upgrade.config)。

## 方法 1 - 更新环境的平台版本
<a name="using-features.platform.upgrade.config"></a>

使用此方法可更新到环境的平台分支的最新版本。如果您之前已使用旧平台版本创建环境，或已从旧版本升级环境，则您也可以使用此方法恢复到先前的平台版本，前提是它在同一平台分支中。

**更新环境的平台版本**

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

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

1. 在环境概述页面上的 **Platform (平台)** 下，选择 **Change (更改)**。  
![可用的更新的 Elastic Beanstalk 平台](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/environment-management-platform-change.png)

1. 在 **Update platform version (更新平台版本)** 对话框中，选择平台版本。将自动选择分支中的最新（推荐）平台版本。您可以更新到之前使用过的任何版本。  
![Elastic Beanstalk 更新平台版本确认](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/environment-management-update-platform-version.png)

1. 选择 **Save**。

为了进一步简化平台更新，Elastic Beanstalk 可以为您管理它们。在可配置的每周维护时段内，您可以配置环境自动应用次版本和修补版本更新。Elastic Beanstalk 在应用托管更新时，不会导致停机时间或容量减少，并且当运行在新版本实例上的应用程序未能通过运行状况检查时，会立即取消更新。有关详细信息，请参阅[托管平台更新](environment-platform-update-managed.md)。

## 方法 2-执行部 Blue/Green 署
<a name="using-features.platform.upgrade.bluegreen"></a>

使用此方法可更新到其他平台分支（具有不同的运行时、Web 服务器、应用程序服务器或操作系统版本）或更新到其他主要平台版本。当您想要利用新的运行时功能或最新的 Elastic Beanstalk 功能时，这通常是必需的。当您迁移出已弃用或已停用的平台分支时，也需要这样做。

当您跨主要平台版本或具有主要组件更新的平台版本进行迁移时，您的应用程序或其某些方面很可能无法在新平台版本上按预期运行，可能需要进行更改。

执行迁移前，请将本地开发计算机更新到较新的运行时版本以及您计划迁移到的平台的其他组件。验证应用程序是否仍按预期运行，并进行必要的代码修复和更改。然后使用以下最佳实践过程将环境安全地迁移到新平台版本。

**将环境迁移到具有主要更新的平台版本**

1. [创建新环境](using-features.environments.md)，使用新的目标平台版本，并将应用程序代码部署到其中。新环境应该在包含您要迁移的环境的 Elastic Beanstalk 应用程序中。此时不要终止现有环境。

1. 使用新环境迁移应用程序。具体而言：
   + 查找并修复在开发阶段未发现的任何应用程序兼容性问题。
   + 确保应用程序使用[配置文件](ebextensions.md)进行的任何自定义都能够在新环境中正常运行。这些可能包括选项设置、其他已安装的包、自定义安全策略以及环境实例上安装的脚本或配置文件。
   + 如果您的应用程序使用自定义 Amazon Machine Image (AMI)，请基于新平台版本的 AMI 创建新的自定义 AMI。要了解更多信息，请参阅“[在 Elastic Beanstalk 环境中使用自定义亚马逊机器映像（AMI）](using-features.customenv.md)”。具体而言，如果您的应用程序使用具有自定义 AMI 的 Windows Server 平台，并且您打算迁移到 Windows Server V2 平台版本，则需要执行此操作。在这种情况下，另请参阅[从 Windows Server 平台更早的主要版本迁移](dotnet-v2migration.md#dotnet-v2migration.migration)。

   迭代测试并部署修复，直至对新环境上的应用程序满意。

1. 通过将新环境的 CNAME 与现有生产环境的 CNAME 交换，将新环境转换为生产环境。有关详细信息，请参阅[使用 Elastic Beanstalk 进行蓝/绿部署](using-features.CNAMESwap.md)。

1. 当您对处于生产模式的新环境状态感到满意之后，终止旧环境。有关详细信息，请参阅[终止 Elastic Beanstalk 环境](using-features.terminating.md)。