

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

# 将应用程序部署到 Elastic Beanstalk 环境
<a name="using-features.deploy-existing-version"></a>

您可以使用 AWS Elastic Beanstalk 控制台上传更新的[源包](applications-sourcebundle.md)并将其部署到您的 Elastic Beanstalk 环境中，或者重新部署之前上传的版本。

每项部署均由部署 ID 标识。部署 IDs 起始于，每次部署`1`和实例配置更改都会增加一个。如果您启用了[增强型运行状况报告](health-enhanced.md)，则 Elastic Beanstalk 会在报告实例运行状况时，同时在[运行状况控制台](health-enhanced-console.md)和 [EB CLI](health-enhanced-ebcli.md) 中显示部署 ID。滚动更新失败时，部署 ID 帮助您确定环境的状态。

Elastic Beanstalk 提供了多种部署策略和设置。有关配置策略和附加设置的详细信息，请参阅[部署策略和设置](using-features.rolling-version-deploy.md)。下表列出了支持这些设置的策略和环境类型。


**支持的部署策略**  

| 部署策略 | 负载均衡环境 | 单实例环境 | 传统 Windows Server 环境† | 
| --- | --- | --- | --- | 
|  **一次部署全部**  |   ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是  |   ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是  |   ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是  | 
|  **滚动**  |   ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是  |   ![No](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-no.png) 否  |   ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是  | 
|  **附加批次滚动部署**  |   ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是  |   ![No](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-no.png) 否  |   ![No](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-no.png) 否  | 
|  **不可变的**  |   ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是  |   ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是  |   ![No](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-no.png) 否  | 
|  **流量拆分**  |   ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 (Application Load Balancer)  |   ![No](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-no.png) 否  |   ![No](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-no.png) 否  | 

† 在此表中，*传统 Windows Server 环境* 是一个基于 [Windows Server 平台配置](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.net)的环境，所使用的 IIS 版本早于 IIS 8.5。

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

## 选择部署策略
<a name="deployments-scenarios"></a>

为您的应用程序选择正确的部署策略时，需要权衡一些考虑因素，并且根据您的特定需求而定。[部署策略和设置](using-features.rolling-version-deploy.md)页面包含有关每个策略的更多信息，以及其中一些策略的工作方式的详细说明。

以下列表提供了有关不同部署策略的概要信息，并增加了相关注意事项。
+ **一次部署全部** – 最快的部署方法。如果您可以接受短期服务停机，并且快速部署对您非常重要，则这种方式适合您。使用此方法，Elastic Beanstalk 会将新的应用程序版本部署到每个实例。然后，可能需要重新启动 Web 代理或应用程序服务器。因此，用户可能会在短时间内无法使用您的应用程序（或可用性很低）。
+ **滚动部署** – 可避免停机时间，并最大限度地减少对可用性的影响，但代价是部署时间会比较长。如果您无法接受服务在任何时间内完全停机，则这种方式适合您。使用此方法，您的应用程序一次会将一批实例部署到您的环境中。在整个部署过程中，大多数带宽都会保留。
+ **附加批次滚动部署** – 可避免任何可用性降低的情况，代价是与*滚动部署* 方法相比，部署时间甚至会更长。适用于在整个部署过程中必须保留相同带宽的情况。使用此方法，Elastic Beanstalk 会启动额外的实例批次，然后执行滚动部署。启动额外的批次需要花费时间，并确保在整个部署过程中保留相同的带宽。
+ **不可变的** – 一种较慢的部署方法，可确保您的新应用程序版本始终部署到新实例，而不是更新现有实例。它还有在部署失败时可快速安全回滚的额外优势。使用此方法，Elastic Beanstalk 会执行[不可变的更新](environmentmgmt-updates-immutable.md)来部署您的应用程序。在不可变更新中，环境中将启动第二个 Auto Scaling 组，新版本与旧版本一起为流量提供服务，直至新实例通过运行状况检查。
+ **流量拆分** – 一种 Canary 测试部署方法。如果您希望使用传入流量的一部分来测试新应用程序版本的运行状况，同时保留旧应用程序版本提供的其余流量，则这种方式适合您。

下表比较了部署方法属性。


**部署方法**  

| ** 方法** | **部署失败带来的影响** | **部署时间** | **零停机时间** | **无 DNS 更改** | **回滚过程** | **代码部署到** | 
| --- | --- | --- | --- | --- | --- | --- | 
| 一次部署全部 | 停机时间 | ![Deployment time: 1 of 4 (fastest).](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png) |  ![No](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-no.png) 否 |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 | 手动重新部署 | 现有实例 | 
| 滚动 | 单个批次服务中断；任何在故障之前成功的批次将运行新应用程序版本 | ![Deployment time: 2 of 4 (moderate).](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)† |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 | 手动重新部署 | 现有实例 | 
| 附加批次滚动部署 | 如果第一个批次失败，则影响最小；否则类似于滚动 | ![Deployment time: 3 of 4 (slower).](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)† |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 | 手动重新部署 | 新实例和现有实例 | 
| 不可变的 | Minimal | ![Deployment time: 4 of 4 (slowest).](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png) |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 | 终止新实例 | 新实例 | 
| 流量拆分 | 路由到新版本的客户端流量的百分比会临时受到影响 | ![Deployment time: 4 of 4 (slowest).](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)†† |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 | 重新路由流量并终止新实例 | 新实例 | 
| 蓝/绿 | Minimal | ![Deployment time: 4 of 4 (slowest).](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png)![Circular icon with a clock face, indicating time-related functionality or waiting period.](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/clock.png) |  ![Yes](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-yes.png) 是 |  ![No](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/icon-no.png) 否 | 交换 URL | 新实例 | 

† *根据批次大小而变化。*

†† *因**评估时间**选项设置而异。*

## 部署新应用程序版本
<a name="deployments-newversion"></a>

您可以从环境的控制面板执行部署。

**将新应用程序版本部署到 Elastic Beanstalk 环境**

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

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

1. 选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的表单上传应用程序源代码包。

1. 选择**部署**。

## 重新部署先前版本
<a name="deployments-existingversion"></a>

您也可以从应用程序版本页面将之前上传的应用程序版本部署到其任一环境。

**将现有的应用程序版本部署到现有的环境**

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

1. 在导航窗格中，选择 **Applications**（应用程序），然后从列表中选择应用程序的名称。

1. 在导航窗格中，找到应用程序的名称，然后选择 **Application versions**（应用程序版本）。

1. 选择要部署的应用程序版本。

1. 选择 **Actions**（操作），然后选择 **Deploy**（部署）。

1. 选择环境，然后选择 **Deploy**（部署）。

## 部署您的应用程序的其他方法
<a name="deployments-other"></a>

如果经常部署，可以考虑使用 [Elastic Beanstalk 命令行界面](eb-cli3.md)（EB CLI）管理您的环境。EB CLI 将在随源代码一起创建一个存储库。它还可以创建源代码包，将其上传到 Elastic Beanstalk，然后使用单个命令部署该源代码包。

针对依赖于资源配置更改的部署，或者不能与旧版本一起运行的新版本的部署，您可以使用新版本启动新环境，然后为[蓝/绿部署](using-features.CNAMESwap.md)执行别名记录交换。

要自动执行构建、测试和部署流程，您可以在 Elastic Beanstalk 环境中实施持续集成和持续部署（CI/CD）。有关更多信息，请参阅 [实现与您的 Elastic Beanstalk 环境的 CI/CD 集成](deployments.cicd.md)。