

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

# 配置 Elastic Beanstalk 环境
<a name="customize-containers"></a>

本主题重点介绍 Elastic Beanstalk 控制台中可用的配置选项。 AWS Elastic Beanstalk 提供了多种选项，用于自定义环境中的资源，以及 Elastic Beanstalk 行为和平台设置。

以下主题介绍了如何在控制台中配置您的环境。其中还介绍了与用于配置文件的控制台选项或 API 配置选项相对应的底层命名空间。要了解有关高级配置方法的信息，请参阅 [配置 Elastic Beanstalk 环境（高级）](beanstalk-environment-configuration-advanced.md)。

**Topics**
+ [预置资源](#customize-containers-resources)
+ [使用 Elastic Beanstalk 控制台进行环境配置](environments-cfg-console.md)
+ [你的 Elastic Beanstalk 环境的亚马逊 EC2 实例](using-features.managing.ec2.md)
+ [使用 Auto Scaling 功能自动扩缩 Elastic Beanstalk 环境实例](using-features.managing.as.md)
+ [Elastic Beanstalk 环境的负载均衡器](using-features.managing.elb.md)
+ [将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)
+ [您的 AWS Elastic Beanstalk 环境安全](using-features.managing.security.md)
+ [在 Elastic Beanstalk 环境中标记资源](using-features.tagging.md)
+ [环境变量和其他软件设置](environments-cfg-softwaresettings.md)
+ [使用 Amazon SNS 发送 Elastic Beanstalk 环境通知](using-features.managing.sns.md)
+ [使用 Elastic Beanstalk 配置 Amazon Virtual Private Cloud (Amazon VPC)](using-features.managing.vpc.md)
+ [您的 Elastic Beanstalk 环境的域名](customdomains.md)

## 预置资源
<a name="customize-containers-resources"></a>

当您创建 Web 服务器环境时，Elastic Beanstalk 会创建多个资源来支持应用程序的运行。本章介绍如何为您的 Elastic Beanstalk 环境自定义这些资源。
+ **EC2 实例** – 配置为在您选择的平台上运行 Web 应用程序的 Amazon Elastic Compute Cloud（Amazon EC2）虚拟机。

  各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** - 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。通过此资源，HTTP 流量可以从负载均衡器到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **负载均衡器** – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
+ **负载均衡器安全组** – 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源，HTTP 流量可从 Internet 到达负载均衡器。默认情况下，其他端口不允许流量进入。
+ **Auto Scaling 组** – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控您环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+ **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*
**域安全**  
为增强 Elastic Beanstalk 应用程序的安全性，已将 *elasticbeanstalk.com* 域注册到 [公共后缀列表（PSL）](https://publicsuffix.org/)。  
如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie，我们建议您使用带有前缀 `__Host-` 的 Cookie 来提高安全性。这种做法可以保护您的域免遭跨站点请求伪造（CSRF）攻击。要了解更多信息，请参阅 Mozilla 开发者网络中的 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

# 使用 Elastic Beanstalk 控制台进行环境配置
<a name="environments-cfg-console"></a>

本主题概述了可通过 Elastic Beanstalk 控制台使用的配置选项并说明了如何导航配置页面。

**查看您的环境配置摘要**

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

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

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

## 配置页面
<a name="environments-cfg-console.overview"></a>

**配置概述**页面显示一组配置类别。每个配置类别均由一组相关选项组成。

**服务访问**  
此类别中的选项选择 Elastic Beanstalk 用来管理您的环境的*服务角色*和*EC2 实例配置文件*。（可选）选择一个 EC2 key pair 以安全地登录您的 EC2 实例。

**网络和数据库**  
 此类别中的选项为环境的 EC2 实例和负载均衡器配置 VPC 设置和子网。它们还提供了设置与您的环境集成的 Amazon RDS 数据库的选项。

**实例流量和扩展**  
这些选项可以自定义环境 EC2 实例的容量、扩展和负载平衡。您还可以配置 Elastic Load Balancing 来捕获包含有关发送到负载均衡器的请求的详细信息的日志。

您的 EC2 实例的以下选项也可用于配置：
+ 根卷类型、大小、 input/output 操作速率 (IOPS) 和吞吐量。
+ 启用实例元数据服务（IMDS）。
+ 选择 EC2 安全组来控制实例流量。
+ CloudWatch 指标监控间隔。
+ 指标日志记录的时间间隔。

**更新、监控和日志记录**  
此类别配置以下选项：
+ 环境运行状况报告，包括选择增强型运行状况报告的选项。
+ 托管平台更新，定义 Elastic Beanstalk 何时以及如何将更改部署到环境。
+ 启用 X-Ray 服务来收集有关应用程序行为的数据，以确定问题和优化机会。
+ 平台特定选项，包括代理服务器和操作系统环境属性。

### 浏览配置页面
<a name="environments-cfg-console-navigation"></a>

在配置类别中选择**编辑**以启动关联的配置页面，您可以在其中查看完整选项值并进行更改。

**在配置类别页面中导航**  
使用以下任意操作在配置类别页面中导航：
+ **取消** - 返回**配置**概述页面，无需应用配置更改。在选择**取消**时，控制台将丢失您在任何配置类别中所做的任何待处理更改。

  您还可以通过选择左侧导航页面上的其他项目（如**事件**或**日志**）来取消配置更改。
+ **继续** – 返回**配置概述**页面。然后，您可以继续进行更改或应用待处理更改。
+ **应用** – 将您在任何配置类别中所做的更改应用于您的环境。在某些情况下，系统将提示您确认某个配置决策的结果。

**在**配置**概述页面上导航**  
在配置类别中选择**编辑**以启动相关配置页面，您可以在其中查看完整选项值并进行更改。查看和修改完选项后，您可以从**配置**概述页面中选择以下操作之一：
+ **取消** – 返回环境的控制面板而不应用配置更改。在选择**取消**时，控制台将丢失您在任何配置类别中所做的任何待处理更改。

  您还可以通过选择左侧导航页面上的其他项目（如**事件**或**日志**）来取消配置更改。
+ **检查更改** – 获取您在任何配置类别中所做的所有待处理更改的摘要。有关更多信息，请参阅 [“Review changes (查看更改)”页面](#environments-cfg-console.review)。
+ **Apply changes**（应用更改）– 将您在任何配置类别中所做的更改应用于您的环境。在某些情况下，系统将提示您确认某个配置决策的结果。

## “Review changes (查看更改)”页面
<a name="environments-cfg-console.review"></a>

**检查更改**页面显示一个表，其中显示您在任何配置类别中所做的所有待处理选项更改（尚未应用于您的环境）。

表会以**命名空间**和**选项**的组合形式列出每个选项，Elastic Beanstalk 使用该组合来标识选项。有关更多信息，请参阅 [配置选项](command-options.md)。

![\[在 Elastic Beanstalk 控制台的配置页面中查看更改\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environments-cfg-console-review-new-console.png)


查看完更改后，您可以选择以下任一操作：
+ **继续** – 返回**配置概述**页面。然后，您可以继续进行更改或应用待处理更改。
+ **Apply changes**（应用更改）– 将您在任何配置类别中所做的更改应用于您的环境。在某些情况下，系统将提示您确认某个配置决策的结果。

# 你的 Elastic Beanstalk 环境的亚马逊 EC2 实例
<a name="using-features.managing.ec2"></a>

本主题介绍影响您的 Elastic Beanstalk 环境的亚马逊 EC2 实例和配置选项。

创建 Web 服务器环境时， AWS Elastic Beanstalk 会创建一个或多个亚马逊弹性计算云 (Amazon EC2) 虚拟机，称为*实例*。

配置环境中的实例以便在您选择的平台上运行 Web 应用程序。您可以在创建环境时或在环境运行之后对环境实例的各种属性和行为进行更改。或者，您也可以通过修改部署到环境的源代码来进行这些更改。有关更多信息，请参阅 [配置选项](command-options.md)。

**注意**  
您环境中的 A [uto Scaling 组](using-features.managing.as.md)管理运行您的应用程序的 Amazon EC2 实例。当您根据本主题下的说明更改配置时，启动配置也会随之更改。启动配置可以是 Amazon EC2 启动模板或 Auto Scaling 群组启动配置资源。此更改需要[替换所有实例](environments-updating.md)。它还会触发[滚动更新](using-features.rollingupdates.md)或[不可变更新](environmentmgmt-updates-immutable.md)，具体视配置而定。

**EC2 实例购买选项**  
Elastic Beanstalk 支持 EC2 [多种](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html)亚马逊实例购买选项：
+ **按需**-*按需实例*是一种 pay-as-you-go资源，使用时无需长期承诺。
+ **预留** — *预留实例*是对环境中的匹配按需型实例自动应用的预购账单折扣。
+ **竞**价 — *竞价型实例*是一种未使用的 Amazon EC2 实例，其可用价格低于按需价格。您可以在环境中启用并配置竞价型实例的分配。有关更多信息，请参阅 [使用 Auto Scaling 功能自动扩缩 Elastic Beanstalk 环境实例](using-features.managing.as.md)。

**Topics**
+ [Amazon EC2 实例类型](using-features.managing.ec2.instance-types.md)
+ [使用 Elastic Beanstalk 控制台配置亚马逊 EC2 实例](using-features.managing.ec2.console.md)
+ [管理 EC2 安全组](using-features.managing.ec2.instances.sg.md)
+ [使用配置 Amazon EC2 安全组和实例类型 AWS CLI](using-features.managing.ec2.aws-cli.md)
+ [使用命名空间选项配置 Amazon EC2 实例](using-features.managing.ec2.namespace.md)
+ [在 Elastic Beanstalk 环境的实例上配置 IMDS](environments-cfg-ec2-imds.md)

# Amazon EC2 实例类型
<a name="using-features.managing.ec2.instance-types"></a>

本主题解释了*实例类型*一词。当您创建新环境时，Elastic Beanstalk EC2 会根据 EC2 您选择的亚马逊实例类型配置*亚马逊*实例。您选择的实例类型决定了运行您的实例的主机硬件。 EC2 实例类型可以按每种处理器架构所基于的处理器架构进行分类。Elastic Beanstalk 支持基于以下处理器 AWS 架构的实例类型：Graviton 64 位 Arm 架构 (arm64)、64 位架构 (x86) 和 32 位架构 (i386)。默认情况下，创建新环境时，Elastic Beanstalk 会选择 x86 处理器架构。

**注意**  
大多数 Elastic Beanstalk 平台都不再支持 i386 32 位架构。我们建议您选择 x86 或 arm64 架构类型代替。Elastic Beanstalk 为 [`aws:ec2:instances`](command-options-general.md#command-options-general-ec2instances) 命名空间中的 i386 处理器实例类型提供[配置选项](command-options.md)。

指定 Elastic Beanstalk 环境配置中的所有实例类型必须具有相同类型的处理器架构。假设您将新实例类型添加到已经具有 t2.medium 实例类型（基于 x86 架构）的现有环境。您只能添加相同架构的其他实例类型，例如 t2.small。如果想要使用不同架构的实例类型替换现有的实例类型，则可以这样做。但请确保命令中的所有实例类型都基于相同类型的架构。

在亚马逊推出新的兼容实例类型之后，Elastic Beanstalk 会定期增加对这些实例类型的支持。 EC2 有关可用实例类型的信息，请参阅 *Amazon EC2 用户指南*中的[实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。

**注意**  
Elastic Beanstalk 现在在所有支持 Graviton 的地区的所有最新亚马逊 Linux 2 平台上都支持 Graviton。 AWS 有关使用基于 arm64 的实例类型创建 Elastic Beanstalk 环境的更多信息，请参阅 [使用 Elastic Beanstalk 控制台配置亚马逊 EC2 实例](using-features.managing.ec2.console.md)。  
使用 Elastic Beanstalk 中的[部署选项](using-features.deploy-existing-version.md)，创建在 arm64 架构上运行 Amazon EC2 实例的新环境，并将您的现有应用程序迁移到这些环境。  
  
要了解有关基于 Graviton arm64 的处理器的更多信息，请参阅以下资源： AWS   
优点 — [AWS Graviton 处理器](https://aws.amazon.com/ec2/graviton/) 
*入门*和其他主题，例如*特定语言的注意事项 — Grav* it [on 入门文章 AWS](https://github.com/aws/aws-graviton-getting-started#getting-started-with-aws-graviton) GitHub 

# 使用 Elastic Beanstalk 控制台配置亚马逊 EC2 实例
<a name="using-features.managing.ec2.console"></a>

您可以在 Elastic Beanstalk 控制台中创建或修改 Elastic Beanstalk 环境 EC2 的亚马逊实例配置。

**注意**  
尽管 Elastic Beanstalk 控制台不提供更改现有环境处理器架构的选项，但您可以使用 AWS CLI进行更改。有关示例命令，请参阅 [使用配置 Amazon EC2 安全组和实例类型 AWS CLI](using-features.managing.ec2.aws-cli.md)。

**在创建环境期间在 Elastic Beanstalk 控制台中配置亚马逊 EC2 实例**

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

1. 在导航窗格中，选择**环境**。

1. 选择 [Create a new environment (创建新环境)](environments-create-wizard.md) 以开始创建环境。

1. 在向导的主页上，在选择**创建环境**之前，选择**配置更多选项**。

1. 在 **Instances (实例)** 配置类别中，选择 **Edit (编辑)**。对此类别中的设置进行更改，然后选择**应用**。有关设置说明，请参阅本页上的[实例类别设置](#using-features.managing.ec2.console.instances)部分。

1. 在 **Capacity**（容量）配置类别中，选择 **Edit**（编辑）。对此类别中的设置进行更改，然后选择**继续**。有关设置说明，请参阅本页上的[容量类别设置](#using-features.managing.ec2.console.capacity)部分。
**选择处理器架构**  
向下滚动到**处理器**，为您的 EC2 实例选择处理器架构。控制台列出您之前在 **Create environment**（创建环境）面板中所选平台支持的处理器架构。  
如果您没有看到所需的处理器架构，请返回配置类别列表选择支持该架构的平台。从 **Modify Capacity**（修改容量）面板，选择 **Cancel**（取消）。然后，选择 **Change platform version**（更改平台版本）选择新的平台设置。接下来，在 **Capacity**（容量）配置类别中选择 **Edit**（编辑）以再次查看处理器架构选择。  

![\[运行环境的 Elastic Beanstalk 容量配置窗口上的亚马逊 EC2 实例设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-env-config-ec2-capacity-create-env-page.png)


1. 选择**保存**，然后进行您的环境所需的任何其他配置更改。

1. 选择**创建环境**。







**在 Elastic Beanstalk 控制台中配置运行环境的亚马逊 EC2 实例**

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

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

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

1. 在 **Instances (实例)** 配置类别中，选择 **Edit (编辑)**。对此类别中的设置进行更改，然后选择**应用**。有关设置说明，请参阅本页上的[实例类别设置](#using-features.managing.ec2.console.instances)部分。

1. 在 **Capacity**（容量）配置类别中，选择 **Edit**（编辑）。对此类别中的设置进行更改，然后选择**继续**。有关设置说明，请参阅本页上的[容量类别设置](#using-features.managing.ec2.console.capacity)部分。

## 实例类别设置
<a name="using-features.managing.ec2.console.instances"></a>

实例配置类别中提供了以下与 Amazon EC2 **实例**相关的设置。

**Topics**
+ [监控间隔](#using-features.managing.ec2.monitoring-interval)
+ [根卷（启动设备）](#using-features.managing.ec2.rootvolume)
+ [实例元数据服务](#using-features.managing.ec2.imds)
+ [EC2 安全组](#using-features.managing.ec2.securitygroups)

![\[Elastic Beanstalk EC2 实例配置窗口中的亚马逊实例设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-env-config-ec2-instances-page.png)


### 监控间隔
<a name="using-features.managing.ec2.monitoring-interval"></a>

默认情况下，您环境中的实例每隔五分钟向 Amazon CloudWatch 发布[基本运行状况指标](using-features.healthstatus.md)，无需支付额外费用。

要获得更详细的报告，您可以将**监控间隔**设置为 **1 分钟**，以提高环境中资源发布[基本运行状况指标](using-features.healthstatus.md#monitoring-basic-cloudwatch) CloudWatch 的频率。 CloudWatch 服务费适用于一分钟间隔指标。有关更多信息，请参阅 [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/)。

### 根卷（启动设备）
<a name="using-features.managing.ec2.rootvolume"></a>

您的环境中的每个实例都配置了根卷。根卷是附加到实例的 Amazon EBS 块设备，用于存储操作系统、库、脚本以及您的应用程序源代码。默认情况下，所有平台为存储使用通用 SSD 块储存设备。

您可以修改**根卷类型**来使用机械硬盘存储或者预配置的 IOPS SSD 卷类型，并可根据需要增加卷大小。对于预配置 IOPS 卷，您还必须选择要预配置的 **IOPS** 数量。**吞吐量**仅适用于 gp3 固态硬盘卷类型。您可以输入要预置的所需吞吐量。它的范围可以在每秒 125 到 1000 兆字节 (MiB/s) 之间。选择能满足您的性能和价格要求的卷类型。

**重要**  
`RootVolumeType` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

有关更多信息，请参阅[亚马逊 EC2 用户指南中的亚马逊 EBS 卷类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)*和亚马逊* [EBS 产品](https://aws.amazon.com/ebs/details/)详情。

### 实例元数据服务
<a name="using-features.managing.ec2.imds"></a>

实例元数据服务（IMDS）是实例上的组件，在实例上进行编码，用于安全访问实例元数据。代码可以使用两种方法之一，从正在运行的实例访问实例元数据。它们是实例元数据服务版本 1 (IMDSv1) 或实例元数据服务版本 2 (IMDSv2)。 IMDSv2 更安全。禁用 IMDSv1 以强制执行 IMDSv2。有关更多信息，请参阅 [在 Elastic Beanstalk 环境的实例上配置 IMDS](environments-cfg-ec2-imds.md)。

**注意**  
此配置页面上的 IMDS 部分仅针对支持的 IMDSv2平台版本显示。

### EC2 安全组
<a name="using-features.managing.ec2.securitygroups"></a>

附加到您实例的安全组决定允许哪些流量到达和离开实例。

Elastic Beanstalk 创建的默认 EC2 安全组允许所有来自互联网或负载均衡器的传入流量通过 HTTP (80) 和 SSH (22) 的标准端口。您也可以定义自己的自定义安全组来为 EC2 实例指定防火墙规则。安全组可以允许来自其他端口或其他来源的流量。例如，您可以为 SSH 访问创建安全组，允许来自限定 IP 地址范围的端口 22 上的入站流量。或者，为了增强安全性，您可以创建一个只允许来自于您有权访问的堡垒主机的流量。

您可以通过将[aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration)命名空间中的`DisableDefaultEC2SecurityGroup`选项设置为，选择退出默认 EC2 安全组`true`。此选项在控制台中不可用，但您可以使用 AWS CLI对其进行设置。有关更多信息，请参阅 [管理 EC2 安全组](using-features.managing.ec2.instances.sg.md)。

有关亚马逊 EC2 安全组的更多信息，请参阅[亚马逊* EC2 用户指南中的亚马逊 EC2 *安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)。

**注意**  
要允许环境 A 的实例与环境 B 的实例之间的流量，可向 Elastic Beanstalk 附加到环境 B 的安全组中添加一个规则。然后，您可以指定 Elastic Beanstalk 附加到环境 A 的安全组。这样就允许入站流量流入或出站流量流出环境 A 的实例。但是，这样做会在两个安全组之间建立依赖关系。如果之后尝试终止环境 A，Elastic Beanstalk 将无法删除该环境的安全组，因为环境 B 的安全组依赖于它。  
因此，我们建议您首先创建单独的安全组。然后，将该安全组附加到环境 A，并在环境 B 的安全组规则中指定该组。

## 容量类别设置
<a name="using-features.managing.ec2.console.capacity"></a>

**容量**配置类别中提供了以下与 Amazon EC2 实例相关的设置。

**Topics**
+ [实例类型](#using-features.managing.ec2.instancetypes)
+ [AMI ID](#using-features.managing.ec2.customami)

![\[Elastic Beanstalk 容量配置窗口上用于创建环境的亚马逊 EC2 实例设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-env-config-ec2-capacity-page2.png)


### 实例类型
<a name="using-features.managing.ec2.instancetypes"></a>

**实例类型**设置决定了为运行您的应用程序而启动的 Amazon EC2 实例的类型。此配置页面显示**实例类型**的列表。您可以选择一种或多种实例类型。Elastic Beanstalk 控制台仅显示基于为您的环境配置的处理器架构的实例类型。因此，您只能添加相同处理器架构的实例类型，

**注意**  
尽管 Elastic Beanstalk 控制台不提供更改现有环境处理器架构的选项，但您可以使用 AWS CLI进行更改。有关示例命令，请参阅 [使用配置 Amazon EC2 安全组和实例类型 AWS CLI](using-features.managing.ec2.aws-cli.md)。

选择充分配置的实例来运行具有高负载的应用程序，但配置不要过高以至于大部分时间空闲。对于开发用途，t2 系列的实例提供了中等处理能力，能够在短时间内突增。对于大规模、需要高可用性的应用程序，使用实例池来确保单个实例出现故障时，容量不会受到显著影响。首先使用您在正常时间的中等负载下用来运行五个实例的实例类型。如果任何实例失败，剩下实例可以接管剩余流量。通过容量缓冲区，当流量在高峰时间增长时，环境还可以扩展。

有关亚马逊 EC2 实例系列和类型的更多信息，请参阅*亚马逊 EC2 用户指南*中的[实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。要确定哪些实例类型符合您的要求及其支持的区域，请参阅 *Amazon EC2 用户指南*中的[可用实例类型](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes)。

### AMI ID
<a name="using-features.managing.ec2.customami"></a>

亚马逊系统映像 (AMI) 是 Elastic Beanstalk 用来在您的环境中 EC2 启动亚马逊实例的亚马逊 Linux 或 Windows 服务器计算机映像。Elastic Beanstalk 提供包含运行您的应用程序所需的工具和资源的系统映像。

Elastic Beanstalk 基于您选择的区域、平台版本和处理器架构选择适用于您的环境的默认 AMI。如果您创建了[自定义 AMI](using-features.customenv.md)，则使用自己的默认自定义 AMI ID 替换默认 AMI ID。

# 管理 EC2 安全组
<a name="using-features.managing.ec2.instances.sg"></a>

Elastic Beanstalk 在创建环境时会为随该环境一同启动的 EC2 实例分配一个默认安全组。附加到您实例的安全组决定允许哪些流量到达和离开实例。

Elastic Beanstalk 创建的默认 EC2 安全组允许来自互联网或负载均衡器的所有传入流量通过 HTTP（80）和 SSH（22）的标准端口。您也可以定义自己的自定义安全组来指定 EC2 实例的防火墙规则。安全组可以允许来自其他端口或其他来源的流量。例如，您可以为 SSH 访问创建安全组，允许来自限定 IP 地址范围的端口 22 上的入站流量。或者，为了增强安全性，您可以创建一个只允许来自于您有权访问的堡垒主机的流量。

您可以通过将 [aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration) 命名空间中的 `DisableDefaultEC2SecurityGroup` 选项设置为 `true`，让环境不使用默认的 EC2 安全组。使用 [AWS CLI](using-features.managing.ec2.aws-cli.md) 或配置文件将此选项应用于环境并将自定义安全组附加到 EC2 实例。

## 管理多实例环境中的 EC2 安全组
<a name="using-features.managing.ec2.instances.sg.load-balancer-security"></a>

如果在多实例环境中创建自定义 EC2 安全组，您还必须考虑负载均衡器和传入流量规则如何确保实例的安全性和可访问性。

流入具有多个 EC2 实例的环境的流量由负载均衡器管理，该[负载均衡器](using-features.managing.elb.md)会将传入流量定向到所有 EC2 实例。当 Elastic Beanstalk 创建默认 EC2 安全组时，它同时会定义入站规则，允许来自负载均衡器的传入流量。如果安全组中没有此入站规则，则不允许传入流量进入实例。此条件本质上是阻止实例接收外部请求。

如果您为负载均衡环境禁用默认 EC2 安全组，Elastic Beanstalk 会验证某些配置规则。如果配置不符合验证检查，则 Elastic Beanstalk 会发出消息，指示您提供所需的配置。验证检查如下：
+ 根据负载均衡器的类型（应用程序负载均衡器或经典负载均衡器），必须使用 [aws:elbv2:loadbalancer](command-options-general.md#command-options-general-elbv2) 或 [aws:elb:loadbalancer](command-options-general.md#command-options-general-elbloadbalancer) 的 `SecurityGroups` 选项向负载均衡器分配至少一个安全组。有关 AWS CLI 示例，请参阅[使用 AWS CLI进行配置](using-features.managing.ec2.aws-cli.md)。
+ 必须存在允许 EC2 实例接收来自负载均衡器的流量的入站流量规则。EC2 安全组和负载均衡器安全组都必须引用这些入站规则。有关更多信息，请参阅下面的[流量的入站规则](#using-features.managing.ec2.instances.sg.load-balancer-security.rules)部分。

### 流量的入站规则
<a name="using-features.managing.ec2.instances.sg.load-balancer-security.rules"></a>

多实例环境的 EC2 安全组必须包含引用负载均衡器安全组的入站规则。这适用于具有任何类型的负载均衡器（专用或共享）以及自定义或默认负载均衡器安全组的环境。

您可以在 EC2 控制台中查看连接到环境组件的所有安全组。下图展示了 EC2 控制台中的列表，其中列出了 Elastic Beanstalk 在创建环境操作期间默认创建的安全组。

**安全组**屏幕展示了环境及其关联的安全组。*GettingStarted-env 和 *GettingStarted3-env** 都是带有专用负载均衡器的多实例环境。这其中的每个环境都列出了两个安全组，一个用于 EC2 实例，另一个用于负载均衡器。Elastic Beanstalk 在创建环境时会创建这些安全组。 *GettingStarted5-env* 没有负载均衡器安全组，因为它只有一个 EC2 实例，因此没有负载均衡器。

**入站规则**屏幕向下钻取 *GettingStarted3-en* v 实例的 EC2 安全组。此示例展示了定义 EC2 安全组的入站规则。请注意，*入站规则*中的*来源*列中列出了上图中列出的负载均衡器安全组的安全组 ID。此规则允许 *GettingStarted3-env* 的 EC2 实例在端口 80 上接收来自该特定负载均衡器的入站流量。

![\[Amazon EC2 控制台显示了每个环境的 Elastic Beanstalk 安全组。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-env-config-ec2-ec2console-sg-to-rule.png)






有关更多信息，请参阅《Amazon EC2 用户指南》**中的[更改实例的安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/changing-security-group.html)和[弹性负载均衡](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html#sg-rules-elb)。

# 使用配置 Amazon EC2 安全组和实例类型 AWS CLI
<a name="using-features.managing.ec2.aws-cli"></a>

您可以使用 AWS 命令行界面 (AWS CLI) 在 Elastic Beanstalk 环境中配置 Amazon EC2 实例。

## 使用配置 EC2 安全组 AWS CLI
<a name="using-features.managing.ec2.aws-cli.security-groups"></a>

本主题提供了单实例和负载均衡（多实例）环境的不同 EC2 安全组配置示例。有关这些示例中选项的更多信息，请参阅 [aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration)。

**注意**  
默认情况下，创建环境操作会提供一个 EC2 安全组。它还会默认创建一个具有应用程序负载均衡器的环境。  
更新环境操作可用于通过布尔选项 `DisableDefaultEC2SecurityGroup` 为环境禁用或启用默认的 EC2 安全组。*示例 5* 展示了如何将环境设置回默认安全配置（如果您之前曾对其修改过）。

以下示例展示了选择不使用默认 EC2 安全组而改为提供自定义安全组的 [create-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-environment.html) 命令。由于 `DisableDefaultEC2SecurityGroup` 选项设置为 `true`，因此不会创建 Elastic Beanstalk 通常与 EC2 实例关联的默认 EC2 安全组。因此，您必须为其他安全组提供 `SecurityGroups` 选项。

请注意，[aws:elasticbeanstalk:environment](command-options-general.md#command-options-general-elasticbeanstalkenvironment) `EnvironmentType` 选项设置为 `SingleInstance`。若要创建单实例环境，由于 `LoadBalanced` 是默认的 `EnvironmentType`，因此必须指定此选项。由于此环境不包含负载均衡器，我们无需指定负载均衡器安全组。

**Example 1：带有自定义 EC2 安全组的新单实例环境（命名空间选项内联）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2023 v6.5.0 applrunning Node.js 22" \
--option-settings \
Namespace=aws:elasticbeanstalk:environment,OptionName=EnvironmentType,Value=SingleInstance \
Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role \
Namespace=aws:autoscaling:launchconfiguration,OptionName=DisableDefaultEC2SecurityGroup,Value=true \
Namespace=aws:autoscaling:launchconfiguration,OptionName=SecurityGroups,Value=sg-abcdef01, sg-abcdef02 \
Namespace=aws:autoscaling:launchconfiguration,OptionName=EC2KeyName,Value=my-keypair
```





作为替代方法，请使用 `options.json` 文件来指定命名空间选项，而不是将其内联。

**Example 2：带有自定义 EC2 安全组的新单实例环境（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 22" \
--option-settings file://options.json
```

**Example**  

```
### example options.json ###
[
  { "Namespace" : "aws:elasticbeanstalk:environment", 
    "OptionName" : "EnvironmentType", 
    "Value" : "SingleInstance" 
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "IamInstanceProfile",
    "Value": "aws-elasticbeanstalk-ec2-role"
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "DisableDefaultEC2SecurityGroup",
    "Value": "true"
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "SecurityGroups",
    "Value": "sg-abcdef01, sg-abcdef02"
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "EC2KeyName",
    "Value": "my-keypair"
  }
]
```

以下示例创建了一个负载均衡环境。其指定了 [aws:elasticbeanstalk:environment](command-options-general.md#command-options-general-elasticbeanstalkenvironment) 命名空间选项，并将 `LoadBalancerType` 设置为 `application`。由于我们使用 `DisableDefaultEC2SecurityGroup` 选项禁用默认的 EC2 安全组，因此需要像前一个示例一样，再次使用 [aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration) `SecurityGroups` 选项为 EC2 实例提供自定义安全组。由于此环境具有用于路由流量的负载均衡器，因此我们还必须为负载均衡器提供安全组。

若要创建具有经典负载均衡器但其他配置相同的环境，请将 [aws:elasticbeanstalk:environment](command-options-general.md#command-options-general-elasticbeanstalkenvironment) 命名空间选项 `LoadBalancerType` 的配置更新为 `classic`。

不同的负载均衡器类型具有不同的命名空间，命名空间中包含用于指定安全组的选项：


+ 应用程序负载均衡器：[aws:elbv2:loadbalancer](command-options-general.md#command-options-general-elbv2) `SecurityGroups` 选项
+ 经典负载均衡器：[aws:elb:loadbalancer](command-options-general.md#command-options-general-elbloadbalancer) `SecurityGroups` 选项
+ 网络负载均衡器：由于网络负载均衡器没有安全组，因此请使用 VPC 标识符来配置 EC2 安全组。有关更多信息，请参阅《User Guide for Network Load Balancers》** 中的 [Update the security groups for your Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-security-groups.html)。

**Example 3：带有自定义 EC2 安全组的新多实例环境（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 22" \
--option-settings file://options.json
```

**Example**  

```
### example options.json ###
[
  { 
    "Namespace" : "aws:elasticbeanstalk:environment", 
    "OptionName" : "EnvironmentType", 
    "Value" : "LoadBalanced" 
  },
  { 
  "Namespace" : "aws:elasticbeanstalk:environment",
    "OptionName" : "LoadBalancerType",
    "Value" : "application"
  },
  {
    "Namespace" : "aws:elbv2:loadbalancer",
    "OptionName" : "SecurityGroups",
    "Value" : "sg-abcdefghikl012345"
  }, 
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "IamInstanceProfile",
    "Value": "aws-elasticbeanstalk-ec2-role"
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "DisableDefaultEC2SecurityGroup",
    "Value": "true"
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "SecurityGroups",
    "Value": "sg-abcdef01, sg-abcdef02"
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "EC2KeyName",
    "Value": "my-keypair"
  }
]
```

您可以使用 [update-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令为现有环境禁用默认 EC2 安全组。以下示例命令禁用了默认 EC2 安全组，并为环境的 EC2 实例分配了自定义 EC2 安全组。

根据环境是否应用了负载均衡以及负载均衡器的类型使用示例 4（a）、4（b）或 4（c）中的示例 `options.jason` 文件。配置文件 4（a）为单实例环境指定安全组。由于单实例环境不需要负载均衡器，因此我们仅为 EC2 实例提供了安全组。配置文件 4（b）和 4（c）为应用程序负载均衡器和经典负载均衡器指定安全组。对于这些使用案例，我们还需要为负载均衡器指定安全组。

**Example 4：更新现有环境以禁用默认的 EC2 安全组（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk update-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 22" \
--option-settings file://options.json
```

**Example 4（a）：单实例环境的配置文件（无负载均衡器）**  

```
### example options.json ###
[
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "DisableDefaultEC2SecurityGroup",
    "Value": "true"
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "SecurityGroups",
    "Value": "sg-abcdef01, sg-abcdef02"
  }
]
```

若要更新使用应用程序负载均衡器的环境，请使用 `aws:elbv2:loadbalancer` 命名空间为负载均衡器指定安全组。

**Example 4（b）：带有应用程序负载均衡器的环境的配置文件**  

```
### example options.json ###
[
  {
    "Namespace" : "aws:elbv2:loadbalancer",
    "OptionName" : "SecurityGroups",
    "Value" : "sg-abcdefghikl012345"
  }, 
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "DisableDefaultEC2SecurityGroup",
    "Value": "true"
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "SecurityGroups",
    "Value": "sg-abcdef01, sg-abcdef02"
  }
]
```

若要更新使用经典负载均衡器的环境，请使用 `aws:elb:loadbalancer` 命名空间为负载均衡器指定安全组。

**Example 4（c）：使用经典负载均衡器的环境的配置文件**  

```
### example options.json ###
[
  {
    "Namespace" : "aws:elb:loadbalancer",
    "OptionName" : "SecurityGroups",
    "Value" : "sg-abcdefghikl012345"
  }, 
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "DisableDefaultEC2SecurityGroup",
    "Value": "true"
  },
  {
    "Namespace": "aws:autoscaling:launchconfiguration",n
    "OptionName": "SecurityGroups",
    "Value": "sg-abcdef01, sg-abcdef02"
  }
]
```

若要使用由 Elastic Beanstalk 分配的默认安全组将环境恢复为默认行为和配置，请使用 [update-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令将 `DisableDefaultEC2SecurityGroup` 设置为 `false`。对于多实例环境，Elastic Beanstalk 还会处理环境负载均衡器的安全组和网络流量规则。

以下示例适用于单实例或多实例（负载均衡）环境：

**Example 5：将环境更新回使用默认安全组（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk update-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 22" \
--option-settings file://options.json
```

**Example**  

```
### example options.json ###
[
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "DisableDefaultEC2SecurityGroup",
    "Value": "false"
  }
]
```

## 使用 EC2 配置实例类型 AWS CLI
<a name="using-features.managing.ec2.aws-cli.instance-types"></a>

本主题演示了在环境中配置 EC2 实例的实例类型的示例。

前两个示例创建新环境。该命令指定基于 arm64 处理器架构的 Amazon EC2 实例类型 t4g.mall。Elastic Beanstalk 基于区域、平台版本和实例类型确定 EC2 实例的默认镜像 ID (AMI)。实例类型对应于处理器架构。`solution-stack-name` 参数适用于平台版本。

**Example 1 — 创建一个新的基于 arm64 的环境（命名空间选项内联）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2 v3.4.7 running Docker" \
--option-settings \
Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role \
Namespace=aws:ec2:instances,OptionName=InstanceTypes,Value=t4g.small
```



作为替代方法，请使用 `options.json` 文件来指定命名空间选项，而不是将其内联。

**Example 2 — 创建一个新的基于 arm64 的环境（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2 v3.4.7 running Docker" \
--option-settings file://options.json
```

**Example**  

```
### example options.json ###
[
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "IamInstanceProfile",
    "Value": "aws-elasticbeanstalk-ec2-role"
  },
  {
    "Namespace": "aws:ec2:instances",
    "OptionName": "InstanceTypes",
    "Value": "t4g.small"
  }
]
```





接下来的两个示例使用 [update-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令更新现有环境的配置。在本例中，我们添加了也基于 arm64 处理器架构的另一种实例类型。对于现有环境，添加的所有实例类型必须具有相同的处理器架构。如果想要使用不同架构的实例类型替换现有的实例类型，则可以这样做。但请确保命令中的所有实例类型都具有相同类型的架构。

**Example 3 — 更新现有的基于 arm64 的环境（命名空间选项内联）**  

```
aws elasticbeanstalk update-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2 v3.4.7 running Docker" \
--option-settings \
Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role \
Namespace=aws:ec2:instances,OptionName=InstanceTypes,Value=t4g.small,t4g.micro
```



作为替代方法，请使用 `options.json` 文件来指定命名空间选项，而不是将其内联。

**Example 4 — 更新现有的基于 arm64 的环境（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk update-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2 v3.4.7 running Docker" \
--option-settings file://options.json
```

**Example**  

```
### example options.json ###
[
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "IamInstanceProfile",
    "Value": "aws-elasticbeanstalk-ec2-role"
  },
  {
    "Namespace": "aws:ec2:instances",
    "OptionName": "InstanceTypes",
    "Value": "t4g.small, t4g.micro"
  }
]
```





接下来的两个示例显示了更多 [create-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-environment.html) 命令。这些示例不提供 `InstanceTypes` 的值。未指定 `InstanceTypes` 值时，Elastic Beanstalk 默认使用基于 x86 的处理器架构。环境的 EC2 实例的镜像 ID (AMI) 将基于区域、平台版本和默认实例类型确定默认值。实例类型对应于处理器架构。

**Example 5 — 创建一个新的基于 x86 的环境（命名空间选项内联）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2 v3.4.7 running Docker" \
--option-settings \
Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role
```



作为替代方法，请使用 `options.json` 文件来指定命名空间选项，而不是将其内联。

**Example 6 — 创建一个新的基于 x86 的环境（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2 v3.4.7 running Docker" \
--option-settings file://options.json
```

**Example**  

```
### example options.json ###
[
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "IamInstanceProfile",
    "Value": "aws-elasticbeanstalk-ec2-role"
  }
]
```

# 使用命名空间选项配置 Amazon EC2 实例
<a name="using-features.managing.ec2.namespace"></a>

您可以使用 `aws:autoscaling:launchconfiguration` 命名空间中的[配置选项](command-options.md)来配置您的环境的实例，其中包括未在控制台中提供的附加选项。

**重要**  
`DisableIMDSv1`、`RootVolumeType` 或 `BlockDeviceMappings` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

以下[配置文件](ebextensions.md)示例使用本主题中介绍的基本配置选项。若要查看为负载均衡器指定安全组时所需的其他配置选项的示例，请参阅[使用 AWS CLI进行配置](using-features.managing.ec2.aws-cli.md)。

```
option_settings:
  aws:autoscaling:launchconfiguration:
    SecurityGroups: my-securitygroup
    MonitoringInterval: "1 minute"
    DisableIMDSv1: false
    DisableDefaultEC2SecurityGroup: true
    SecurityGroups: "sg-abcdef01, sg-abcdef02"
    EC2KeyName: my-keypair
    IamInstanceProfile: "aws-elasticbeanstalk-ec2-role"
    BlockDeviceMappings: "/dev/sdj=:100,/dev/sdh=snap-51eef269,/dev/sdb=ephemeral0"   
  aws:elasticbeanstalk:environment:
    EnvironmentType: SingleInstance
```

`DisableDefaultEC2SecurityGroup` 和 `BlockDeviceMappings` 在控制台中不可用。

您可以使用 `BlockDeviceMappings` 来为实例配置其他块储存设备。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[区块设备映射](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)。

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

# 在 Elastic Beanstalk 环境的实例上配置 IMDS
<a name="environments-cfg-ec2-imds"></a>

本主题介绍实例元数据服务（IMDS）。

*实例元*数据是与亚马逊弹性计算云 (Amazon EC2) 实例相关的数据，应用程序可以使用这些数据来配置或管理正在运行的实例。实例元数据服务（IMDS）是实例上的组件，在实例上进行编码，用于安全访问实例元数据。这些代码可以是您的环境实例上的 Elastic Beanstalk 平台代码 AWS 、您的应用程序可能正在使用的软件开发工具包，甚至是您的应用程序自己的代码。有关更多信息，请参阅 *Amazon [用户指南中的实例元数据和](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) EC2 用户*数据。

代码可以使用以下两种方法之一从正在运行的实例访问实例元数据：实例元数据服务版本 1 (IMDSv1) 或实例元数据服务版本 2 (IMDSv2)。 IMDSv2 使用面向会话的请求并缓解了几种可用于尝试访问 IMDS 的漏洞。有关这两种方法的信息，请参阅 *Amazon EC2 用户指南*中的[配置实例元数据服务](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)。

**Topics**
+ [IMDS 平台支持](#environments-cfg-ec2-imds.plat)
+ [选择 IMDS 方法](#environments-cfg-ec2-imds.choose)
+ [使用 Elastic Beanstalk 控制台配置 IMDS](#environments-cfg-ec2-imds.console)
+ [aws:autoscaling:launchconfiguration 命名空间](#environments-cfg-ec2-imds.namespace)

## IMDS 平台支持
<a name="environments-cfg-ec2-imds.plat"></a>

在亚马逊 Linux 2、亚马逊 Linux 2023 和 Windows 服务器上运行的 Elastic Beanstalk 平台都支持和。 IMDSv1 IMDSv2有关更多信息，请参阅 [使用 Elastic Beanstalk 控制台配置 IMDS](#environments-cfg-ec2-imds.console)。

## 选择 IMDS 方法
<a name="environments-cfg-ec2-imds.choose"></a>

在确定希望环境支持的 IMDS 方法时，请考虑以下使用案例：
+ *AWS SDK* — 如果您的应用程序使用 S AWS DK，请确保使用最新版本的 SDK。调 AWS SDKs用 IMDS，并 IMDSv2 尽可能使用较新的 SDK 版本。如果您禁用 IMDSv1，或者您的应用程序使用的是旧的 SDK 版本，IMDS 调用可能会失败。
+ *您的应用程序代码* — 如果您的应用程序发出 IMDS 调用，请考虑使用 AWS SDK，这样您就可以进行调用，而不是直接发出 HTTP 请求。通过这种方式，您无需进行代码更改即可在 IMDS 方法之间切换。S AWS DK IMDSv2 尽可能使用。
+ *Elastic Beanstalk* 平台代码 — 我们的代码 AWS 通过 SDK 进行 IMDS 调用， IMDSv2 因此可以在所有支持的平台版本上使用。如果您的代码使用 S up-to-date AWS DK 并通过 SDK 进行所有 IMDS 调用，则可以放心地禁用 IMDSv1。

## 使用 Elastic Beanstalk 控制台配置 IMDS
<a name="environments-cfg-ec2-imds.console"></a>

您可以在 Elastic Beanstalk 控制台中修改 Elastic Beanstalk 环境 EC2 的亚马逊实例配置。

**重要**  
`DisableIMDSv1` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

**在 Elastic Beanstalk 控制 EC2 台中为您的亚马逊实例配置 IMDS**

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

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

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

1. 在 **Instance traffic and scaling**（实例流量和扩展）配置类别中，选择 **Edit**（编辑）。

1. 将 “**禁用 IMDSv1**” 设置为强制执行 IMDSv2。清除 **“禁 IMDSv1用**” 可同时启用 IMDSv1 和 IMDSv2。

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

## aws:autoscaling:launchconfiguration 命名空间
<a name="environments-cfg-ec2-imds.namespace"></a>

您可以使用 `aws:autoscaling:launchconfiguration` 命名空间中的[配置选项](command-options.md)在环境实例上配置 IMDS。

**重要**  
`DisableIMDSv1` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

以下[配置文件](ebextensions.md)示例禁止 IMDSv1 使用该`DisableIMDSv1`选项。

```
option_settings:
  aws:autoscaling:launchconfiguration:
    DisableIMDSv1: true
```

将 “**禁用 IMDSv1**” 设置为 `true` “禁用” IMDSv1 并强制执行 IMDSv2。

将 “**禁用 IMDSv1**” 设置为`false`，可同时启用 IMDSv1 和 IMDSv2。

# 使用 Auto Scaling 功能自动扩缩 Elastic Beanstalk 环境实例
<a name="using-features.managing.as"></a>

本主题将介绍如何自定义 Auto Scaling 功能以管理 Elastic Beanstalk 环境的工作负载。您可以使用 [Elastic Beanstalk 控制台](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-console)、[命名空间配置选项](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-namespace)、[AWS CLI](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-aws-cli) 或 [EB CLI](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-ebcli) 为环境配置 Auto Scaling 功能。

**负载均衡环境或单实例环境**  
您的 AWS Elastic Beanstalk 环境包括一个 A *uto Scaling 组*，用于管理您的环境[中的 Amazon EC2 实例](using-features.managing.ec2.md)。在单实例环境中，Auto Scaling 组可确保始终有一个正在运行的实例。在负载均衡的环境中，您将为组配置一系列要运行的实例，Auto Scaling 将根据负载按需添加或删除实例。

**EC2 实例配置**  
自动扩缩组还会应用您的配置选择来预置和管理环境中的 EC2 实例。您可以[修改 EC2 配置](using-features.managing.ec2.md)来更改实例类型、密钥对、Amazon Elastic Block Store（Amazon EBS）存储以及只能在启动实例时配置的其他设置。

**按需型实例与竞价型实例**  
作为一种选择，Elastic Beanstalk 可以在环境加入[竞价型实例](environments-cfg-autoscaling-spot.md)，并结合按需型实例来对它们进行管理。您可以配置 Amazon EC2 Auto Scaling，以通过启用[容量再平衡](https://docs.aws.amazon.com/autoscaling/ec2/userguide/capacity-rebalance.html)监控和自动响应影响 Spot 实例可用性的更改。您还可以配置 Auto Scaling 服务用于为环境预置竞价型实例的 [竞价型分配策略](environments-cfg-autoscaling-spot-allocation-strategy.md)。

**启用竞价型实例所需的权限**  
启用 Spot 实例请求需要使用 Amazon EC2 启动模板。在创建或更新环境过程中配置此功能时，Elastic Beanstalk 尝试将环境配置为使用 Amazon EC2 启动模板（如果环境尚未使用启动模板）。在这种情况下，如果您的用户策略缺乏必要的权限，则创建或更新环境可能会失败。因此，我们建议您使用托管用户策略，或者将所需的权限添加到自定义策略中。有关所需权限的详细信息，请参阅[启动模板要求的权限](environments-cfg-autoscaling-launch-templates.md#environments-cfg-autoscaling-launch-templates-permissions)。

**Auto Scaling 触发**  
Auto Scaling 组使用两个 Amazon CloudWatch 警报来触发扩展操作。当每个实例的平均出站网络流量在 5 分钟时间段内高于 6 MiB 或低于 2 MiB 时，默认触发器将扩展。要高效使用 Auto Scaling，请根据您的应用程序、实例类型和服务要求[配置触发器](environments-cfg-autoscaling-triggers.md)。您可以基于若干个统计数据 (包括延迟、磁盘 I/O、CPU 使用率和请求计数) 来进行扩展。

**计划的 Auto Scaling 操作**  
要通过可预测的峰值流量期间来优化环境对 Amazon EC2 实例的使用，请[配置 Auto Scaling 组以更改计划中的实例计数](environments-cfg-autoscaling-scheduledactions.md)。您可以安排每天或每周重复一次的组配置更改，或安排一次性更改，以便为可为网站带来大量流量的营销活动做好准备。

**Auto Scaling 运行状况检查**  
Auto Scaling 监控它启动的每个 Amazon EC2 实例的运行状况。如果任何实例出现意外终止，Auto Scaling 会检测该终止，并启动替代实例。要配置组以使用负载均衡器的运行状况检查机制，请参阅[Elastic Beanstalk 环境的 Auto Scaling 运行状况检查设置](environmentconfig-autoscaling-healthchecktype.md)。

**Topics**
+ [将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)
+ [Elastic Beanstalk 环境的竞价型实例支持](environments-cfg-autoscaling-spot.md)
+ [Elastic Beanstalk 环境的 Auto Scaling 触发器](environments-cfg-autoscaling-triggers.md)
+ [Elastic Beanstalk 环境的计划 Auto Scaling 操作](environments-cfg-autoscaling-scheduledactions.md)
+ [Elastic Beanstalk 环境的 Auto Scaling 运行状况检查设置](environmentconfig-autoscaling-healthchecktype.md)

# 将 Elastic Beanstalk 环境迁移到启动模板
<a name="environments-cfg-autoscaling-launch-templates"></a>

从 2024 年 10 月 1 日开始，Amazon EC2 Auto Scaling 服务不再支持新账户的启动配置。在该日期之前创建的账户可能具有启动配置。

建议您迁移到**启动模板**，以享受以下好处：
+ 提高应用程序的可用性
+ 更好地优化自动扩缩组中的工作负载
+ 访问最新的 EC2 和 Auto Scaling 功能

有关更多信息，请参阅《*Amazon EC2 Auto Scaling 用户指南*》中的 [Auto Scaling launch configurations](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-configurations.html)。

## 启动模板的选项设置
<a name="environments-cfg-autoscaling-launch-templates-options"></a>

要将环境从启动配置迁移到启动模板，请设置以下配置选项之一：
+ `RootVolumeType` 选项设置为 **gp3**。您可以使用[控制台](using-features.managing.ec2.console.md)或[命名空间](using-features.managing.ec2.namespace.md)来设置此选项。
+ `BlockDeviceMappings` 选项包含 **gp3**。您可以使用[控制台](using-features.managing.ec2.console.md)或[命名空间](using-features.managing.ec2.namespace.md)来设置此选项。
+ `DisableIMDSv1` 选项设置为 **true**。我们建议您使用[命名空间](using-features.managing.ec2.namespace.md)设置此选项。
+ `EnableSpot` 选项设置为 **true**。有关更多信息，请参阅 [启用竞价型实例](environments-cfg-autoscaling-enable-spot.md)。

**重要**  
环境开始使用启动模板后，即使您删除了最初触发使用启动模板的配置选项，Elastic Beanstalk 也不会恢复为启动配置。

## 确认您的环境是否具有启动配置或启动模板
<a name="environments-cfg-autoscaling-launch-templates-determine"></a>

您可以通过检查 CloudFormation 堆栈模板来确认您的环境是否已使用启动模板，或者是否正在使用启动配置。

**检查环境的 CloudFormation 堆栈模板**

1. 在 [https://console.aws.amazon.com/cloudformat](https://console.aws.amazon.com/cloudformation/) ion 上打开 AWS CloudFormation 控制台。

1. 在屏幕顶部的导航栏上，选择您创建环境的 AWS 区域。

1. 在 CloudFormation 控制台的**堆栈**页面上，检查**描述**列。

   找到并选择 Elastic Beanstalk 环境的堆栈。 CloudFormation 显示环境的堆栈详细信息。

1. 在**堆栈详细信息**中，选择**模板**选项卡。

   *使用浏览器的页面搜索，您可以在模板文本中搜索 *launchtemplate* 或 launchconfiguration*。

有关更多信息，请参阅《*AWS CloudFormation 用户指南*》中的[查看堆栈信息](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)。

## 启动模板要求的权限
<a name="environments-cfg-autoscaling-launch-templates-permissions"></a>

默认的 Elastic Beanstalk 托管服务[AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy.html)角色策略提供创建和管理启动模板所需的权限。Elastic Beanstalk 必须管理启动模板才能完成许多环境操作，包括创建环境。

如果您将自定义策略附加到 Elastic Beanstalk 服务角色，请验证该服务角色是否包含用于创建启动模板的以下权限。这些权限使 Elastic Beanstalk 能够在您的账户中成功创建和更新环境：

**Amazon EC2 启动模板所需的权限**
+ `ec2:RunInstances`
+ `ec2:CreateLaunchTemplate`
+ `ec2:CreateLaunchTemplateVersions`
+ `ec2:DeleteLaunchTemplate`
+ `ec2:DeleteLaunchTemplateVersions`
+ `ec2:DescribeLaunchTemplate`
+ `ec2:DescribeLaunchTemplateVersions`

以下示例 IAM 策略包含这些权限。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:RunInstances",
        "ec2:CreateLaunchTemplate",
        "ec2:CreateLaunchTemplateVersions",
        "ec2:DeleteLaunchTemplate",
        "ec2:DeleteLaunchTemplateVersions",
        "ec2:DescribeLaunchTemplate",
        "ec2:DescribeLaunchTemplateVersions"
      ],     
      "Resource": [
                "*"
            ]
     }
  ]
}
```

有关更多信息，请参阅[管理 Elastic Beanstalk 服务角色](iam-servicerole.md)和[管理 Elastic Beanstalk 用户策略](AWSHowTo.iam.managed-policies.md)。

## 有关启动模板的更多信息
<a name="environments-cfg-autoscaling-launch-templates-moreinfo"></a>

要了解有关启动模板的信息，请参阅《*Amazon EC2 Auto Scaling 用户指南*》中的 [Auto Scaling launch templates](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-templates.html)。

要详细了解 AWS 过渡到启动模板及其带来的好处，请参阅*AWS 计算博客*[中的 Amazon EC2 Auto Scaling 将不再为启动配置添加对新 EC2 功能的支持](https://aws.amazon.com/blogs/compute/amazon-ec2-auto-scaling-will-no-longer-add-support-for-new-ec2-features-to-launch-configurations/)。

**重要**  
您无需按照此博客文章中提及的程序来将旧环境迁移到启动模板。若要将现有 Elastic Beanstalk 环境迁移到启动模板，请设置[启动模板的选项设置](#environments-cfg-autoscaling-launch-templates-options)中列出的选项之一。

# Elastic Beanstalk 环境的竞价型实例支持
<a name="environments-cfg-autoscaling-spot"></a>

本主题介绍可用于管理您 Elastic Beanstalk 环境中竞价型实例的容量和负载均衡的配置选项。其还提供了可用于配置这些选项的方法的详细信息和示例。您可以使用 [Elastic Beanstalk 控制台](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-console)、[命名空间配置选项](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-namespace)、[AWS CLI](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-aws-cli) 或 [EB CLI](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-ebcli) 来管理配置选项。

**通过容量重新平衡最大限度地减少竞价型实例中断**  
为了帮助最大限度地减少竞价型实例中断对应用程序的影响，您可以启用 Amazon EC2 Auto Scaling 附带的“容量重新平衡”选项。

**重要**  
对 Spot 实例的需求在不同时间可能有显著的差异，Spot 实例的可用性也会因为未使用 Amazon EC2 实例的可用数量而差别巨大。Spot 实例可能会中断。

启用容量重新平衡后，EC2 会在中断前自动尝试替换自动扩缩组中的竞价型实例。要启用此功能，请使用 Elastic Beanstalk 控制台以[配置 Auto Scaling 组](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-console)。或者，您可以在 [aws:autoscaling:asg](command-options-general.md#command-options-general-autoscalingasg) 命名空间中将 Elastic Beanstalk `EnableCapacityRebalancing` [配置选项](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-namespace)设置为 `true`。

有关更多信息，请参阅《*Amazon EC2 Auto Scaling 用户指南*》中的 [Capacity Rebalancing](https://docs.aws.amazon.com/autoscaling/ec2/userguide/capacity-rebalance.html) 和《*Amazon EC2 用户指南*》中的[竞价型实例中断](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)。

**较旧的实例类型和竞价型实例支持**  
一些较旧的 AWS 账户可能会为 Elastic Beanstalk 提供不支持竞价型实例的默认实例类型。如果启用竞价型实例请求，并且系统显示您指定的所有实例类型均不支持竞价型实例错误，请以支持竞价型实例的实例类型更新配置。要选择 Spot 实例类型，请使用 [Spot Instance Advisor](https://aws.amazon.com/ec2/spot/instance-advisor/)。

**Topics**
+ [为环境启用竞价型实例](environments-cfg-autoscaling-enable-spot.md)
+ [竞价型实例的分配策略](environments-cfg-autoscaling-spot-allocation-strategy.md)
+ [管理按需型实例和竞价型实例](environments-cfg-autoscaling-spot-and-demand.md)
+ [Elastic Beanstalk 环境的容量配置](environments-cfg-autoscaling-configuration-approaches.md)

# 为环境启用竞价型实例
<a name="environments-cfg-autoscaling-enable-spot"></a>

若要利用 Amazon EC2 竞价型实例，您可以为环境设置 `EnableSpot` 选项。然后，您环境的 Auto Scaling 组会将 Amazon EC2 购买选项组合在一起，并将按需实例和 Spot 实例组合在一起。

您可以使用 [Elastic Beanstalk 控制台](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-console)、[命名空间配置选项](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-namespace)、[AWS CLI](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-aws-cli) 或 [EB CLI](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-ebcli) 为环境启用竞价型实例请求。

在为环境启用竞价型实例之前，请熟悉可用的 Auto Scaling 功能、容量和负载均衡配置选项。应用程序与工作负载、实例中断的影响和定价相关的要求都是您计划启用竞价型实例时的重要考虑因素。

以下主题详细介绍了 Auto Scaling 和容量管理选项，以及将它们二者结合起来使用对您的环境有何影响。我们提供了一些程序和示例配置，来向您说明各种选项并指导您配置这些选项。我们还提供了工具和特性，来帮助您管理配置和响应事件。您可以根据可预测的流量周期安排对配置的自动更改，配置触发器对流量等因素做出响应，以及配置 Auto Scaling 监控和运行状况检查。

有关竞价型实例的更多详细信息，包括关键概念和最佳实践说明，请参阅《Amazon EC2 用户指南》**中的[竞价型实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)。

**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

# 竞价型实例的分配策略
<a name="environments-cfg-autoscaling-spot-allocation-strategy"></a>

您可以为您的 Elastic Beanstalk 环境选择本主题中列出的任意一种分配策略。使用[Elastic Beanstalk 控制台](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-console)、[命名空间配置选项](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-namespace)或 [AWS CLI](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-aws-cli) 为您的环境设置和配置竞价型实例分配策略和相关属性。

Amazon EC2 采用*分配策略*为环境管理和预置竞价型实例。每种分配策略都会根据其定义方式来优化已分配的实例，以处理可用容量、价格和实例类型选择。

Amazon EC2 Auto Scaling 提供了以下适用于竞价型实例的分配策略：
+ **容量优化型策略**（默认）
  + 从实例池中请求竞价型实例，并根据启动的实例数量选择*最佳容量*。
  + 此策略非常适用于必须最大限度地降低服务中断可能性的工作负载。
+ **价格容量优化型策略**
  + 从*中断概率最低*且*价格最低*的实例池中请求竞价型实例。
  + 这是大多数竞价型工作负载的首选。
+ **容量优化优先型策略**
  + 根据*容量可用性首先*请求竞价型实例，同时尽最大努力兑现您选择的*实例类型优先级*。在为 Elastic Beanstalk 配置竞价型实例选项时，您可以提供按优先级排序的实例类型列表。
  + 此策略适用于需要最大限度减少服务中断的工作负载，并且特定实例类型的优先级划分很重要。
+ **最低价格** 
  + 从具有可用实例的*最低价格实例池*中请求竞价型实例。
  + 使用此策略时务必谨慎，因为它仅考虑实例价格而未考虑可用容量，这会导致中断率升高。

有关每种分配策略的更多详细信息，请参阅《Amazon EC2 Auto Scaling User Guide》** 中的 [Allocation strategies for multiple instance types](https://docs.aws.amazon.com/autoscaling/ec2/userguide/allocation-strategies.html)。

为了帮助您了解哪种分配策略最适合满足您环境的要求，请参阅《Amazon EC2 用户指南》**中的[选择合适的竞价型分配策略](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html#ec2-fleet-allocation-use-cases)。

# 管理按需型实例和竞价型实例
<a name="environments-cfg-autoscaling-spot-and-demand"></a>

您可以启动并自动扩展单个 Auto Scaling 组中的一组按需实例和竞价型实例。可以同时使用以下选项来配置 Auto Scaling 服务管理您环境中竞价型实例和按需型实例的方式。

您可以使用 [Elastic Beanstalk 控制台](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-console)、[命名空间配置选项](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-namespace)、[AWS CLI](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-aws-cli) 或 [EB CLI](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-ebcli) 为环境配置这些选项。

以下选项是 [aws:ec2:instances](command-options-general.md#command-options-general-ec2instances) 命名空间的一部分：
+ `EnableSpot`：当设置为 `true` 时，此设置会为您的环境启用竞价型实例请求。
+ `SpotFleetOnDemandBase`：此选项会设置在随着环境纵向扩展时考虑竞价型实例之前自动扩缩组预置的最小按需型实例数量。
+ `SpotFleetOnDemandAboveBasePercentage`：自动扩缩组在 `SpotOnDemandBase` 实例之外作为额外容量预置的按需型实例的百分比。

全面列出的选项与 [aws:autoscaling:asg](command-options-general.md#command-options-general-autoscalingasg) 命名空间中的以下选项相关联：
+ `MinSize`：自动扩缩组中所需的最小实例数量。
+ `MaxSize`：自动扩缩组中所需的最大实例数量。

**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

## 同时应用两组命名空间选项
<a name="environments-cfg-autoscaling-spot-and-demand-combined"></a>

以下几点描述了将这些选项设置组合起来使用对环境扩展有何影响。
+ 只有 `MinSize` 决定了您环境的初始容量，即您希望运行的最低实例数。
+  `SpotFleetOnDemandBase` 不会影响初始容量。在启用竞价型实例的情况下，此选项决定在考虑竞价型实例前，先预置的按需型实例数量。
+ 考虑何时 `SpotFleetOnDemandBase` 小于 `MinSize`。您仍然会得到完全的 `MinSize` 实例作为初始容量。至少这些实例中的 `SpotFleetOnDemandBase` 必须是按需实例。
+ 考虑何时 `SpotFleetOnDemandBase` 大于 `MinSize`。随着环境的扩展，将保证您至少可获得等于两个值之间的差值的额外实例数。换句话说，可以保证您在满足 `SpotFleetOnDemandBase` 要求之前至少获得额外的按需 `(SpotFleetOnDemandBase - MinSize)` 实例。

**单实例环境**  
在生产环境中，将 Spot 实例作为可扩展、负载均衡的环境的一部分尤其有用。我们建议不要在单实例环境中使用 Spot。如果 Spot 实例不可用，您可能会丢失环境的所有容量（单实例）。您仍可以在单实例环境中使用 Spot 实例进行开发或测试。此种情况下，请务必将 `SpotFleetOnDemandBase` 和 `SpotFleetOnDemandAboveBasePercentage` 均设置为零。任何其他设置都会导致使用按需实例。

## 扩展选项设置示例
<a name="environments-cfg-autoscaling-spot-and-demand-examples"></a>

以下示例演示了设置各种调整选项的不同方案。所有示例都采用已启用 Spot 实例请求的负载均衡环境。

**Example 1：初始容量包含按需实例和 Spot 实例**  <a name="environments-cfg-autoscaling-spot-example1"></a>


**选项设置**  

|  **选项**  |  **命名空间**  |  **值**  | 
| --- | --- | --- | 
|  `MinSize`  |  `aws:autoscaling:asg`  |  `10`  | 
|  `MaxSize`  |  `aws:autoscaling:asg`  |  `24`  | 
|  `SpotFleetOnDemandBase`  |  `aws:ec2:instances`  |  `4`  | 
|  `SpotFleetOnDemandAboveBasePercentage`  |  `aws:ec2:instances`  |  `50`  | 

在此示例中，环境的初始实例数是十个，其中七个是按需实例（四个基本实例，以及基本实例以外的六个实例的 50%），三个是 Spot 实例。该环境最多可扩展到 24 个实例。扩展时，队列中四个基本按需实例以外的按需实例比例保持为 50%，该队列整体最多可包含 24 个实例，其中 14 个是按需实例（4 个基本实例，以及基本实例以外的 20 个实例的 50%），10 个是 Spot 实例。



**Example 2：所有按需初始容量**  <a name="environments-cfg-autoscaling-spot-example1"></a>


**选项设置**  

|  **选项**  |  **命名空间**  |  **值**  | 
| --- | --- | --- | 
|  `MinSize`  |  `aws:autoscaling:asg`  |  `4`  | 
|  `MaxSize`  |  `aws:autoscaling:asg`  |  `24`  | 
|  `SpotFleetOnDemandBase`  |  `aws:ec2:instances`  |  `4`  | 
|  `SpotFleetOnDemandAboveBasePercentage`  |  `aws:ec2:instances`  |  `50`  | 

在此示例中，环境的初始实例数是四个，所有这些实例都是按需实例。该环境最多可扩展到 24 个实例。扩展时，队列中四个基本按需实例以外的按需实例比例保持为 50%，该队列整体最多可包含 24 个实例，其中 14 个是按需实例（4 个基本实例，以及基本实例以外的 20 个实例的 50%），10 个是 Spot 实例。

**Example 3：初始容量以外的额外按需基本实例**  <a name="environments-cfg-autoscaling-spot-example1"></a>


**选项设置**  

|  **选项**  |  **命名空间**  |  **值**  | 
| --- | --- | --- | 
|  `MinSize`  |  `aws:autoscaling:asg`  |  `3`  | 
|  `MaxSize`  |  `aws:autoscaling:asg`  |  `24`  | 
|  `SpotFleetOnDemandBase`  |  `aws:ec2:instances`  |  `4`  | 
|  `SpotFleetOnDemandAboveBasePercentage`  |  `aws:ec2:instances`  |  `50`  | 

在此示例中，环境的初始实例数是三个，所有这些实例都是按需实例。该环境最多可扩展到 24 个实例。除开三个初始实例以外添加的第一个实例是按需实例，用于凑齐四个基本按需实例。随着进一步扩展，队列中四个基本按需实例以外的按需实例比例保持为 50%，该队列整体最多可包含 24 个实例，其中 14 个是按需实例（4 个基本实例，以及基本实例以外的 20 个实例的 50%），10 个是 Spot 实例。

# Elastic Beanstalk 环境的容量配置
<a name="environments-cfg-autoscaling-configuration-approaches"></a>

本主题介绍为您的 Elastic Beanstalk 环境配置 Auto Scaling 容量的不同方法。您可以使用 Elastic Beanstalk 控制台、EB CLI AWS CLI、或命名空间选项。

**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

## 使用控制台的配置
<a name="environments-cfg-autoscaling-console"></a>

您可以通过在 [Elastic Beanstalk 控制台](environments-console.md)中环境的**配置**页面上编辑**容量**来配置自动扩缩组的容量管理方式。

**在 Elastic Beanstalk 控制台中配置自动扩缩组容量**

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

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

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

1. 在 **Capacity (容量)** 配置类别中，选择 **Edit (编辑)**。

1. 在 **Auto Scaling group (Auto Scaling 组)** 部分中，配置以下设置。
   + **Environment type (环境类型)** - 选择 **Load balanced (负载均衡)**。
   + **Min instances (最小实例数)** - 组在任何时间均应包含的最小 EC2 实例数。组从最小计数开始，当满足扩展触发条件时，则添加实例。
   + **Max instances (最大实例数)** - 组在任何时间均应包含的最大 EC2 实例数。
**注意**  
如果您使用滚动更新，请确保最大实例计数高于滚动更新的 [**Minimum instances in service (使用的最小实例数)** 设置](using-features.rollingupdates.md#rollingupdates-configure)。
   + **机群组合** (Fleet composition) — 默认值为**按需实例**。要启用 *Spot 实例*请求，请选择**组合购买选项和实例**。
**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

     如果选择启用 *Spot 实例*请求，请启用以下选项：
     + **竞价型分配策略**：根据可用容量、价格和实例类型选择，确定在您的环境中管理和预置竞价型实例的方法。从*容量优化型策略*（默认）、*价格容量优化新房策略*、*容量优化优先性策略*或*最低价格策略*中选择。有关每种分配策略的描述和更多信息，请参阅[竞价型实例的分配策略](environments-cfg-autoscaling-spot-allocation-strategy.md)。
     + **最高 Spot 价格** — 有关竞价型实例最高价格选项的建议，请参阅《*Amazon EC2 用户指南*》中的[竞价型实例定价历史记录](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html)。
     + **按需基准** (On-Demand base) – 向外扩展环境时，在考虑 Spot 实例之前，Auto Scaling 组预配置的最小按需实例数。
     + **按需上方基准** (On-Demand above base)– Auto Scaling 组在按需基本实例之外调配的任何额外容量中，按需实例所占的百分比。
**注意**  
**按需型实例基本比例**和**超出基本比例的按需实例百分比**选项与前面列出的**最小数量**和**最大数量***实例*选项相关联。有关这些选项和例子的更多信息，请参阅 [Elastic Beanstalk 环境的竞价型实例支持](environments-cfg-autoscaling-spot.md)。
     + **容量重新平衡**：仅当自动扩缩组中至少有一个竞价型实例时，此选项才适用。启用此功能后，EC2 会在中断前自动尝试替换自动扩缩组中的竞价型实例，以最大限度地减少竞价型实例中断对应用程序的影响。有关更多信息，请参阅《Amazon EC2 Auto Scaling User Guide》** 中的 [Capacity Rebalancing](https://docs.aws.amazon.com/autoscaling/ec2/userguide/capacity-rebalance.html)
   + **架构**：EC2 实例的处理器架构。处理器架构决定了下一个字段中可用的 EC2 实例类型。
   + **实例类型**：为运行应用程序而启动的 Amazon EC2 实例的类型。有关更多信息，请参阅 [实例类型](using-features.managing.ec2.console.md#using-features.managing.ec2.instancetypes)。
   + **AMI ID** - Elastic Beanstalk 用来启动环境中的 Amazon EC2 实例的计算机映像。有关更多信息，请参阅 [AMI ID](using-features.managing.ec2.console.md#using-features.managing.ec2.customami)。
   + **Availability Zones (可用区)** - 选择环境实例要跨越的可用区的数量。默认情况下，Auto Scaling 组会在所有可用区中均匀启动实例。要将实例集中在少数几个区域中，请选择要使用的区域数。对于生产环境而言，至少要使用两个区域，以确保当一个可用区中断服务时您的应用程序仍然可用。
   + **Placement (放置)**（可选）- 选择要使用的可用区。如果您的实例需要连接至特定区域中的资源或者您购买了区域特定的[预留实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html)，请使用此设置。如果您在自定义 VPC 中启动环境，则无法配置此选项。在自定义 VPC 中，您需要为分配给环境的子网选择可用区。
   + **Scaling cooldown (扩展冷却时间)** - 在扩展之后、在继续评估触发器之前等待实例启动或终止的时间（以秒为单位）。有关更多信息，请参阅[扩展冷却时间](https://docs.aws.amazon.com/autoscaling/ec2/userguide/Cooldown.html)。

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

## 使用命名空间选项进行配置
<a name="environments-cfg-autoscaling-namespace"></a>

Elastic Beanstalk 在以下两个命名空间中提供了用于 Auto Scaling 设置的[配置选项](command-options.md)：[`aws:autoscaling:asg`](command-options-general.md#command-options-general-autoscalingasg) 和 [`aws:ec2:instances`](command-options-general.md#command-options-general-ec2instances)。

### aws:autoscaling:asg 命名空间
<a name="environments-cfg-autoscaling-namespace.asg"></a>

[`aws:autoscaling:asg`](command-options-general.md#command-options-general-autoscalingasg) 命名空间提供了用于整体调整和可用性的选项。

以下[配置文件](ebextensions.md)示例配置 Auto Scaling 组以便使用两到四个实例、特定可用区和 12 分钟（720 秒）的冷却时间。它为竞价型实例启用了[容量重新平衡](https://docs.aws.amazon.com/autoscaling/ec2/userguide/capacity-rebalance.html)。只有在 [`aws:ec2:instances`](command-options-general.md#command-options-general-ec2instances) 命名空间中将 `EnableSpot` 设置为 `true` 时，`EnableCapacityRebalancing` 选项才会生效，如下面的配置文件示例所示。

```
option_settings:
  aws:autoscaling:asg:
    Availability Zones: Any
    Cooldown: '720'
    Custom Availability Zones: 'us-west-2a,us-west-2b'
    MaxSize: '4'
    MinSize: '2'
    EnableCapacityRebalancing: true
```

### aws:ec2:instances 命名空间
<a name="environments-cfg-autoscaling-namespace.instances"></a>

**注意**  
当您更新环境配置并从 `InstanceTypes` 选项中删除一个或多个实例类型时，Elastic Beanstalk 会终止在任何已删除的实例类型上运行的任何 Amazon EC2 实例。然后，您环境的 Auto Scaling 组根据需要启动新实例，以使用当前指定的实例类型来完成所需的容量。

[`aws:ec2:instances`](command-options-general.md#command-options-general-ec2instances) 命名空间提供与环境的实例相关的选项，包括 Spot 实例管理。它是 [`aws:autoscaling:launchconfiguration`](command-options-general.md#command-options-general-autoscalinglaunchconfiguration) 和 [`aws:autoscaling:asg`](command-options-general.md#command-options-general-autoscalingasg) 的补充。

以下[配置文件](ebextensions.md)示例配置 Auto Scaling 组，以便为环境启用 Spot 实例请求。它指定了三种可以使用的实例类型。至少采用一个按需实例作为基准容量，并采用 33% 的按需实例作为补充用的任何额外容量。

此配置将[竞价型分配策略](environments-cfg-autoscaling-spot-allocation-strategy.md)设置为 `capacity-optimized-prioritized`。这种特殊的分配策略根据 `InstanceTypes` 选项中指定的实例类型的顺序确定实例从实例池中启动的优先级。如果未指定 `SpotAllocationStrategy`，则其默认为 `capacity-optimized`。

```
option_settings:
  aws:ec2:instances:
    EnableSpot: true
    InstanceTypes: 't2.micro,t3.micro,t3.small'    
    SpotAllocationStrategy: capacity-optimized-prioritized
    SpotFleetOnDemandBase: '1'
    SpotFleetOnDemandAboveBasePercentage: '33'
```

要选择 Spot 实例类型，请使用 [Spot Instance Advisor](https://aws.amazon.com/ec2/spot/instance-advisor/)。

**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

## 使用 AWS CLI
<a name="environments-cfg-autoscaling-aws-cli"></a>

本节提供了一些示例，说明如何使用 AWS CLI [create-](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-environment.html) environment 命令通过这些部分中描述的 Auto Scaling 和 Capacity 选项来配置您的环境。您会注意到，此示例中还配置了前面[命名空间配置选项](#environments-cfg-autoscaling-namespace)一节中所述的 [`aws:autoscaling:asg`](command-options-general.md#command-options-general-autoscalingasg) 和 [`aws:ec2:instances`](command-options-general.md#command-options-general-ec2instances) 的命名空间设置。

 AWS 命令行界面提供用于创建和配置 Elastic Beanstalk 环境的命令。使用 `--option-settings` 选项，您可以传入 Elastic Beanstalk 支持的命名空间选项。这意味着前面描述的[命名空间配置选项](#environments-cfg-autoscaling-namespace)可以传递到适用的 AWS CLI 命令中，以配置您的 Elastic Beanstalk 环境。

**注意**  
您还可以使用带有 `--option-settings` 的 [update-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令来添加或更新命名空间选项。如果您需要从环境中移除任何命名空间选项，请使用带有 `--options-to-remove` 的 **update-environment** 命令。

以下示例会创建一个新环境。有关传入的选项的更多上下文信息，请参阅上一个[命名空间配置选项](#environments-cfg-autoscaling-namespace)主题。

列出的第一个选项，即 [aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration) 命名空间中的 `IamInstanceProfile`，是 Elastic Beanstalk [实例配置文件](concepts-roles-instance.md)。创建新环境时需要该选项。

**Example ：使用 Auto Scaling 选项创建环境（命名空间选项内联）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2023 v4.3.0 running Python 3.12" \
--option-settings \
Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role
Namespace=aws:autoscaling:asg,OptionName=Availability Zones,Value=Any \
Namespace=aws:autoscaling:asg,OptionName=Cooldown,Value=720 \
Namespace=aws:autoscaling:asg,OptionName=Custom Availability Zones,Value=us-west-2a,us-west-2b \
Namespace=aws:autoscaling:asg,OptionName=MaxSize,Value=4 \
Namespace=aws:autoscaling:asg,OptionName=MinSize,Value=2 \
Namespace=aws:autoscaling:asg,OptionName=EnableCapacityRebalancing,Value=true \
Namespace=aws:ec2:instances,OptionName=EnableSpot,Value=true \
Namespace=aws:ec2:instances,OptionName=InstanceTypes,Value=t2.micro,t3.micro,t3.small \
Namespace=aws:ec2:instances,OptionName=SpotAllocationStrategy,Value=capacity-optimized-prioritized \
Namespace=aws:ec2:instances,OptionName=SpotFleetOnDemandBase,Value=1 \
Namespace=aws:ec2:instances,OptionName=SpotFleetOnDemandAboveBasePercentage,Value=33
```





**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。





作为替代方法，请使用 `options.json` 文件来指定命名空间选项，而不是将其内联。

**Example ：使用 Auto Scaling 选项创建环境（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2023 v4.3.0 running Python 3.12"
--option-settings file://options.json
```

**Example**  

```
### example options.json ###
[
    {
        "Namespace": "aws:autoscaling:launchconfiguration",
        "OptionName": "IamInstanceProfile",
        "Value": "aws-elasticbeanstalk-ec2-role"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "Availability Zones",
        "Value": "Any"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "Cooldown",
        "Value": "720"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "Custom Availability Zones",
        "Value": "us-west-2a,us-west-2b"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "MaxSize",
        "Value": "4"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "MinSize",
        "Value": "2"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "EnableCapacityRebalancing",
        "Value": "true"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "EnableSpot",
        "Value": "true"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "InstanceTypes",
        "Value": "t2.micro,t3.micro,t3.small"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "SpotAllocationStrategy",
        "Value": "capacity-optimized-prioritized"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "SpotFleetOnDemandBase",
        "Value": "1"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "SpotFleetOnDemandAboveBasePercentage",
        "Value": "33"
    }
]
```

## 使用 EB CLI 进行配置
<a name="environments-cfg-autoscaling-ebcli"></a>

使用 [**eb create**](eb3-create.md) 命令创建环境时，可以指定几个与环境的 Auto Scaling 组相关的选项。这些选项可帮助您控制环境的容量。

`--single`  
使用一个 Amazon EC2 实例创建环境，并且不使用负载均衡器。如果您未使用此选项，负载均衡器会被添加到创建的环境中。

`--enable-spot`  
为您的环境启用 Spot 实例请求。  
`enable-spot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。
只有 [**eb create**](eb3-create.md) 命令的以下这些选项才能与 `--enable-spot` 一起使用。    
`--instance-types`  
列出您希望环境使用的 Amazon EC2 实例类型。  
`--spot-max-price`  
您愿意为 Spot 实例支付的每单位小时的最高价（美元）。有关竞价型实例最高价格选项的建议，请参阅《*Amazon EC2 用户指南*》中的[竞价型实例定价历史记录](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html)。  
`--on-demand-base-capacity`  
扩展环境时，在考虑 Spot 实例之前，Auto Scaling 组预配置的最小按需实例数。  
`--on-demand-above-base-capacity`  
Auto Scaling 组在 `--on-demand-base-capacity` 选项指定的超过的实例数作为额外容量预配置的按需实例的百分比。

以下示例创建一个环境，并配置 Auto Scaling 组以便为新环境启用 Spot 实例请求。在此示例中，可以使用这三种实例类型。

```
$ eb create --enable-spot --instance-types "t2.micro,t3.micro,t3.small"
```

**重要**  
还有另一个名称类似的选项，称为 `--instance-type`（无“s”），EB CLI 仅在处理按需实例时识别该选项。请勿将 `--instance-type`（无“s”）与 `--enable-spot` 选项一同使用。如果您这样做，EB CLI 将忽略它。请改为将 `--instance-types`（带有“s”）与 `--enable-spot` 选项一同使用。

# Elastic Beanstalk 环境的 Auto Scaling 触发器
<a name="environments-cfg-autoscaling-triggers"></a>

您的 Elastic Beanstalk 环境中的 Auto Scaling 组使用 CloudWatch 两个亚马逊警报来触发扩展操作。当每个实例的平均出站网络流量在 5 分钟时间段内高于 6 MB 或低于 2 MB 时，默认触发器将扩展。要有效地使用 Amazon A EC2 uto Scaling，请配置适合您的应用程序、实例类型和服务要求的触发器。您可以基于若干个统计数据 (包括延迟、磁盘 I/O、CPU 使用率和请求计数) 来进行扩展。

有关 CloudWatch 指标和警报的更多信息，请参阅[亚马逊* CloudWatch 用户指南中的亚马逊 CloudWatch *概念](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html)。

## 配置 Auto Scaling 触发器
<a name="environments-cfg-autoscaling-triggers-console"></a>

您可以配置触发器，以便在 Elastic Beanstalk 控制台中调整环境的 Auto Scaling 组中的实例数。

**在 Elastic Beanstalk 控制台中配置触发器**

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

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

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

1. 在 **Capacity (容量)** 配置类别中，选择 **Edit (编辑)**。

1. 在**扩展触发**部分中，配置以下设置：
   + **Metric (指标)** – 用于 Auto Scaling 触发器的指标。
   + **Statistic (统计数据)** - 触发器应使用的统计数据计算，如 `Average`。
   + **Unit (单位)** - 触发器指标的单位，例如 **Bytes (字节)**。
   + **周期** — 指定 Amazon CloudWatch 衡量触发指标的频率。
   + **Breach duration (违例持续时间)** - 触发扩展操作前，指标可以超出上限阈值和下限阈值的时间（以分钟为单位）。
   + **Upper threshold (上限)** - 如果指标超出该违例持续时间数值，则会触发扩展操作。
   + **向上扩展增量** — 执行扩展活动时要添加的 Amazon EC2 实例数量。
   + **Lower threshold (下限)** - 如果指标小于该违例持续时间值，则会触发扩展操作。
   + **缩减增量** — 执行扩展活动时要移除的 Amazon EC2 实例数量。

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

## aws:autoscaling:trigger 命名空间
<a name="environments-cfg-autoscaling-triggers-namespace"></a>

Elastic Beanstalk 为 [`aws:autoscaling:trigger`](command-options-general.md#command-options-general-autoscalingtrigger) 命名空间中的 Auto Scaling 设置提供[配置选项](command-options.md)。此命名空间中的设置按它们所适用的资源来组织。

```
option_settings:
  AWSEBAutoScalingScaleDownPolicy.aws:autoscaling:trigger:
    LowerBreachScaleIncrement: '-1'
  AWSEBAutoScalingScaleUpPolicy.aws:autoscaling:trigger:
    UpperBreachScaleIncrement: '1'
  AWSEBCloudwatchAlarmHigh.aws:autoscaling:trigger:
    UpperThreshold: '6000000'
  AWSEBCloudwatchAlarmLow.aws:autoscaling:trigger:
    BreachDuration: '5'
    EvaluationPeriods: '1'
    LowerThreshold: '2000000'
    MeasureName: NetworkOut
    Period: '5'
    Statistic: Average
    Unit: Bytes
```

# Elastic Beanstalk 环境的计划 Auto Scaling 操作
<a name="environments-cfg-autoscaling-scheduledactions"></a>

要在可预测的高峰流量期间优化您的环境对 Amazon EC2 实例的使用，请将您的 Amazon A EC2 uto Scaling 组配置为按计划更改其实例数量。您可以用重复操作配置您的环境，以便在上午扩展，在夜间流量低时缩减。例如，如果您的营销活动会在有限时间段内使网站的流量增加，则可计划一个一次性事件以便在活动开始时扩展，而计划另一个事件以便在活动结束时缩减。

每个环境最多可以定义 120 个活跃的计划操作。Elastic Beanstalk 还会保留最多 150 个过期的计划操作，可以通过更新设置来重用这些操作。

## 配置计划的操作
<a name="environments-cfg-autoscaling-scheduledactions-console"></a>

您可以在 Elastic Beanstalk 控制台中为环境的 Auto Scaling 组创建计划的操作。

**在 Elastic Beanstalk 控制台中配置计划的操作**

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

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

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

1. 在 **Capacity (容量)** 配置类别中，选择 **Edit (编辑)**。

1. 在 **Time-based scaling (基于时间的扩展)** 部分中，选择 **Add scheduled action (添加计划的操作)**。

1. 填写以下计划操作设置：
   + **Name (名称)** - 指定一个唯一的名称，最多包含 255 个字母数字字符且不带空格。
   + **Instances (实例)** - 选择要应用于 Auto Scaling 组的最小和最大实例计数。
   + **Desired capacity (所需容量)**（可选）- 为 Auto Scaling 组设置所需的初始容量。在应用计划的操作后，触发器将根据其设置调整所需容量。
   + **Occurrence (出现)** - 选择 **Recurring (定期)** 以在计划中重复扩展操作。
   + **Start time (开始时间)** - 对于一次性操作，请选择运行操作的日期和时间。

     对于重复操作，开始时间是可选的。指定它以选择执行操作的最早时间。在此时间之后，操作将根据**循环**表达式重复发生。
   + **Recurrence (循环)** - 使用 [Cron](http://en.wikipedia.org/wiki/Cron#CRON_expression) 表达式指定您希望计划操作发生的频率。例如，`30 6 * * 2` 在 UTC 时间每周二的早上 6:30 运行操作。
   + **End time (结束时间)**（可选）- 对于重复性操作是可选的。如果指定此项，操作将根据**循环**表达式重新进行，并且在此时间之后不再执行。

     当计划的操作结束时，Auto Scaling 不会自动恢复为其以前的设置。配置第二个计划操作，以根据需要将 Auto Scaling 返回原始设置。

1. 选择 **Add**。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。
**注意**  
计划的操作在应用之前不保存。

## aws:autoscaling:scheduledaction 命名空间
<a name="environments-cfg-autoscaling-scheduledactions-namespace"></a>

如果您需要配置大量计划操作，则可以使用[配置文件](ebextensions.md)或 [Elastic Beanstalk API](environment-configuration-methods-after.md#configuration-options-after-awscli-commandline) 应用来自 YAML 或 JSON 文件的配置选项更改。通过这些方法还可以访问 [`Suspend` 选项](command-options-general.md#command-options-general-autoscalingscheduledaction)，以临时停用某个重复的计划操作。

**注意**  
在控制台之外使用计划操作配置选项时，请使用 ISO 8601 时间格式指定开始时间和结束时间 (采用 UTC)。例如，2015-04-28T04:07:02Z。有关 ISO 8601 时间格式的更多信息，请参阅[日期和时间格式](http://www.w3.org/TR/NOTE-datetime)。日期在所有计划操作中都必须是唯一的。

Elastic Beanstalk 在 [`aws:autoscaling:scheduledaction`](command-options-general.md#command-options-general-autoscalingscheduledaction) 命名空间中提供了用于计划操作设置的配置选项。使用 `resource_name` 字段可指定计划操作的名称。

**Example S cheduled-scale-up-specific-time-long.conf**  
此配置文件指示 Elastic Beanstalk 在 2015-12-12T00:00:00Z 从 5 个实例扩展到 10 个实例。  

```
option_settings:
  - namespace: aws:autoscaling:scheduledaction
    resource_name: ScheduledScaleUpSpecificTime
    option_name: MinSize
    value: '5'
  - namespace: aws:autoscaling:scheduledaction
    resource_name: ScheduledScaleUpSpecificTime
    option_name: MaxSize
    value: '10'
  - namespace: aws:autoscaling:scheduledaction
    resource_name: ScheduledScaleUpSpecificTime
    option_name: DesiredCapacity
    value: '5'
  - namespace: aws:autoscaling:scheduledaction
    resource_name: ScheduledScaleUpSpecificTime
    option_name: StartTime
    value: '2015-12-12T00:00:00Z'
```

**Example S cheduled-scale-up-specific-time.config**  
要在 EB CLI 或配置文件中使用简写语法，请将资源名称添加到命名空间。  

```
option_settings:
  ScheduledScaleUpSpecificTime.aws:autoscaling:scheduledaction:
    MinSize: '5'
    MaxSize: '10'
    DesiredCapacity: '5'
    StartTime: '2015-12-12T00:00:00Z'
```

**Example S cheduled-scale-down-specific-time.config**  
此配置文件指示 Elastic Beanstalk 在 2015-12-12T07:00:00Z 进行缩减。  

```
option_settings:
  ScheduledScaleDownSpecificTime.aws:autoscaling:scheduledaction:
    MinSize: '1'
    MaxSize: '1'
    DesiredCapacity: '1'
    StartTime: '2015-12-12T07:00:00Z'
```

**Example S cheduled-periodic-scale-up .config**  
此配置文件指示 Elastic Beanstalk 在每天上午 9 点进行横向扩展。计划该操作从 2015 年 5 月 14 日开始并于 2016 年 1 月 12 日结束。  

```
option_settings:
  ScheduledPeriodicScaleUp.aws:autoscaling:scheduledaction:
    MinSize: '5'
    MaxSize: '10'
    DesiredCapacity: '5'
    StartTime: '2015-05-14T07:00:00Z'
    EndTime: '2016-01-12T07:00:00Z'
    Recurrence: 0 9 * * *
```

**Example S cheduled-periodic-scale-down .config**  
此配置文件指示 Elastic Beanstalk 在每天下午 6 点进行缩减以便不运行实例。如果您知道应用程序在工作时间之外的大多数时间闲置，则可以创建一个类似的计划操作。如果您的应用程序必须在工作时间之外停止运行，请将 `MaxSize` 更改为 `0`。  

```
option_settings:
  ScheduledPeriodicScaleDown.aws:autoscaling:scheduledaction:
    MinSize: '0'
    MaxSize: '1'
    DesiredCapacity: '0'
    StartTime: '2015-05-14T07:00:00Z'
    EndTime: '2016-01-12T07:00:00Z'
    Recurrence: 0 18 * * *
```

**Example S cheduled-weekend-scale-down .config**  
此配置文件指示 Elastic Beanstalk 在每个星期五的下午 6 点进行缩减。如果您获知应用程序在周末并未接收到足够多的流量，则可创建一个类似的计划操作。  

```
option_settings:
  ScheduledWeekendScaleDown.aws:autoscaling:scheduledaction:
    MinSize: '1'
    MaxSize: '4'
    DesiredCapacity: '1'
    StartTime: '2015-12-12T07:00:00Z'
    EndTime: '2016-01-12T07:00:00Z'
    Recurrence: 0 18 * * 5
```

# Elastic Beanstalk 环境的 Auto Scaling 运行状况检查设置
<a name="environmentconfig-autoscaling-healthchecktype"></a>

Amazon A EC2 uto Scaling 会监控其启动的每个亚马逊弹性计算云 (亚马逊 EC2) 实例的运行状况。如果任何实例出现意外终止，Auto Scaling 会检测该终止，并启动替代实例。默认情况下，为您的环境创建的 Auto Scaling 组使用[亚马逊 EC2 状态检查](https://docs.aws.amazon.com/autoscaling/latest/userguide/healthcheck.html)。如果您环境中的某个实例未通过亚马逊 EC2 状态检查，Auto Scaling 会将其关闭并替换它。

Amazon EC2 状态检查仅涵盖实例的运行状况，不包括您的应用程序、服务器或实例上运行的任何 Docker 容器的运行状况。如果应用程序崩溃，但它运行所在的实例仍然运行状况良好，则可能会从负载均衡器中逐出该实例，但 Auto Scaling 不会自动替换它。默认行为适合用于故障排除。如果 Auto Scaling 在应用程序崩溃之后立即替换该实例，您可能不会意识到有任何问题，即使它在启动之后快速崩溃。

如果您希望 Auto Scaling 替换其应用程序停止响应的实例，可以使用[配置文件](ebextensions.md)配置 Auto Scaling 组来使用 Elastic Load Balancing 运行状况检查。以下示例将该组设置为使用负载均衡器的运行状况检查以及 Amazon EC2 状态检查来确定实例的运行状况。

**Example .ebextensions/autoscaling.config**  

```
Resources:
  AWSEBAutoScalingGroup:
    Type: "AWS::AutoScaling::AutoScalingGroup"
    Properties:
      HealthCheckType: ELB
      HealthCheckGracePeriod: 300
```

有关`HealthCheckType`和`HealthCheckGracePeriod`属性的更多信息，请参阅《用户指南》中的[AWS::AutoScaling::AutoScaling群组](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html)和《*Amazon Auto Scaling AWS CloudFormation *用户指南》*中的 A EC2 uto Scaling* [实例运行状况检查](https://docs.aws.amazon.com/autoscaling/ec2/userguide/healthcheck.html)。

默认情况下，Elastic Load Balancing 运行状况检查配置为尝试通过端口 80 与您的实例进行 TCP 连接。这可以确认运行在实例上的 Web 服务器接受连接。但您可能希望[自定义负载均衡器运行状况检查](using-features.managing.elb.md)以确保应用程序处于良好状态，而不仅仅是 Web 服务器处于良好状态。宽限期设置可设置实例在不终止和替换的情况下无法通过运行状况检查的秒数。实例在从负载均衡器中被逐出后仍然能够恢复，因此请为实例指定适合于您的应用程序的时间量。

# Elastic Beanstalk 环境的负载均衡器
<a name="using-features.managing.elb"></a>

负载均衡器在环境的实例之间分配流量。[启用负载平衡](using-features-managing-env-types.md#using-features.managing.changetype)后， AWS Elastic Beanstalk 会创建一个专用于您的环境的 [Elastic Loa](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/) d Balancing 负载均衡器。Elastic Beanstalk 全面管理此负载均衡器，负责安全设置，并在终止环境时终止负载均衡器。

或者，您可以选择跨多个 Elastic Beanstalk 环境共享负载均衡器。使用共享的负载均衡器，您可以避免为每个环境设置专用负载均衡器，从而节省运营成本。您还要为您的环境使用的共享负载均衡器承担更多的管理责任。

Elastic Load Balancing 支持以下负载均衡器类型：
+ [经典负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/) – 上一代负载均衡器。将 HTTP、HTTPS 或 TCP 请求流量路由到环境实例上的不同端口。
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) – 应用层负载均衡器。根据请求路径，将 HTTP 或 HTTPS 请求流量路由到环境实例上的不同端口。
+ [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/) – 网络层负载均衡器。将 TCP 请求流量路由到环境实例上的不同端口。支持主动和被动运行状况检查。

Elastic Beanstalk 支持所有三种负载均衡器类型。下表显示可以与两种使用模式一起使用的类型：


| 负载均衡器类型 | 专用 | 已共享 | 
| --- | --- | --- | 
|  Classic 负载均衡器  |   ![\[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) 是  | 
|  Network Load Balancer  |   ![\[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) 否  | 

**注意**  
在**创建环境**控制台向导中禁用了经典负载均衡器（CLB）选项。如果某个现有的环境已经配置了经典负载均衡器，则可以使用 Elastic Beanstalk 控制台或 [EB CLI](using-features.managing.clone.md#using-features.managing.clone.CLI) [克隆现有环境](using-features.managing.clone.md)，从而创建新环境。您还可以选择使用 EB CLI 或 [AWS CLI](environments-create-awscli.md) 创建配置了经典负载均衡器的新环境。这些命令行工具将使用 CLB 创建一个新环境，即使您的账户中尚不存在该环境。

默认情况下，当您使用 Elastic Beanstalk 控制台或 EB CLI 启用负载均衡时，Elastic Beanstalk 会为您的环境创建 Application Load Balancer。它将负载均衡器配置为侦听端口 80 上的 HTTP 流量，并将该流量转发到同一端口上的实例。您只能在创建环境期间选择您的环境使用的负载均衡器类型。稍后，您可以更改设置以管理运行环境的负载均衡器行为，但不能更改其类型。

**注意**  
您的环境所在的 VPC 必须至少有位于两个可用区中的子网，才能创建 Application Load Balancer。所有新 AWS 账户均包含 VPCs 符合此要求的默认账户。

请参阅以下主题以了解 Elastic Beanstalk 支持的每个负载均衡器类型、其功能和如何在 Elastic Beanstalk 环境中对其进行配置和管理，以及如何配置负载均衡器以[将访问日志上传](environments-cfg-loadbalancer-accesslogs.md)到 Amazon S3。

**Topics**
+ [配置经典负载均衡器](environments-cfg-clb.md)
+ [配置 Application Load Balancer](environments-cfg-alb.md)
+ [配置共享 Application Load Balancer](environments-cfg-alb-shared.md)
+ [配置 Network Load Balancer](environments-cfg-nlb.md)
+ [配置双堆栈 Elastic Beanstalk 负载均衡器](environments-cfg-elbv2-ipv6-dualstack.md)
+ [配置访问日志](environments-cfg-loadbalancer-accesslogs.md)

# 配置经典负载均衡器
<a name="environments-cfg-clb"></a>

[启用负载平衡](using-features-managing-env-types.md#using-features.managing.changetype)后，您的 AWS Elastic Beanstalk 环境将配备 Elastic Load Balancing 负载均衡器，用于在环境中的实例之间分配流量。Elastic Load Balancing 支持多种负载均衡器类型。要了解更多信息，请参阅 [Elastic Load Balancing 用户指南](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/)。Elastic Beanstalk 可以为您创建负载均衡器，或者让您指定已创建的共享负载均衡器。

本主题介绍 Elastic Beanstalk 创建并专用于您的环境的 [经典负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/) 的配置。有关配置 Elastic Beanstalk 支持的所有负载均衡器类型的信息，请参阅[Elastic Beanstalk 环境的负载均衡器](using-features.managing.elb.md)。

**注意**  
您只能在创建环境期间选择您的环境使用的负载均衡器类型。稍后，您可以更改设置以管理运行环境的负载均衡器行为，但不能更改其类型。

## 简介
<a name="environments-cfg-clb-intro"></a>

[经典负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/) 是 Elastic Load Balancing 的上一代负载均衡器。它支持将 HTTP、HTTPS 或 TCP 请求流量路由到环境实例上的不同端口。

当您的环境使用经典负载均衡器时，默认情况下，Elastic Beanstalk 会将其配置为[侦听](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-listener-config.html)端口 80 上的 HTTP 流量并转发给同一端口上的实例。虽然您无法删除端口 80 默认侦听器，但您可以将其禁用，这通过阻止流量来实现相同的功能。请注意，您可以添加或删除其他侦听器。要支持安全的连接，您可以使用端口 443 上的侦听器和 TLS 证书来配置负载均衡器。

负载均衡器使用运行[状况检查](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html)来确定运行您的应用程序的 Amazon EC2 实例是否运行正常。运行状况检查会按设置的时间间隔对指定的 URL 发出请求。如果 URL 返回错误消息，或者在指定的超时期间内无法返回任何消息，则表示运行状况检查失败。

如果您的应用程序通过满足来自单一服务器上的同一客户端的多个请求来提高性能，您可以将负载均衡器配置为使用[粘性会话](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html)。对于粘性会话，负载均衡器会将一个 Cookie 添加到 HTTP 响应中，用于识别提供请求的 Amazon EC2 实例。当从同一客户端收到后续请求时，负载均衡器会使用 Cookie 将该请求发送到同一实例。

借助[跨区域负载均衡](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-disable-crosszone-lb.html)，经典负载均衡器的每个负载均衡器节点会跨所有启用的可用区中的已注册实例平均分配请求。如果禁用了跨区域负载均衡，则每个负载均衡器节点会仅在其可用区中的已注册实例之间平均分配请求。

如果由于运行状况不佳或缩减环境规模而从负载均衡器中删除一个实例，[Connection Draining](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-conn-drain.html) 将为该实例留出一些时间以完成请求，然后再关闭实例和负载均衡器之间的连接。您可以更改为实例预留的用于发送响应的时间量，或完全禁用连接耗尽。

**注意**  
在您使用 Elastic Beanstalk 控制台或 EB CLI 创建环境时，默认情况下将启用 Connection Draining。对于其他客户端，您可以使用[配置选项](#environments-cfg-clb-namespace)启用该功能。

您可以使用高级负载均衡器设置在任意端口上配置侦听器，修改其他粘性会话设置，并将负载均衡器配置为安全地连接到 EC2 实例。这些设置是通过[配置选项](#environments-cfg-clb-namespace)提供的，您可以使用源代码中的配置文件设置这些选项，也可以使用 Elastic Beanstalk API 直接在环境中设置这些选项。在 Elastic Beanstalk 控制台中也提供了其中的很多设置。此外，您还可以将负载均衡器配置为[将访问日志上传](environments-cfg-loadbalancer-accesslogs.md)到 Amazon S3。

## 使用 Elastic Beanstalk 控制台配置经典负载均衡器
<a name="environments-cfg-clb-console"></a>

在创建环境期间或以后运行您的环境时，您可以使用 Elastic Beanstalk 控制台配置经典负载均衡器的端口、HTTPS 证书和其他设置。

**注意**  
在**创建环境**控制台向导中禁用了经典负载均衡器（CLB）选项。如果某个现有的环境已经配置了经典负载均衡器，则可以使用 Elastic Beanstalk 控制台或 [EB CLI](using-features.managing.clone.md#using-features.managing.clone.CLI) [克隆现有环境](using-features.managing.clone.md)，从而创建新环境。您还可以选择使用 EB CLI 或 [AWS CLI](environments-create-awscli.md) 创建配置了经典负载均衡器的新环境。这些命令行工具将使用 CLB 创建一个新环境，即使您的账户中尚不存在该环境。

**在 Elastic Beanstalk 控制台中配置正在运行环境的经典负载均衡器**

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

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

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

1. 在 **Load balancer (负载均衡器)** 配置类别中，选择 **Edit (编辑)**。
**注意**  
如果 **Load balancer (负载均衡器)** 配置类别没有 **Edit (编辑)** 按钮，则表示您的环境没有负载均衡器。要了解如何设置负载均衡器，请参阅[更改环境类型](using-features-managing-env-types.md#using-features.managing.changetype)。

1. 根据环境需要进行经典负载均衡器配置更改。

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

**Topics**
+ [侦听器](#using-features.managing.elb.listeners)
+ [会话](#using-features.managing.elb.sessions)
+ [跨可用区负载均衡](#using-features.managing.elb.cross-zone)
+ [连接耗尽](#using-features.managing.elb.draining)
+ [健康检查](#using-features.managing.elb.healthchecks)

### 侦听器
<a name="using-features.managing.elb.listeners"></a>

可以使用该列表为您的负载均衡器指定侦听器。每个侦听器使用指定协议将指定端口上的传入客户端流量路由到您的实例。最初，该列表显示默认侦听器，它将端口 80 上的传入 HTTP 流量路由到侦听端口 80 上的 HTTP 流量的环境实例服务器。

**注意**  
虽然您无法删除端口 80 默认侦听器，但您可以将其禁用，这通过阻止流量来实现相同的功能。

![\[经典负载均衡器配置 – 编辑侦听器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-clb-listeners.png)


**配置现有的侦听器**

1. 选中表条目旁边的复选框，选择**操作**，然后选择所需的操作。

1. 如果您选择**编辑**，请使用 **经典负载均衡器侦听器** 对话框编辑设置，然后选择**保存**。

例如，您可以编辑默认侦听器并将**协议**从 **HTTP** 更改为 **TCP**（如果您希望负载均衡器按原样转发请求）。这可防止负载均衡器重写标头 (包括 `X-Forwarded-For`)。该方法不适用于粘性会话。

![\[经典负载均衡器配置 – 将默认侦听器的协议更改为 TCP\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-clb-listeners-tcp.png)


**添加侦听器**

1. 选择**添加侦听器**。

1. 在 **经典负载均衡器侦听器** 对话框中，配置所需的设置，然后选择**添加**。

添加安全侦听器是一个常见案例。下图中的示例为端口 443 上的 HTTPS 流量添加侦听器。该侦听器将传入流量路由到侦听端口 443 上的 HTTPS 流量的环境实例服务器。

确保您具有有效的 SSL 证书，然后才能配置 HTTPS 侦听器。请执行以下操作之一：
+ 如果 AWS Certificate Manager (ACM) [在您所在的 AWS 地区可用](https://docs.aws.amazon.com/general/latest/gr/acm.html)，请使用 ACM 创建或导入证书。有关请求 ACM 证书的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[请求证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)。有关将第三方证书导入 ACM 中的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。
+ 如果您所在的[AWS 地区没有 ACM，请将您](https://docs.aws.amazon.com/general/latest/gr/acm.html)现有的证书和密钥上传到 IAM。有关创建证书并将证书上传到 IAM 的更多信息，请参阅《*IAM 用户指南*》中的[使用服务器证书](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingServerCerts.html)。

有关在 Elastic Beanstalk 中配置 HTTPS 和使用证书的更多详细信息，请参阅[为 Elastic Beanstalk 环境配置 HTTPS](configuring-https.md)。

对于 **SSL 证书**，选择 SSL 证书的 ARN。例如，`arn:aws:iam::123456789012:server-certificate/abc/certs/build` 或 `arn:aws:acm:us-east-2:123456789012:certificate/12345678-12ab-34cd-56ef-12345678`。

![\[经典负载均衡器配置 – 添加安全侦听器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-clb-listeners-https.png)


有关在 Elastic Beanstalk 中配置 HTTPS 和使用证书的详细信息，请参阅[为 Elastic Beanstalk 环境配置 HTTPS](configuring-https.md)。

### 会话
<a name="using-features.managing.elb.sessions"></a>

选中或清除**会话粘性已启用**框来启用或禁用粘性会话。使用 **Cookie 持续时间**配置粘性会话的持续时间，最多为 **1000000** 秒。在 **Load balancer ports (负载均衡器端口)** 列表上，选择默认策略 (`AWSEB-ELB-StickinessPolicy`) 应用于的侦听器端口。

![\[经典负载均衡器的会话粘性和持续时间设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-elb-sessions.png)


### 跨可用区负载均衡
<a name="using-features.managing.elb.cross-zone"></a>

选中或清除**跨多可用区的负载均衡已启用**框以启用或禁用跨区域负载均衡。

![\[经典负载均衡器跨区域负载均衡设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-elb-cross-zone.png)


### 连接耗尽
<a name="using-features.managing.elb.draining"></a>

选中或清除**连接耗尽已启用**框来启用或禁用连接耗尽。设置**耗尽超时**，最多为 **3600** 秒。

![\[经典负载均衡器的 Connection Draining 和耗尽超时设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-elb-draining.png)


### 健康检查
<a name="using-features.managing.elb.healthchecks"></a>

可以使用以下设置配置负载均衡器运行状况检查：
+ **Health check path (运行状况检查路径)** – 负载均衡器将运行状况检查请求发送到的路径。如果未设置路径，负载均衡器将尝试在端口 80 上建立 TCP 连接以验证运行状况。
+ **Timeout (超时)** – 等待运行状况检查响应的时间（秒）。
+ **Interval (间隔)** – 单个实例的两次运行状况检查间隔的时间（秒）。间隔必须大于超时。
+ **Unhealthy threshold (不正常阈值)** 和 **Healthy threshold (正常阈值)** – 在 Elastic Load Balancing 更改实例的运行状况之前，实例必须通过或未通过的运行状况检查次数。

![\[经典负载均衡器的运行状况检查设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-elb-healthcheck.png)


**注意**  
Elastic Load Balancing 运行状况检查不会影响环境的 Auto Scaling 组的运行状况检查行为。Amazon A EC2 uto Scaling 不会自动替换未通过 Elastic Load Balancing 运行状况检查的实例，除非您手动将 Amazon A EC2 uto Scaling 配置为这样做。有关详细信息，请参阅 [Elastic Beanstalk 环境的 Auto Scaling 运行状况检查设置](environmentconfig-autoscaling-healthchecktype.md)。

有关运行状况检查以及其对环境的总体运行状况的影响的更多信息，请参阅[基本运行状况报告](using-features.healthstatus.md)。

## 使用 EB CLI 配置经典负载均衡器
<a name="environments-cfg-clb-ebcli"></a>

当您运行 [**eb create**](eb3-create.md) 时，EB CLI 会提示您选择负载均衡器类型。

```
$ eb create
Enter Environment Name
(default is my-app): test-env
Enter DNS CNAME prefix
(default is my-app): test-env-DLW24ED23SF

Select a load balancer type
1) classic
2) application
3) network
(default is 1):
```

按 **Enter** 以选择 `classic`。

您也可以使用 `--elb-type` 选项指定负载均衡器类型。

```
$ eb create test-env --elb-type classic
```

## 经典负载均衡器配置命名空间
<a name="environments-cfg-clb-namespace"></a>

您可以在以下命名空间中找到与经典负载均衡器相关的设置：
+ [`aws:elb:healthcheck`](command-options-general.md#command-options-general-elbhealthcheck) – 配置负载均衡器运行状况检查的阈值、检查间隔和超时。
+ [`aws:elasticbeanstalk:application`](command-options-general.md#command-options-general-elasticbeanstalkapplication) – 配置运行状态检查 URL。
+ [`aws:elb:loadbalancer`](command-options-general.md#command-options-general-elbloadbalancer) – 启用跨区域负载均衡 向负载均衡器分配安全组并覆盖 Elastic Beanstalk 创建的默认安全组。此命名空间还包含一些已弃用的选项，这些选项用于配置已由 `aws:elb:listener` 命名空间中的选项替代的标准侦听器和安全侦听器。
+ [`aws:elb:listener`](command-options-general.md#command-options-general-elblistener) – 在端口 80 上配置默认侦听器、在端口 443 上配置安全侦听器或在任何端口上配置针对任何协议的其他侦听器。如果您指定 `aws:elb:listener` 作为命名空间，设置适用于端口 80 上的默认监听器。如果您指定了端口 (例如 `aws:elb:listener:443`)，则在该端口上配置监听器。
+ [`aws:elb:policies`](command-options-general.md#command-options-general-elbpolicies) – 配置负载均衡器的其他设置。使用此命名空间中的选项在任意端口上配置侦听器，修改其他粘性会话设置，并将负载均衡器配置为安全地连接到 Amazon EC2 实例。

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

**Example .ebextensions/loadbalancer-terminatehttps.config**  
以下示例配置文件将在端口 443 上创建一个 HTTPS 侦听器，分配负载均衡器用于终止安全连接的证书，并禁用端口 80 上的默认侦听器。负载均衡器通过 HTTP: 80 将解密后的请求转发到您环境中的 EC2 实例。  

```
option_settings:
  aws:elb:listener:443:
    ListenerProtocol: HTTPS
    SSLCertificateId: arn:aws:acm:us-east-2:123456789012:certificate/12345678-12ab-34cd-56ef-12345678
    InstancePort: 80
    InstanceProtocol: HTTP
  aws:elb:listener:
    ListenerEnabled: false
```

# 配置 Application Load Balancer
<a name="environments-cfg-alb"></a>

[启用负载平衡](using-features-managing-env-types.md#using-features.managing.changetype)后，您的 AWS Elastic Beanstalk 环境将配备 Elastic Load Balancing 负载均衡器，用于在环境中的实例之间分配流量。Elastic Load Balancing 支持多种负载均衡器类型。要了解更多信息，请参阅 [Elastic Load Balancing 用户指南](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/)。Elastic Beanstalk 可以为您创建负载均衡器，或者让您指定已创建的共享负载均衡器。

本主题介绍 Elastic Beanstalk 创建并专用于您的环境的 [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) 的配置。另请参阅[配置共享 Application Load Balancer](environments-cfg-alb-shared.md)。有关配置 Elastic Beanstalk 支持的所有负载均衡器类型的信息，请参阅[Elastic Beanstalk 环境的负载均衡器](using-features.managing.elb.md)。

**注意**  
您只能在创建环境期间选择您的环境使用的负载均衡器类型。您可以更改设置以管理运行的环境的负载均衡器行为，但不能更改其类型。您也无法从专用负载均衡器切换到共享负载均衡器，反之亦然。

## 简介
<a name="environments-cfg-alb-intro"></a>

Application Load Balancer 检查应用程序网络协议层中的流量以确定请求的路径，以便将不同路径的请求传送到不同的目标。

当您的环境使用 Application Load Balancer 时，Elastic Beanstalk 默认情况下将其配置为执行与经典负载均衡器相同的功能。默认侦听器接收端口 80 上的 HTTP 请求并将它们分配到环境中的实例。您可以使用证书在端口 443 上添加一个安全的侦听器，以解密 HTTPS 流量、配置运行状况检查行为和将访问日志从负载均衡器推送到 Amazon Simple Storage Service (Amazon S3) 存储桶。

**注意**  
与 Classic Load Balancer 或网络负载均衡器不同，应用程序负载均衡器不能有传输层（第 4 层）TCP 或 SSL/TLS 侦听器。它仅支持 HTTP 和 HTTPS 侦听器。此外，它不能使用后端身份验证对负载均衡器和后端实例之间的 HTTPS 连接进行身份验证。

在 Elastic Beanstalk 环境中，您可以使用 Application Load Balancer 将特定路径的流量定向到 Web 服务器实例上的其他进程。使用经典负载均衡器，到一个侦听器的所有流量都将路由到后端实例上的一个端口。使用 Application Load Balancer，您可以在侦听器上配置多个*规则*，以将发往特定路径的请求路由到其他后端进程。您可以使用每个进程侦听的端口配置进程。

例如，您可能运行与主应用程序分开的登录进程。您的环境的实例上的主应用程序接受大部分请求并侦听端口 80，而您的登录进程侦听端口 5000 并接受发送到 `/login` 路径的请求。来自客户端的所有传入请求都是在端口 80 上传送的。通过使用 Application Load Balancer，您可以为端口 80 上的传入流量配置单个侦听器，并使用两个规则将流量路由到两个单独的进程，具体取决于请求中的路径。您可以添加自定义规则，将传输到 `/login` 的流量路由到侦听 5000 端口的登录进程。默认规则将所有其他流量路由到侦听端口 80 的主应用程序进程。

Application Load Balancer 规则将请求映射到*目标组*。在 Elastic Beanstalk 中，目标组是由*进程* 表示的。您可以为进程配置协议、端口和运行状况检查设置。进程代表在环境中的实例上运行的进程。默认进程是在您的应用程序前面运行的反向代理 (nginx 或 Apache) 的端口 80 上的一个侦听器。

**注意**  
在 Elastic Beanstalk 外部，一个目标组将映射到一组实例。一个侦听器可使用多个规则和多个目标组来基于路径将流量路由到不同的实例。在 Elastic Beanstalk 内部，您的环境中的所有实例均相同，因此会对在不同端口上侦听的过程进行区分。

经典负载均衡器将单个运行状况检查路径用于整个环境。使用 Application Load Balancer 时，每个进程都有一个单独的运行状况检查路径，由负载均衡器和 Elastic Beanstalk 增强型运行状况监控来监控。

要使用 Application Load Balancer，您的环境必须在默认或自定义 VPC 中，且必须有一个具有标准权限集的服务角色。如果您有较旧的服务角色，您可能需要对其[更新权限](iam-instanceprofile.md#iam-instanceprofile-addperms)以包含 `elasticloadbalancing:DescribeTargetHealth` 和 `elasticloadbalancing:DescribeLoadBalancers`。有关 Application Load Balancer 的更多信息，请参阅[什么是 Application Load Balancer？](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/)

**注意**  
Application Load Balancer 运行状况检查不使用 Elastic Beanstalk 运行状况检查路径。相反，它使用为每个进程单独配置的特定路径。

## 使用 Elastic Beanstalk 控制台配置 Application Load Balancer
<a name="environments-cfg-alb-console"></a>

在创建环境期间或以后运行您的环境时，您可以使用 Elastic Beanstalk 控制台配置 Application Load Balancer 的侦听器、进程和规则。

**环境创建期间，在 Elastic Beanstalk 控制台中配置 Application Load Balancer**

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

1. 在导航窗格中，选择**环境**。

1. 选择 [Create a new environment (创建新环境)](environments-create-wizard.md) 以开始创建环境。

1. 在向导的主页上，在选择**创建环境**之前，选择**配置更多选项**。

1. 选择**高可用性**配置预设。

   或者，在**容量**配置类别中配置**负载均衡**环境类型。有关更多信息，请参阅 [Capacity](environments-create-wizard.md#environments-create-wizard-capacity)。

1. 在 **Load balancer (负载均衡器)** 配置类别中，选择 **Edit (编辑)**。

1. 如果尚未选择 **Application Load Balancer** 和 **Dedicated (专用)** 选项，请选择它们。  
![\[Elastic Load Balancing 配置页面 - 选择负载均衡器类型\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-type-chooser.png)

1. 根据环境需要进行任何 Application Load Balancer 配置更改。

1. 选择**保存**，然后进行您的环境所需的任何其他配置更改。

1. 选择**创建环境**。

**在 Elastic Beanstalk 控制台中配置正在运行环境的 Application Load Balancer**

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

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

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

1. 在 **Load balancer (负载均衡器)** 配置类别中，选择 **Edit (编辑)**。
**注意**  
如果 **Load balancer (负载均衡器)** 配置类别没有 **Edit (编辑)** 按钮，则表示您的环境没有负载均衡器。要了解如何设置负载均衡器，请参阅[更改环境类型](using-features-managing-env-types.md#using-features.managing.changetype)。

1. 根据环境需要进行 Application Load Balancer 配置更改。

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

**Topics**
+ [侦听器](#environments-cfg-alb-console-listeners)
+ [进程](#environments-cfg-alb-console-processes)
+ [Rules](#environments-cfg-alb-console-rules)
+ [访问日志捕获](#environments-cfg-alb-console-logs)

### 侦听器
<a name="environments-cfg-alb-console-listeners"></a>

可以使用该列表为您的负载均衡器指定侦听器。每个侦听器使用指定协议将在指定端口上传入的客户端流量路由到实例上的一个或多个进程。最初，该列表显示默认侦听器，它将端口 80 上的传入 HTTP 流量路由到名为 **default** 的进程。

![\[Application Load Balancer 配置 – 侦听器列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-listeners.png)


**配置现有的侦听器**

1. 选中表条目旁边的复选框，然后选择**操作**和**编辑**。

1. 使用 **Application Load Balancer 侦听器**对话框编辑设置，然后选择**保存**。

**添加侦听器**

1. 选择**添加侦听器**。

1. 在 **Application Load Balancer 侦听器**对话框中，配置所需的设置，然后选择**添加**。

使用 **Application Load Balancer 侦听器**对话框中的设置选择侦听器用于侦听流量的端口和协议，以及要将流量路由到的进程。如果您选择 HTTPS 协议，请配置 SSL 设置。

![\[Application Load Balancer 侦听器对话框\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-listener-dialog.png)


确保您具有有效的 SSL 证书，然后才能配置 HTTPS 侦听器。请执行以下操作之一：
+ 如果 AWS Certificate Manager (ACM) [在您所在的 AWS 地区可用](https://docs.aws.amazon.com/general/latest/gr/acm.html)，请使用 ACM 创建或导入证书。有关请求 ACM 证书的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[请求证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)。有关将第三方证书导入 ACM 中的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。
+ 如果您所在的[AWS 地区没有 ACM，请将您](https://docs.aws.amazon.com/general/latest/gr/acm.html)现有的证书和密钥上传到 IAM。有关创建证书并将证书上传到 IAM 的更多信息，请参阅《*IAM 用户指南*》中的[使用服务器证书](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingServerCerts.html)。

有关在 Elastic Beanstalk 中配置 HTTPS 和使用证书的更多详细信息，请参阅[为 Elastic Beanstalk 环境配置 HTTPS](configuring-https.md)。

### 进程
<a name="environments-cfg-alb-console-processes"></a>

可以使用该列表为您的负载均衡器指定进程。进程是侦听器将流量路由到的目标。每个侦听器使用指定协议将在指定端口上传入的客户端流量路由到实例上的一个或多个进程。最初，该列表显示默认进程，它侦听端口 80 上的传入 HTTP 流量。

![\[Application Load Balancer 配置 – 进程列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-processes.png)


您可以编辑现有进程的设置或添加新的进程。要在列表中开始编辑或添加进程，请使用为[侦听器列表](#environments-cfg-alb-console-listeners)列出的相同步骤。将打开**环境进程**对话框。

**Topics**
+ [定义](#environments-cfg-alb-console-process-definition)
+ [健康检查](#environments-cfg-alb-console-process-healthchecks)
+ [会话](#environments-cfg-alb-console-process-sessions)

#### 定义
<a name="environments-cfg-alb-console-process-definition"></a>

可以使用以下设置定义进程：其**名称**以及它在其中侦听请求的**端口**和**协议**。

![\[Application Load Balancer 进程的名称、端口和协议设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition.png)


#### 健康检查
<a name="environments-cfg-alb-console-process-healthchecks"></a>

可以使用以下设置配置进程运行状况检查：
+ **HTTP code (HTTP 代码)** – 指定正常运行的进程的 HTTP 状态代码。
+ **Path (路径)** – 进程的运行状况检查请求路径。
+ **Timeout (超时)** – 等待运行状况检查响应的时间（秒）。
+ **Interval (间隔)** – 单个实例的两次运行状况检查间隔的时间（秒）。间隔必须大于超时。
+ **Unhealthy threshold (不正常阈值)** 和 **Healthy threshold (正常阈值)** – 在 Elastic Load Balancing 更改实例的运行状况之前，实例必须通过或未通过的运行状况检查次数。
+ **Deregistration delay (取消注册延迟)** – 在取消注册实例之前等待活动请求完成的时间（秒）。

![\[Application Load Balancer 进程的运行状况检查设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-healthcheck.png)


**注意**  
Elastic Load Balancing 运行状况检查不会影响环境的 Auto Scaling 组的运行状况检查行为。Amazon A EC2 uto Scaling 不会自动替换未通过 Elastic Load Balancing 运行状况检查的实例，除非您手动将 Amazon A EC2 uto Scaling 配置为这样做。有关详细信息，请参阅 [Elastic Beanstalk 环境的 Auto Scaling 运行状况检查设置](environmentconfig-autoscaling-healthchecktype.md)。

有关运行状况检查以及其对环境的总体运行状况的影响的更多信息，请参阅[基本运行状况报告](using-features.healthstatus.md)。

#### 会话
<a name="environments-cfg-alb-console-process-sessions"></a>

选中或清除**粘性策略已启用**框来启用或禁用粘性会话。使用 **Cookie 持续时间**配置粘性会话的持续时间，最多为 **604800** 秒。

![\[Application Load Balancer 进程的会话粘性设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-sessions.png)


### Rules
<a name="environments-cfg-alb-console-rules"></a>

可以使用该列表为负载均衡器指定自定义侦听器规则。规则将侦听器在特定路径模式上接收的请求映射到目标进程。每个侦听器可以具有多个规则，以将不同路径上的请求路由到实例上的不同进程。

规则具有数字优先级，它确定将规则应用于传入请求的优先顺序。对于您添加的每个新侦听器，Elastic Beanstalk 添加一个默认规则，它将侦听器的所有流量路由到默认进程。默认规则的优先顺序最低；如果同一侦听器没有与传入请求匹配的任何其他规则，则应用该规则。起初在您还未添加自定义规则时，该列表是空的。不会显示所有侦听器的默认规则。

![\[Application Load Balancer 配置 – 规则列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-rules.png)


您可以编辑现有规则的设置或添加新的规则。要在列表中开始编辑或添加规则，请使用为[侦听器列表](#environments-cfg-alb-console-listeners)列出的相同步骤。将打开**侦听器规则**对话框并包含以下设置：
+ **Name (名称)** – 规则的名称。
+ **Listener port (侦听器端口)** – 规则应用到的侦听器端口。
+ **Priority (优先级)** – 规则的优先级。优先级序号越小，优先顺序越靠前。侦听器的规则优先级必须是唯一的。
+ **Match conditions (匹配条件)** – 规则应用到的请求 URL 条件的列表。有两种类型的条件：**HostHeader**（网址的网域部分）和 **PathPattern**（网址的路径部分）。您最多可以添加五个条件。每个条件值的长度最多为 128 个字符，并且可以包含通配符。
+ **Process (进程)** – 负载均衡器将与规则匹配的请求路由到的进程。

在编辑任何现有规则时，您无法更改其**名称**和**侦听器端口**。

![\[Application Load Balancer 配置 – 规则列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-rule-dialog.png)


### 访问日志捕获
<a name="environments-cfg-alb-console-logs"></a>

使用这些设置配置 Elastic Load Balancing ，使其捕获包含有关发送到 Application Load Balancer 的请求详细信息的日志。默认情况下，已禁用访问日志捕获。在启用 **Store logs (存储日志)** 时，Elastic Load Balancing 将日志存储在您配置的 **S3 bucket (S3 存储桶)** 中。**Prefix (前缀)** 设置为日志指定存储桶中的顶级文件夹。Elastic Load Balancing 将日志放置在您前缀下名为 `AWSLogs` 的文件夹中。如果您不指定前缀，则 Elastic Load Balancing 会将其文件夹置于存储桶的根级。

**注意**  
如果您为访问日志捕获配置的 Amazon S3 存储桶不是 Elastic Beanstalk 为您的账户创建的存储桶，请务必为您的 (IAM) 用户添加具有相应权限 AWS Identity and Access Management 的用户策略。Elastic Beanstalk 提供的[托管用户策略](AWSHowTo.iam.managed-policies.md)仅涵盖对 Elastic Beanstalk 托管资源的权限。

有关访问日志的详细信息，包括权限和其他要求，请参阅 [Application Load Balancer 的访问日志](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html)。

![\[Application Load Balancer 配置 – 访问日志\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-logs.png)


## 示例：具有安全侦听器和两个进程的 Application Load Balancer
<a name="environments-cfg-alb-console-example"></a>

在此示例中，您的应用程序需要 end-to-end流量加密和单独的处理管理请求的流程。

为了配置您的环境的 Application Load Balancer 以满足这些要求，您删除默认侦听器，添加一个 HTTPS 侦听器，指示默认进程侦听端口 443 的 HTTPS，并为不同路径上的管理流量添加一个进程和侦听器规则。

**为该示例配置负载均衡器**

1. *添加安全侦听器。*对于**端口**，输入 **443**。对于**协议**，选择 **HTTPS**。对于 **SSL 证书**，选择 SSL 证书的 ARN。例如，**arn:aws:iam::123456789012:server-certificate/abc/certs/build** 或 **arn:aws:acm:us-east-2:123456789012:certificate/12345678-12ab-34cd-56ef-12345678**。

   对于**默认进程**，保持选中 **default**。  
![\[Application Load Balancer 配置 – 添加安全侦听器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-listeners-https.png)

   您现在可以查看列表上的其他侦听器。  
![\[Application Load Balancer 配置示例 – 具有两个侦听器的侦听器列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-listeners2.png)

1. *禁用默认端口 80 HTTP 侦听器。*对于默认侦听器，关闭**已启用**选项。  
![\[Application Load Balancer 配置示例 – 禁用默认侦听器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-listeners-disabled.png)

1. *将默认进程配置为 HTTPS。*选择默认进程，然后为**操作**选择**编辑**。对于**端口**，输入 **443**。对于**协议**，选择 **HTTPS**。  
![\[Application Load Balancer 配置示例 – 将默认进程配置为使用 HTTPS\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition-https.png)

1. *添加一个管理进程。*对于**名称**，键入 **admin**。对于**端口**，输入 **443**。对于**协议**，选择 **HTTPS**。在**运行状况检查**下，为**路径**输入 **/admin**。  
![\[Application Load Balancer 配置示例 – 添加管理进程\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition-https-admin.png)

1. *为管理流量添加一个规则。*对于**名称**，键入 **admin**。对于 **Listener port (侦听器端口)**，键入 **443**。在 “**匹配条件**” 中，添加值为 a **PathPattern****/admin/\$1**。对于**进程**，选择 **admin**。  
![\[Application Load Balancer 配置示例 – 添加管理规则\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-rule-https-admin.png)

## 使用 EB CLI 配置 Application Load Balancer
<a name="environments-cfg-alb-ebcli"></a>

当您运行 [**eb create**](eb3-create.md) 时，EB CLI 会提示您选择负载均衡器类型。

```
$ eb create
Enter Environment Name
(default is my-app): test-env
Enter DNS CNAME prefix
(default is my-app): test-env-DLW24ED23SF

Select a load balancer type
1) classic
2) application
3) network
(default is 2):
```

您也可以使用 `--elb-type` 选项指定负载均衡器类型。

```
$ eb create test-env --elb-type application
```

## Application Load Balancer 命名空间
<a name="environments-cfg-alb-namespaces"></a>

您可以在以下命名空间中找到与 Application Load Balancer 相关的设置：
+ `aws:elasticbeanstalk:environment` – 选择用于环境的负载均衡器类型。Application Load Balancer 的值为 `application`。

  无法在配置文件 ([.Ebextensions](ebextensions.md)) 中设置此选项。
+ `aws:elbv2:loadbalancer` – 将访问日志和应用于 Application Load Balancer 的其他设置作为一个整体配置。
+ `aws:elbv2:listener` – 在 Application Load Balancer 上配置侦听器。这些设置将映射到经典负载均衡器的 `aws:elb:listener` 中的设置。
+ `aws:elbv2:listenerrule` – 配置根据请求路径将流量路由到不同过程的规则。规则对于 Application Load Balancers 唯一。
+ `aws:elasticbeanstalk:environment:process` – 配置运行状况检查并为在您的环境的实例上运行的过程指定端口和协议。端口和协议设置将映射到经典负载均衡器上侦听器的 `aws:elb:listener` 中的实例端口和实例协议设置。运行状况检查设置将映射到 `aws:elb:healthcheck` 和 `aws:elasticbeanstalk:application` 命名空间中的设置。

**Example .ebextensions/ .config alb-access-logs**  
以下配置文件为带有 Application Load Balancer 的环境启用访问日志上传：  

```
option_settings:
  aws:elbv2:loadbalancer:
    AccessLogsS3Bucket: amzn-s3-demo-bucket
    AccessLogsS3Enabled: 'true'
    AccessLogsS3Prefix: beanstalk-alb
```

**Example .ebextensions/ .config alb-default-process**  
以下配置文件将修改默认进程的运行状况检查设置和粘性设置。  

```
option_settings:
  aws:elasticbeanstalk:environment:process:default:
    DeregistrationDelay: '20'
    HealthCheckInterval: '15'
    HealthCheckPath: /
    HealthCheckTimeout: '5'
    HealthyThresholdCount: '3'
    UnhealthyThresholdCount: '5'
    Port: '80'
    Protocol: HTTP
    StickinessEnabled: 'true'
    StickinessLBCookieDuration: '43200'
```

**Example .ebextensions/ .config alb-secure-listener**  
以下配置文件将在端口 443 上添加一个安全侦听器和匹配进程。  

```
option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
    Protocol: HTTPS
    SSLCertificateArns: arn:aws:acm:us-east-2:123456789012:certificate/21324896-0fa4-412b-bf6f-f362d6eb6dd7
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'
    Protocol: HTTPS
```

**Example .ebextensions/ .config alb-admin-rule**  
以下配置文件将添加一个安全侦听器，该侦听器具有一个规则，它使用请求路径 `/admin` 将流量路由到名为 `admin` 的在端口 4443 上进行侦听的进程。  

```
option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
    Protocol: HTTPS
    Rules: admin
    SSLCertificateArns: arn:aws:acm:us-east-2:123456789012:certificate/21324896-0fa4-412b-bf6f-f362d6eb6dd7
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'
    Protocol: HTTPS
  aws:elasticbeanstalk:environment:process:admin:
    HealthCheckPath: /admin
    Port: '4443'
    Protocol: HTTPS
  aws:elbv2:listenerrule:admin:
    PathPatterns: /admin/*
    Priority: 1
    Process: admin
```

# 配置共享 Application Load Balancer
<a name="environments-cfg-alb-shared"></a>

[启用负载平衡](using-features-managing-env-types.md#using-features.managing.changetype)后，您的 AWS Elastic Beanstalk 环境将配备 Elastic Load Balancing 负载均衡器，用于在环境中的实例之间分配流量。Elastic Load Balancing 支持多种负载均衡器类型。要了解更多信息，请参阅 [Elastic Load Balancing 用户指南](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/)。Elastic Beanstalk 可以为您创建负载均衡器，或让您指定您已创建的共享负载均衡器。

本主题介绍您创建的并与环境关联的共享 [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) 配置。另请参阅[配置 Application Load Balancer](environments-cfg-alb.md)。有关配置 Elastic Beanstalk 支持的所有负载均衡器类型的信息，请参阅[Elastic Beanstalk 环境的负载均衡器](using-features.managing.elb.md)。

**注意**  
您只能在创建环境期间选择您的环境使用的负载均衡器类型。您可以更改设置以管理运行的环境的负载均衡器行为，但不能更改其类型。您也无法从专用负载均衡器切换到共享负载均衡器，反之亦然。

## 简介
<a name="environments-cfg-alb-shared-intro"></a>

*共享负载均衡器*是您使用亚马逊弹性计算云 (Amazon EC2) 服务自行创建和管理的负载均衡器，然后在多个 Elastic Beanstalk 环境中使用。

在您创建负载均衡的自动扩展环境并选择使用 Application Load Balancer 时，Elastic Beanstalk 默认情况下都会相应创建一个专用于您的环境的负载均衡器。要了解什么是 Application Load Balancer 以及它如何用于 Elastic Beanstalk 环境，请参阅为 Elastic Beanstalk 配置 Application Load Balancer 的[简介](environments-cfg-alb.md#environments-cfg-alb-intro)。

在某些情况下，您可能想要节省拥有多个专用负载均衡器的成本。当您拥有多个环境时，这可能会很有帮助，例如，当您的应用程序是一组微服务，而不是一个整体服务时。在这种情况下，您可以选择使用共享的负载均衡器。

要使用共享负载均衡器，请先在 Amazon 中创建该负载均衡器， EC2 然后添加一个或多个侦听器。在创建 Elastic Beanstalk 环境期间，您随之提供负载均衡器并选择侦听器端口。Elastic Beanstalk 将侦听器与您环境中的默认进程相关联。您可以添加自定义侦听器规则，以将流量从特定主机标头和路径路由到其他环境进程。

Elastic Beanstalk 将标签添加到共享负载均衡器。标签名称为 `elasticbeanstalk:shared-elb-environment-count`，其值是共享此负载均衡器的环境数。

使用共享负载均衡器与使用专用负载均衡器在多个方面有所不同。


| 关于 | 专用 Application Load Balancer | 共享 Application Load Balancer | 
| --- | --- | --- | 
|  管理  |  Elastic Beanstalk 创建和管理负载均衡器、侦听器、侦听器规则和进程（目标组）。Elastic Beanstalk 还会在您终止环境时删除它们。如果选择该选项，Elastic Beanstalk 可以设置负载均衡器访问日志捕获。  |  您可以在 Elastic Beanstalk 之外创建并管理负载均衡器和侦听器。Elastic Beanstalk 创建并管理默认规则和默认进程，您可以添加规则和进程。Elastic Beanstalk 将删除环境创建期间添加的侦听器规则和进程。  | 
|  侦听器规则  |  Elastic Beanstalk 为每个侦听器创建一个默认规则，以将所有流量路由到侦听器的默认进程。  |  Elastic Beanstalk 仅将默认规则与端口 80 侦听器关联（如果存在）。如果选择不同的默认侦听器端口，则必须将默认规则与其关联（Elastic Beanstalk 控制台和 EB CLI 为您执行此操作）。 为解决共享负载均衡器的各环境间的侦听器规则条件冲突，Elastic Beanstalk 将环境的 CNAME 作为主机标头条件添加到侦听器规则中。 在共享负载均衡器的环境间，Elastic Beanstalk 将规则优先级设置视为相对优先级，并在创建过程中将其映射到绝对优先级。  | 
|  安全组  |  Elastic Beanstalk 创建默认安全组并将其附加到负载均衡器。  |  您可以配置一个或多个安全组以用于负载均衡器。如果您未配置，Elastic Beanstalk 将检查 Elastic Beanstalk 管理的某个现有安全组是否已连接到负载均衡器。如果没有，Elastic Beanstalk 将创建一个安全组并将其附加到负载均衡器。当最后一个共享负载均衡器的环境终止时，Elastic Beanstalk 将删除此安全组。  | 
|  更新  |  您可以在创建环境后更新您的 Application Load Balancer。您可以编辑侦听器、侦听器规则和进程。您可以配置负载均衡器访问日志捕获。  |  您不能使用 Elastic Beanstalk 在 Application Load Balancer 中配置访问日志捕获，也无法在创建环境后更新侦听器和侦听器规则。您只能更新进程（目标组）。要配置访问日志捕获以及更新侦听器和侦听器规则，请使用 Amazon EC2。  | 

## 使用 Elastic Beanstalk 控制台配置共享 Application Load Balancer
<a name="environments-cfg-alb-shared-console"></a>

环境创建期间，您可以使用 Elastic Beanstalk 控制台配置共享 Application Load Balancer。您可以选择账户的其中一个可共享的负载均衡器以供在环境中使用，选择默认侦听器端口，并配置其他进程和侦听器规则。

创建环境后，您无法在 Application Load Balancer 控制台中编辑共享 Application Load Balancer 配置。要配置侦听器、侦听器规则、进程（目标组）和访问日志捕获，请使用 Amazon EC2。

**环境创建期间，在 Elastic Beanstalk 控制台中配置 Application Load Balancer**

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

1. 在导航窗格中，选择**环境**。

1. 选择 [Create a new environment (创建新环境)](environments-create-wizard.md) 以开始创建环境。

1. 在向导的主页上，在选择**创建环境**之前，选择**配置更多选项**。

1. 选择**高可用性**配置预设。

   或者，在**容量**配置类别中配置**负载均衡**环境类型。有关更多信息，请参阅 [Capacity](environments-create-wizard.md#environments-create-wizard-capacity)。

1. 在 **Load balancer (负载均衡器)** 配置类别中，选择 **Edit (编辑)**。

1. 如果尚未选择该选项，请选择 **Application Load Balancer** 选项，然后选择 **Shared (已共享)** 选项。  
![\[Elastic Load Balancing 配置页面 - 选择负载均衡器类型\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-type-chooser.png)

1. 根据环境需要进行任何共享 Application Load Balancer 配置更改。

1. 选择**保存**，然后进行您的环境所需的任何其他配置更改。

1. 选择**创建环境**。

**Topics**
+ [共享 Application Load Balancer](#environments-cfg-alb-shared-console-alb)
+ [进程](#environments-cfg-alb-shared-console-processes)
+ [Rules](#environments-cfg-alb-shared-console-rules)

### 共享 Application Load Balancer
<a name="environments-cfg-alb-shared-console-alb"></a>

使用此部分可以为您的环境选择共享的 Application Load Balancer 并配置默认流量路由。

在此处配置共享应用程序负载均衡器之前，请先使用 Amazon 在您的账户中定义至少一个 EC2 要与至少一个侦听器共享的应用程序负载均衡器。如果您尚未执行此操作，则可以选择 **Manage load balancers (管理负载均衡器)**。Elastic Beanstalk 在新的浏览器选项 EC2 卡中打开亚马逊控制台。

在 Elastic Beanstalk 外部配置完共享的负载均衡器后，请在此控制台部分配置以下设置：
+ **Load balancer ARN (负载均衡器 ARN)** – 要在此环境中使用的共享的负载均衡器。从负载均衡器列表中进行选择，或输入负载均衡器 Amazon Resource Name (ARN)。
+ **Default listener port (默认侦听器端口)** – 共享的负载均衡器所侦听的侦听器端口。从现有侦听器端口列表中进行选择。来自此侦听器的流量（在主机标头中具有环境的 CNAME）将路由到此环境中的默认进程。

![\[Application Load Balancer 配置 – 选择共享的负载均衡器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-alb.png)


### 进程
<a name="environments-cfg-alb-shared-console-processes"></a>

使用该列表为共享的负载均衡器指定进程。进程是侦听器将流量路由到的目标。最初，列表显示默认进程，该进程从默认侦听器接收流量。

![\[Application Load Balancer 配置 – 进程列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-processes.png)


**配置现有进程**

1. 选中表条目旁边的复选框，然后选择**操作**和**编辑**。

1. 使用**环境进程**对话框编辑设置，然后选择**保存**。

**添加进程**

1. 选择**添加进程**。

1. 在**环境进程**对话框中，配置所需的设置，然后选择**添加**。

**Topics**
+ [定义](#environments-cfg-alb-console-process-definition)
+ [健康检查](#environments-cfg-alb-shared-console-process-healthchecks)
+ [会话](#environments-cfg-alb-shared-console-process-sessions)

#### 定义
<a name="environments-cfg-alb-console-process-definition"></a>

可以使用以下设置定义进程：其**名称**以及它在其中侦听请求的**端口**和**协议**。

![\[Application Load Balancer 进程的名称、端口和协议设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition.png)


#### 健康检查
<a name="environments-cfg-alb-shared-console-process-healthchecks"></a>

可以使用以下设置配置进程运行状况检查：
+ **HTTP code (HTTP 代码)** – 指定正常运行的进程的 HTTP 状态代码。
+ **Path (路径)** – 进程的运行状况检查请求路径。
+ **Timeout (超时)** – 等待运行状况检查响应的时间（秒）。
+ **Interval (间隔)** – 单个实例的两次运行状况检查间隔的时间（秒）。间隔必须大于超时。
+ **Unhealthy threshold (不正常阈值)** 和 **Healthy threshold (正常阈值)** – 在 Elastic Load Balancing 更改实例的运行状况之前，实例必须通过或未通过的运行状况检查次数。
+ **Deregistration delay (取消注册延迟)** – 在取消注册实例之前等待活动请求完成的时间（秒）。

![\[Application Load Balancer 进程的运行状况检查设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-healthcheck.png)


**注意**  
Elastic Load Balancing 运行状况检查不会影响环境的 Auto Scaling 组的运行状况检查行为。Amazon A EC2 uto Scaling 不会自动替换未通过 Elastic Load Balancing 运行状况检查的实例，除非您手动将 Amazon A EC2 uto Scaling 配置为这样做。有关详细信息，请参阅 [Elastic Beanstalk 环境的 Auto Scaling 运行状况检查设置](environmentconfig-autoscaling-healthchecktype.md)。

有关运行状况检查以及其对环境的总体运行状况的影响的更多信息，请参阅[基本运行状况报告](using-features.healthstatus.md)。

#### 会话
<a name="environments-cfg-alb-shared-console-process-sessions"></a>

选中或清除**粘性策略已启用**框来启用或禁用粘性会话。使用 **Cookie 持续时间**配置粘性会话的持续时间，最多为 **604800** 秒。

![\[Application Load Balancer 进程的会话粘性设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-sessions.png)


### Rules
<a name="environments-cfg-alb-shared-console-rules"></a>

使用该列表为共享的负载均衡器指定自定义侦听器规则。规则将侦听器在特定路径模式上接收的请求映射到目标进程。每个侦听器可以有多个规则，将不同路径上的请求路由到共享侦听器的不同环境的实例上的不同进程。

规则具有数字优先级，它确定将规则应用于传入请求的优先顺序。Elastic Beanstalk 添加了一个默认规则，该规则将所有默认侦听器的流量路由到新环境的默认进程。默认规则的优先顺序最低；如果同一侦听器没有与传入请求匹配的任何其他规则，则应用该规则。起初在您还未添加自定义规则时，该列表是空的。不显示默认规则。

![\[Application Load Balancer 配置 – 规则列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-rules.png)


您可以编辑现有规则的设置或添加新的规则。要在列表中开始编辑或添加规则，请使用为[进程列表](#environments-cfg-alb-shared-console-processes)列出的相同步骤。将打开**侦听器规则**对话框并包含以下设置：
+ **Name (名称)** – 规则的名称。
+ **Listener port (侦听器端口)** – 规则应用到的侦听器端口。
+ **Priority (优先级)** – 规则的优先级。优先级序号越小，优先顺序越靠前。侦听器的规则优先级必须是唯一的。Elastic Beanstalk 将规则优先级视为跨共享环境的相对优先级，并在创建过程中将其映射到绝对优先级。
+ **Match conditions (匹配条件)** – 规则应用到的请求 URL 条件的列表。有两种类型的条件：**HostHeader**（网址的网域部分）和 **PathPattern**（网址的路径部分）。为环境子域保留了一个条件，您最多可以添加四个条件。每个条件值的长度最多为 128 个字符，并且可以包含通配符。
+ **Process (进程)** – 负载均衡器将与规则匹配的请求路由到的进程。

![\[Application Load Balancer 配置 – 规则列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-rule-dialog.png)


## 示例：使用共享的 Application Load Balancer 来保护 micro-service-based应用程序安全
<a name="environments-cfg-alb-shared-console-example"></a>

在此示例中，您的应用程序由几个微服务组成，每个微服务都作为一个 Elastic Beanstalk 环境实现。此外，您还需要对 end-to-end流量进行加密。我们将演示其中一个微服务环境，该环境具有用于用户请求的主流程和用于处理管理请求的单独流程。

要满足这些要求，请使用 Amazon 创建 A EC2 pplication Load Balancer，供您在微服务之间共享该负载均衡器。在端口 443 和 HTTPS 协议上添加安全侦听器。然后，将多个 SSL 证书添加到侦听器，每个微服务域一个。有关创建应用程序负载均衡器和安全侦听器的详细信息，请参阅《*应用程序负载均衡器用户指南*》中的[创建应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)和[为应用程序负载均衡器创建 HTTPS 侦听器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html)。

在 Elastic Beanstalk 中，将每个微服务环境配置为使用共享 Application Load Balancer，并将默认侦听器端口设置为 443。对于我们在此演示的特定环境，指示默认进程侦听端口 443 上的 HTTPS，并为不同路径上的管理员流量添加进程和侦听器规则。

**为该示例配置共享的负载均衡器**

1. 在 **Shared Application Load Balancer（共享 Application Load Balancer）**部分中，选择您的负载均衡器，对于 **Default listener port（默认侦听器端口）**，选择 **443**。如果侦听器端口是负载均衡器拥有的唯一侦听器，则应该已选择该端口。  
![\[Application Load Balancer 配置 – 添加安全侦听器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-example-alb.png)

1. *将默认进程配置为 HTTPS。*选择默认进程，然后为**操作**选择**编辑**。对于**端口**，输入 **443**。对于**协议**，选择 **HTTPS**。  
![\[Application Load Balancer 配置示例 – 将默认进程配置为使用 HTTPS\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition-https.png)

1. *添加一个管理进程。*对于**名称**，请输入 **admin**。对于**端口**，输入 **443**。对于**协议**，选择 **HTTPS**。在**运行状况检查**下，为**路径**键入 **/admin**。  
![\[Application Load Balancer 配置示例 – 添加管理进程\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition-https-admin.png)

1. *为管理流量添加一个规则。*对于**名称**，请输入 **admin**。对于**侦听器端口**，输入 **443**。在 “**匹配条件**” 中，添加值为 a **PathPattern****/admin/\$1**。对于**进程**，选择 **admin**。  
![\[Application Load Balancer 配置示例 – 添加管理规则\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-rule-https-admin.png)

## 使用 EB CLI 配置共享 Application Load Balancer
<a name="environments-cfg-alb-shared-ebcli"></a>

当您运行 [**eb create**](eb3-create.md) 时，EB CLI 会提示您选择负载均衡器类型。如果您选择 `application`（默认设置），并且您的账户至少有一个可共享的 Application Load Balancer，EB CLI 还会询问您是否要使用共享的 Application Load Balancer。如果回答 **y**，还会提示您选择负载均衡器和默认端口。

```
$ eb create
Enter Environment Name
(default is my-app): test-env
Enter DNS CNAME prefix
(default is my-app): test-env-DLW24ED23SF

Select a load balancer type
1) classic
2) application
3) network
(default is 2): 

Your account has one or more sharable load balancers. Would you like your new environment to use a shared load balancer?(y/N) y

Select a shared load balancer
1)MySharedALB1 - arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB1/6d69caa75b15d46e
2)MySharedALB2 - arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8
(default is 1): 2

Select a listener port for your shared load balancer
1) 80
2) 100
3) 443
(default is 1): 3
```

还可以使用命令选项指定共享的负载均衡器。

```
$ eb create test-env --elb-type application --shared-lb MySharedALB2 --shared-lb-port 443
```

## 共享 Application Load Balancer 命名空间
<a name="environments-cfg-alb-shared-namespaces"></a>

您可以在以下命名空间中找到与共享 Application Load Balancer 相关的设置：
+ `aws:elasticbeanstalk:environment` – 选择环境的负载均衡器类型，并告知 Elastic Beanstalk 您将使用共享的负载均衡器。

  无法在配置文件 ([.Ebextensions](ebextensions.md)) 中设置这两个选项。
+ `aws:elbv2:loadbalancer` – 配置共享 Application Load Balancer ARN 和安全组。
+ `aws:elbv2:listener` – 通过列出侦听器规则将共享 Application Load Balancer 的侦听器与环境进程相关联。
+ `aws:elbv2:listenerrule` – 配置根据请求路径将流量路由到不同进程的侦听器规则。规则对于 Application Load Balancer 是唯一的，无论是专用还是共享。
+ `aws:elasticbeanstalk:environment:process` – 配置运行状况检查并为在您的环境的实例上运行的过程指定端口和协议。

**Example .ebextensions/ .config application-load-balancer-shared**  
要开始使用共享 Application Load Balancer，请使用 Elastic Beanstalk 控制台、EB CLI 或 API 将负载均衡器类型设置为 `application`，然后选择使用共享的负载均衡器。使用[配置文件](ebextensions.md)以配置共享的负载均衡器。  

```
option_settings:
  aws:elbv2:loadbalancer:
    SharedLoadBalancer: arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8
```

**注意**  
您只能在创建环境时配置此选项。

**Example .ebextensions/ .config alb-shared-secure-listener**  
以下配置文件为共享的负载均衡器选择端口 443 上的默认安全侦听器，并将默认进程设置为侦听端口 443。  

```
option_settings:
  aws:elbv2:loadbalancer:
    SharedLoadBalancer: arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8
  aws:elbv2:listener:443:
    rules: default
  aws:elasticbeanstalk:environment:process:default:
    Port: '443'
    Protocol: HTTPS
```

**Example .ebextensions/ .config alb-shared-admin-rule**  
以下配置文件在上一个示例的基础上构建，并添加了一条规则，该规则将请求路径为 `/admin` 的流量路由到一个名为 `admin` 的进程，该进程在端口 4443 上进行侦听。  

```
option_settings:
  aws:elbv2:loadbalancer:
    SharedLoadBalancer: arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8
  aws:elbv2:listener:443:
    rules: default,admin
  aws:elasticbeanstalk:environment:process:default:
    Port: '443'
    Protocol: HTTPS
  aws:elasticbeanstalk:environment:process:admin:
    HealthCheckPath: /admin
    Port: '4443'
    Protocol: HTTPS
  aws:elbv2:listenerrule:admin:
    PathPatterns: /admin/*
    Priority: 1
    Process: admin
```

# 配置 Network Load Balancer
<a name="environments-cfg-nlb"></a>

[启用负载平衡](using-features-managing-env-types.md#using-features.managing.changetype)后，您的 AWS Elastic Beanstalk 环境将配备 Elastic Load Balancing 负载均衡器，用于在环境中的实例之间分配流量。Elastic Load Balancing 支持多种负载均衡器类型。要了解更多信息，请参阅 [Elastic Load Balancing 用户指南](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/)。Elastic Beanstalk 可以为您创建负载均衡器，或者让您指定已创建的共享负载均衡器。

本主题介绍 Elastic Beanstalk 创建并专用于您的环境的 [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/) 的配置。有关配置 Elastic Beanstalk 支持的所有负载均衡器类型的信息，请参阅[Elastic Beanstalk 环境的负载均衡器](using-features.managing.elb.md)。

**注意**  
您只能在创建环境期间选择您的环境使用的负载均衡器类型。您可以更改设置以管理运行的环境的负载均衡器行为，但不能更改其类型。

## 简介
<a name="environments-cfg-nlb-intro"></a>

通过 Network Load Balancer，默认侦听器接受端口 80 上的 TCP 请求并将它们分配到环境中的实例。您可以配置运行状况检查行为、配置侦听器端口或在其他端口中添加侦听器。

**注意**  
与经典负载均衡器或 Application Load Balancer 不同，Network Load Balancer 不能有应用层（第 7 层）HTTP 或 HTTPS 侦听器。它仅支持传输层（第 4 层）TCP 侦听器。HTTP 和 HTTPS 流量可通过 TCP 路由到您的环境。要在 Web 客户端与您的环境之间建立安全的 HTTPS 连接，请在该环境的实例上安装[自签名证书](configuring-https-ssl.md)，并将该实例配置为在适当端口（通常为 443）上侦听并终止 HTTPS 连接。此配置根据不同平台而有所变化。有关说明，请参阅[在实例上配置 HTTPS 终止](https-singleinstance.md)：然后，配置您的 Network Load Balancer 以添加一个侦听器，该侦听器映射到在相应端口上侦听的进程。

Network Load Balancer 支持主动运行状况检查。这些检查基于到根 (`/`) 路径的消息。此外，Network Load Balancer 支持被动运行状况检查。它会自动检测有故障的后端实例并只将流量路由到正常运行的实例。

## 使用 Elastic Beanstalk 控制台配置 Network Load Balancer
<a name="environments-cfg-nlb-console"></a>

在创建环境期间或以后运行您的环境时，您可以使用 Elastic Beanstalk 控制台配置 Network Load Balancer 的侦听器和进程。

**环境创建期间，在 Elastic Beanstalk 控制台中配置 Network Load Balancer**

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

1. 在导航窗格中，选择**环境**。

1. 选择 [Create a new environment (创建新环境)](environments-create-wizard.md) 以开始创建环境。

1. 在向导的主页上，在选择**创建环境**之前，选择**配置更多选项**。

1. 选择**高可用性**配置预设。

   或者，在**容量**配置类别中配置**负载均衡**环境类型。有关更多信息，请参阅 [Capacity](environments-create-wizard.md#environments-create-wizard-capacity)。

1. 在 **Load balancer (负载均衡器)** 配置类别中，选择 **Edit (编辑)**。

1. 如果尚未选择 **Network Load Balancer** 选项，请选择该选项。  
![\[Elastic Load Balancing 配置页面 - 选择负载均衡器类型\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-type-chooser.png)

1. 根据环境需要进行任何 Network Load Balancer 配置更改。

1. 选择**保存**，然后进行您的环境所需的任何其他配置更改。

1. 选择**创建环境**。

**在 Elastic Beanstalk 控制台中配置正在运行环境的 Network Load Balancer**

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

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

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

1. 在 **Load balancer (负载均衡器)** 配置类别中，选择 **Edit (编辑)**。
**注意**  
如果 **Load balancer (负载均衡器)** 配置类别没有 **Edit (编辑)** 按钮，则表示您的环境没有负载均衡器。要了解如何设置负载均衡器，请参阅[更改环境类型](using-features-managing-env-types.md#using-features.managing.changetype)。

1. 根据环境需要进行 Network Load Balancer 配置更改。

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

**Topics**
+ [侦听器](#environments-cfg-nlb-console-listeners)
+ [进程](#environments-cfg-nlb-console-processes)

### 侦听器
<a name="environments-cfg-nlb-console-listeners"></a>

可以使用该列表为您的负载均衡器指定侦听器。每个侦听器将指定端口上的传入客户端流量路由到您的实例上的进程。最初，该列表显示默认侦听器，它将端口 80 上的传入 HTTP 流量路由到名为 **default** 的进程，该进程侦听端口 80。

![\[Network Load Balancer 配置 – 侦听器列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-listeners.png)


**配置现有的侦听器**

1. 选中表条目旁边的复选框，然后选择**操作**和**编辑**。

1. 使用 **Network Load Balancer listener (网络负载均衡器侦听器)** 对话框编辑设置，然后选择 **Save (保存)**。

**添加侦听器**

1. 选择**添加侦听器**。

1. 在 **Network Load Balancer listener (网络负载均衡器侦听器)** 对话框中，配置所需的设置，然后选择 **Add (添加)**。

使用 **Network Load Balancer listener (网络负载均衡器侦听器)** 对话框来配置侦听器侦听流量所在的端口，并选择您要将流量路由到的进程（通过进程侦听的端口指定）。

![\[Network Load Balancer 侦听器对话框\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-listener-dialog.png)


### 进程
<a name="environments-cfg-nlb-console-processes"></a>

可以使用该列表为您的负载均衡器指定进程。进程是侦听器将流量路由到的目标。每个侦听器将指定端口上的传入客户端流量路由到您的实例上的进程。最初，该列表显示默认进程，它侦听端口 80 上的传入流量。

![\[Network Load Balancer 配置 – 进程列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-processes.png)


您可以编辑现有进程的设置或添加新的进程。要在列表中开始编辑或添加进程，请使用为[侦听器列表](environments-cfg-alb.md#environments-cfg-alb-console-listeners)列出的相同步骤。将打开**环境进程**对话框。

**Topics**
+ [定义](#environments-cfg-nlb-console-process-definition)
+ [健康检查](#environments-cfg-nlb-console-process-healthchecks)

#### 定义
<a name="environments-cfg-nlb-console-process-definition"></a>

可以使用以下设置定义进程：其 **Name (名称)** 以及它在其中侦听请求的 **Process port (进程端口)**。

![\[Network Load Balancer 进程对话框的名称、侦听器端口和进程端口设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-process-definition.png)


#### 健康检查
<a name="environments-cfg-nlb-console-process-healthchecks"></a>

可以使用以下设置配置进程运行状况检查：
+ **Interval (间隔)** – 单个实例的两次运行状况检查间隔的时间（秒）。
+ **Healthy threshold (正常阈值)** – 在 Elastic Load Balancing 更改实例的运行状况之前，实例必须通过或未通过的运行状况检查次数。（对于 Network Load Balancer，**Unhealthy threshold (不正常阈值)** 是始终等于正常阈值的只读设置。）
+ **Deregistration delay (取消注册延迟)** – 在取消注册实例之前等待活动请求完成的时间（秒）。

![\[Network Load Balancer 进程对话框的运行状况检查设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-process-healthcheck.png)


**注意**  
Elastic Load Balancing 运行状况检查不会影响环境的 Auto Scaling 组的运行状况检查行为。未通过 Elastic Load Balancing 运行状况检查的实例不会自动被 Amazon A EC2 uto Scaling 替换，除非您手动将 Amazon A EC2 uto Scaling 配置为这样做。有关详细信息，请参阅 [Elastic Beanstalk 环境的 Auto Scaling 运行状况检查设置](environmentconfig-autoscaling-healthchecktype.md)。

有关运行状况检查以及其对环境的总体运行状况的影响的更多信息，请参阅[基本运行状况报告](using-features.healthstatus.md)。

## 示例：带 end-to-end加密功能的环境的 Network Load Balancer
<a name="environments-cfg-nlb-console-example"></a>

在此示例中，您的应用程序需要 end-to-end流量加密。要配置您环境的 Network Load Balancer 以满足这些要求，您需要将默认进程配置为侦听端口 443、向端口 443 添加一个可将流量路由到默认进程的侦听器，并禁用默认侦听器。

**为该示例配置负载均衡器**

1. *配置默认进程。*选择默认进程，然后为**操作**选择**编辑**。对于 **Process port (进程端口)** 键入 `443`。  
![\[Network Load Balancer 配置示例 – 将默认进程配置为使用进程端口 443\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-example-process-443.png)

1. *添加端口 443 侦听器。*添加新侦听器。对于 **Listener port (侦听器端口)**，键入 `443`。对于 **Process port (进程端口)**，确保 `443` 已选中。  
![\[Network Load Balancer 配置示例 – 添加端口 443 侦听器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-example-listener-443.png)

   您现在可以查看列表上的其他侦听器。  
![\[Network Load Balancer 配置示例 – 具有两个侦听器的侦听器列表\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-example-listeners.png)

1. *禁用默认端口 80 侦听器。*对于默认侦听器，关闭**已启用**选项。  
![\[Network Load Balancer 配置示例 – 禁用默认侦听器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-nlb-example-listeners-disabled.png)

## 使用 EB CLI 配置 Network Load Balancer
<a name="environments-cfg-nlb-ebcli"></a>

当您运行 [**eb create**](eb3-create.md) 时，EB CLI 会提示您选择负载均衡器类型。

```
$ eb create
Enter Environment Name
(default is my-app): test-env
Enter DNS CNAME prefix
(default is my-app): test-env-DLW24ED23SF

Select a load balancer type
1) classic
2) application
3) network
(default is 1): 3
```

您也可以使用 `--elb-type` 选项指定负载均衡器类型。

```
$ eb create test-env --elb-type network
```

## Network Load Balancer 命名空间
<a name="environments-cfg-nlb-namespaces"></a>

您可以在以下命名空间中找到与 Network Load Balancer 相关的设置：
+ `aws:elasticbeanstalk:environment` – 选择用于环境的负载均衡器类型。Network Load Balancer 的值为 `network`。
+ `aws:elbv2:listener` – 在 Network Load Balancer 上配置侦听器。这些设置将映射到经典负载均衡器的 `aws:elb:listener` 中的设置。
+ `aws:elasticbeanstalk:environment:process` – 配置运行状况检查并为在您的环境的实例上运行的过程指定端口和协议。端口和协议设置将映射到经典负载均衡器上侦听器的 `aws:elb:listener` 中的实例端口和实例协议设置。运行状况检查设置将映射到 `aws:elb:healthcheck` 和 `aws:elasticbeanstalk:application` 命名空间中的设置。

**Example .ebextensions/ .config network-load-balancer**  
要开始使用 Network Load Balancer，请使用[配置文件](ebextensions.md)将负载均衡器类型设置为 `network`。  

```
option_settings:
  aws:elasticbeanstalk:environment:
    LoadBalancerType: network
```

**注意**  
您只能在环境创建期间设置负载均衡器类型。

**Example .ebextensions/ .config nlb-default-process**  
以下配置文件将修改默认进程的运行状况检查设置。  

```
option_settings:
  aws:elasticbeanstalk:environment:process:default:
    DeregistrationDelay: '20'
    HealthCheckInterval: '10'
    HealthyThresholdCount: '5'
    UnhealthyThresholdCount: '5'
    Port: '80'
    Protocol: TCP
```

**Example .ebextensions/ .config nlb-secure-listener**  
以下配置文件将为端口 443 上的安全流量添加一个侦听器和用于侦听端口 443 的匹配的目标过程。  

```
option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'
```
`DefaultProcess` 选项以此方式命名是因为 Application Load Balancer，它可能在同一端口上具有非默认侦听器，以用于侦听到特定路径的流量（如需详细信息，请参阅 [应用程序负载均衡器](environments-cfg-alb.md)）。对于 Network Load Balancer，该选项为该侦听器指定唯一的目标进程。  
在此示例中，我们将进程命名为 `https`，因为它侦听安全 (HTTPS) 流量。由于 Network Load Balancer 只能使用 TCP，因此该侦听器使用 TCP 协议将流量发送到指定端口上的进程。由于 HTTP 和 HTTPS 网络流量是在 TCP 上实施的，因此，可以这样做。

# 配置双堆栈 Elastic Beanstalk 负载均衡器
<a name="environments-cfg-elbv2-ipv6-dualstack"></a>

您可以使您的 Elastic Beanstalk 环境能够同时为配置了双堆栈的负载 IPv6 均 IPv4 衡器的协议提供服务。创建负载平衡环境时，基础架构默认为 IPv4。您可以选择使用双堆栈配置创建新环境，也可以选择将现有的 IPv4仅限环境更新为双堆栈环境。

要使环境的负载均衡器能够同时为 IPv4 网络流量提供服务 IPv6 ，请将[aws:elbv2:loadbalancer](command-options-general.md#command-options-general-elbv2)命名空间中的`IpAddressType`选项设置为 *du* alstack。

**注意**  
Elastic Beanstalk 仅支持应用程序负载均衡器和网络负载均衡器的双堆栈协议。对于使用经典负载均衡器的环境或单实例环境，它不支持双堆栈。

## Amazon VPC 先决条件
<a name="environments-cfg-elbv2-ipv6-dualstack.prereqs"></a>

在 Elastic Beanstalk 环境中配置负载均衡器之前，必须先使用 Amazon VPC 完成一些配置步骤：

1. 将 IPv6 CIDR 块与您环境的 VPC 关联。

1. 将 IPv6 CIDR 块与 VPC 的所有子网关联。

1. （可选）如果您的环境与 VPC 以外的组件交换网络流量，则其具有指定 VPC 可以与之通信的网络的路由表。在这种情况下，您必须更新 VPC 路由表以启用 IPv6 流量。

您可以使用 Amazon VPC 控制台或 AWS CLI 命令完成这些先决条件配置。以下主题将指导您并引导您参阅《Amazon VPC 用户指南》**和AWS CLI 命令参考**以了解更多详细信息。

**注意**  
完成 VPC 配置后，请等待几分钟让更改传播，然后再为负载均衡器配置双堆栈。如果在双堆栈设置过程中遇到 VPC 或子网配置错误，请等待几分钟让 VPC 配置传播，然后再次尝试配置双堆栈。

### 使用控制台完成 VPC 先决条件
<a name="environments-cfg-elbv2-ipv6-dualstack.prereqs.console"></a>

《Amazon VPC 用户指南》**中提供了完成这些先决任务的详细步骤。

1. 请参阅 Amazon VPC *用户指南中的步骤 1：将 IPv6 CIDR 块与您的 VPC* [和子网关联](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html#vpc-migrate-ipv6-cidr)。

   此步骤包含两个您必须完成的程序：
   + 将 IPv6 CIDR 块与您的 VPC 关联。
   + 将 IPv6 CIDR 块与您的 VPC 子网关联。

1. （可选）如果您的环境与 VPC 以外的组件交换网络流量，则其具有指定 VPC 可以与之通信的网络的路由表。在这种情况下，您必须更新 VPC 路由表以启用 IPv6 流量。要完成此配置，请参阅《Amazon VPC 用户指南》**中的[步骤 2：更新路由表](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html#vpc-migrate-ipv6-routes)。

### 使用完成 VPC 先决条件 AWS CLI
<a name="environments-cfg-elbv2-ipv6-dualstack.prereqs.cli"></a>

您可以使用 AWS CLI 来完成和验证必备配置。

1. 将 IPv6 CIDR 块与您环境的 VPC 关联。

   1. 使用[associate-vpc-cidr-block](https://docs.aws.amazon.com/cli/latest/reference/ec2/associate-vpc-cidr-block.html)命令将 CIDR 块与您的 VPC 关联。

   1. 使用 [describe-vpcs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpcs.html) 命令验证您的 VPC 配置。

   

     
**Example 命令**  

   ```
   # Associate an Amazon-provided IPv6 CIDR block with your VPC
   aws ec2 associate-vpc-cidr-block \
       --vpc-id vpc-12345678 \
       --region us-east-1  \
       --amazon-provided-ipv6-cidr-block
   
   # Verify the IPv6 CIDR block association
   aws ec2 describe-vpcs \
       --vpc-ids vpc-12345678 \
       --region us-east-1  \
       --query 'Vpcs[0].Ipv6CidrBlockAssociationSet'
   ```

1. 将 IPv6 CIDR 块与 VPC 的所有子网关联。

   1. 使用[associate-subnet-cidr-block](https://docs.aws.amazon.com/cli/latest/reference/ec2/associate-subnet-cidr-block.html)命令将 CIDR 块与您的子网关联。

   1. 使用 [describe-subnets](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-subnets.html) 命令验证您的子网配置。

   

     
**Example 命令**  

   ```
   # List all subnets in your VPC
   aws ec2 describe-subnets \
       --region us-east-1  \
       --filters "Name=vpc-id,Values=vpc-12345678" \
       --query 'Subnets[].{SubnetId:SubnetId,AvailabilityZone:AvailabilityZone}'
   
   # Associate IPv6 CIDR block with each subnet
   aws ec2 associate-subnet-cidr-block \
       --subnet-id subnet-12345678 \
       --region us-east-1  \
       --ipv6-cidr-block 2001:db8::/64
   
   # Verify IPv6 CIDR block association for all subnets
   aws ec2 describe-subnets \
       --region us-east-1  \
       --filters "Name=vpc-id,Values=vpc-12345678" \
       --query 'Subnets[].{SubnetId:SubnetId,Ipv6CidrBlock:Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlock}'
   ```

1.  （可选）如果您的环境与 VPC 以外的组件交换网络流量，则其具有指定 VPC 可以与之通信的网络的路由表。在这种情况下，您必须更新 VPC 路由表以启用 IPv6 流量。

   1. 使用 [create-route](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-route.html) 命令在 VPC 内的路由表中添加路由。

   1. 使用[describe-route-tables](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-route-tables.html)命令验证您的路由表。

   

     
**Example 命令**  

   ```
   # Add IPv6 route to Internet Gateway for public subnets
   aws ec2 create-route \
       --route-table-id rtb-12345678 \
       --destination-ipv6-cidr-block ::/0 \
       --gateway-id igw-12345678  \
       --region us-east-1
   
   # Add IPv6 route to NAT Gateway for private subnets (if applicable)
   aws ec2 create-route \
       --route-table-id rtb-87654321 \
       --destination-ipv6-cidr-block ::/0 \
       --nat-gateway-id nat-12345678 \
       --region us-east-1
   
   # Verify routes
   aws ec2 describe-route-tables \
       --route-table-ids rtb-12345678 \
       --region us-east-1 \
       --query 'RouteTables[0].Routes'
   ```

## 为 Elastic Beanstalk 负载均衡器配置双堆栈
<a name="environments-cfg-elbv2-ipv6-dualstack.enable"></a>

为您的环境设置 VPC 先决条件配置后，您可以使用双堆栈选项配置负载均衡器，使其可以同时为 IPv4 和 IPv6协议提供服务。您可以使用 Elastic Beanstalk 控制台 AWS CLI、中的配置`.ebextensions`文件 AWS 和软件开发工具包来配置负载均衡器以提供双堆栈流量。

### 使用控制台
<a name="environments-cfg-elbv2-ipv6-dualstack.enable.console"></a>

您可以使用 Elastic Beanstalk 控制台为环境的负载均衡器配置双堆栈。

**注意**  
此配置取决于数据在多个点的传播时间。配置负载均衡器并测试更改时，请考虑以下时间要求。  
*VPC 配置时间。*完成 [Amazon VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs)中所述的 VPC 配置后，请等待几分钟让更改传播，然后再执行以下步骤。如果在双堆栈设置过程中遇到 VPC 或子网配置错误，请等待几分钟，然后重试配置步骤。  
*DNS 传播时间。*将 `IpAddressType` 选项设置为*双堆栈*后，请等待几分钟让更改传播，然后再进行测试。Route 53 DNS 传播可能需要 1 至 2 分钟才能完成。在此期间，如果您使用 IPv6 协议发起请求，则在测试从客户端到应用程序的通信时可能会遇到问题。

**创建新环境：配置负载均衡器以支持双堆栈**

1. 启动 Elastic Beanstalk 控制台，并开始执行创建新环境的步骤。在**配置服务访问权限**页面中设置**服务角色**和 **EC2 实例配置文件**必填字段后，继续执行此过程中的步骤，为负载均衡器设置双堆栈配置。有关开始操作的更多信息，请参阅[创建 Elastic Beanstalk 环境](using-features.environments.md)。

1. 在**配置服务访问权限**中，选择**下一步**。

1. **设置联网、数据库和标签**页面随即显示。

   如果您完成了上一节中所述的 [Amazon VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs)，那么您已经设置了所需的 VPC 和子网。在这种情况下，请跳过此步骤及其子步骤，继续选择 VPC。

   1. 若要配置 VPC 和子网，您可以选择**创建 VPC** 以转到 VPC 控制台。按照 [使用控制台完成 VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs.console) 中的步骤操作。

   1.  等待几分钟让 VPC 更新传播，然后返回到 Elastic Beanstalk 控制台并选择刷新以继续下一步。

       如果在后续步骤中遇到 VPC 或子网配置错误，请等待几分钟让 VPC 配置传播，然后重试步骤。

1. 在**设置网络、数据库和标签页面上，**从 **VPC** 下拉列表中选择一个具有关联 IPv6 CIDR 块的值。

   选择 VPC 后，**实例子网**将会填充 VPC 子网。

1. 选择一个或多个**实例子网**，然后选择**下一步**。

1. **配置实例流量和扩缩**页面随即显示。

   在**负载均衡器网络设置**中，为 **Dualstack (IPv4 & IPv6)** 选择**启用**。

1. 选择**负载均衡器类型**。**应用程序负载均衡器**和**网络负载均衡器**均支持*双堆栈*。

1. 您可以继续在当前控制台页面上配置其他负载均衡器选项。有关负载均衡器选项和配置的更多信息，请参阅本章中的其他主题。

1. 继续执行后续步骤，完成环境的配置和创建。有关更多信息，请参阅 [创建 Elastic Beanstalk 环境](using-features.environments.md)。



**现有环境：配置负载均衡器以支持双堆栈**

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

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

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

1. 在**网络和数据库**配置类别中，选择**编辑**。

1. 如果您完成了上一节中所述的 [Amazon VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs)，那么您已经设置了所需的 VPC 和子网。在这种情况下，请跳过此步骤及其子步骤，继续选择 VPC。

   1. 若要配置 VPC 和子网，您可以选择**创建 VPC** 以转到 VPC 控制台。按照 [使用控制台完成 VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs.console) 中的步骤操作。

   1.  等待几分钟让 VPC 更新传播，然后返回到 Elastic Beanstalk 控制台并选择刷新以继续下一步。

       如果在后续步骤中遇到 VPC 或子网配置错误，请等待几分钟让 VPC 配置传播，然后重试步骤。

1. 在**网络和数据库**页面中，从 **VPC** 下拉列表中选择一个具有关联 IPv6 CIDR 块的值。

   选择 VPC 后，**实例子网**将会填充 VPC 子网。

1. 选择一个或多个**实例子网**。

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

1. 在 **Instance traffic and scaling**（实例流量和扩展）配置类别中，选择 **Edit**（编辑）。

1. 在**负载均衡器网络设置**中，选择为**双栈**启用** (IPv4 & IPv6)**。

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

### 使用 AWS CLI
<a name="environments-cfg-elbv2-ipv6-dualstack.enable.cli"></a>

您可以使用 AWS 命令行界面 (AWS CLI) 来配置环境的负载均衡器，以同时 IPv6 为 IPv4 网络流量提供服务。本节提供包含 [aws:elbv2:loadbalancer](command-options-general.md#command-options-general-elbv2) 命名空间 [create-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-environment.html) 和 [update-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令的示例。

**注意**  
此配置取决于数据在多个点的传播时间。配置负载均衡器并测试更改时，请考虑以下时间要求。  
*VPC 配置时间。*完成 [Amazon VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs)中所述的 VPC 配置后，请等待几分钟让更改传播，然后再运行这些命令将您的负载均衡器配置为双堆栈。如果在双堆栈设置过程中遇到 VPC 或子网配置错误，请等待几分钟，然后重试命令。  
*DNS 传播时间。*将 `IpAddressType` 选项设置为*双堆栈*后，请等待几分钟让更改传播，然后再进行测试。Route 53 DNS 传播可能需要 1 至 2 分钟才能完成。在此期间，如果您使用 IPv6 协议发起请求，则在测试从客户端到应用程序的通信时可能会遇到问题。

 

**Example ：具有双堆栈配置的 create-environment 命令（内联命名空间选项）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2 v3.4.0 running Python 3.8" \
--option-settings \
Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role \
Namespace=aws:elbv2:loadbalancer,OptionName=IpAddressType,Value=dualstack
```



作为替代方法，请使用 `options.json` 文件来指定命名空间选项，而不是将其内联。以下示例命令演示了 [update-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令。

**Example ：具有双堆栈配置的 update-environment 命令（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk update-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2 v3.4.0 running Python 3.8" \
--option-settings \ file://options.json
```

**Example**  

```
### example options.json ###
[
  {
    "Namespace": "aws:elbv2:loadbalancer",
    "OptionName": "IpAddressType",
    "Value": "dualstack"
  }
]
```



以下示例更新现有环境以将`IpAddressType`选项设置为*IPv4*。

**注意**  
如果您需要将环境配置从双堆栈回滚到，则此示例`update-environment`命令很有用。 IPv4

**Example 要设置的更新环境 IpAddressType IPv4**  

```
aws elasticbeanstalk update-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2 v3.4.0 running Python 3.8" \
--option-settings \
Namespace=aws:elbv2:loadbalancer,OptionName=IpAddressType,Value=ipv4
```

### 使用 .ebextensions 配置文件
<a name="environments-cfg-elbv2-ipv6-dualstack.enable.ebx"></a>

您可以使用 Elastic B [eanstalk](ebextensions.md) 配置文件使环境的负载均衡器能够同时为网络流量提供服务。 IPv6 IPv4 请将 [aws:elbv2:loadbalancer](command-options-general.md#command-options-general-elbv2) 命名空间中的 `IpAddressType` 选项设置为*双堆栈*。

**注意**  
此配置取决于数据在多个点的传播时间。配置负载均衡器并测试更改时，请考虑以下时间要求。  
*VPC 配置时间。*完成 [Amazon VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs)中所述的 VPC 配置后，请等待几分钟让 VPC 更改传播，然后再应用 `.ebextensions` 配置。如果在此配置的设置过程中遇到 VPC 或子网配置错误，请等待几分钟，然后重试。  
*DNS 传播时间。*将 `IpAddressType` 选项设置为*双堆栈*后，请等待几分钟让更改传播，然后再进行测试。Route 53 DNS 传播可能需要 1 至 2 分钟才能完成。在此期间，如果您使用 IPv6 协议发起请求，则在测试从客户端到应用程序的通信时可能会遇到问题。

**Example ：用于负载均衡器双堆栈配置的 .ebextensions/options.config（[速记语法](ebextensions-optionsettings.md#ebextensions-optionsettings.title)）**  

```
option_settings:
  aws:elbv2:loadbalancer:
    IpAddressType: dualstack
```

**Example ：用于负载均衡器双堆栈配置的 .ebextensions/options.config（[标准语法](ebextensions-optionsettings.md#ebextensions-optionsettings.title)）**  

```
option_settings:
  - namespace: aws:elbv2:loadbalancer
    option_name: IpAddressType
    value: dualstack
```

### 使用 AWS 软件开发工具包
<a name="environments-cfg-elbv2-ipv6-dualstack.enable.sdk"></a>

您可以使用配置双堆栈。[AWS SDKs](https://docs.aws.amazon.com//code-library/)与上一节中提到的`update-environment`和`create-environment` AWS CLI 命令类似，您可以使用[CreateEnvironment](https://docs.aws.amazon.com//elasticbeanstalk/latest/api/API_CreateEnvironment.html)和 [UpdateEnvironment](https://docs.aws.amazon.com//elasticbeanstalk/latest/api/API_UpdateEnvironment.html)API 操作。使用 `OptionSettings` 请求参数来指定 [aws:elbv2:loadbalancer](command-options-general.md#command-options-general-elbv2) 命名空间的选项。

**注意**  
此配置取决于数据在多个点的传播时间。配置负载均衡器并测试更改时，请考虑以下时间要求。  
*VPC 配置时间。*完成 [Amazon VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs)中所述的 VPC 配置后，请等待几分钟让更改传播，然后再运行程序为双堆栈配置负载均衡器。如果在双堆栈设置过程中遇到 VPC 或子网配置错误，请等待几分钟，然后再次尝试运行双堆栈配置程序。  
*DNS 传播时间。*将 `IpAddressType` 选项设置为*双堆栈*后，请等待几分钟让更改传播，然后再进行测试。Route 53 DNS 传播可能需要 1 至 2 分钟才能完成。在此期间，如果您使用 IPv6 协议发起请求，则在测试从客户端到应用程序的通信时可能会遇到问题。

## 问题排查
<a name="environments-cfg-elbv2-ipv6-dualstack.troubleshooting"></a>

**尝试使用 Amazon Q 开发者版 CLI 进行人工智能辅助故障排除**  
 Amazon Q 开发者版 CLI 可以帮助您针对环境问题快速进行故障排除。Q CLI 可通过检查环境状态、审核事件、分析日志和询问澄清问题来提供解决方案。有关更多信息和详细演练，请参阅博客中的使用 [Amazon Q Developer CLI 对 Elastic Beanstalk 环境进行故障排除](https://aws.amazon.com/blogs/devops/troubleshooting-elastic-beanstalk-environments-with-amazon-q-developer-cli/)。 AWS 

本节提供有关对负载均衡器双堆栈配置问题进行故障排除的指导。

**事件：***VPC *vpc\$1id* 未配置 IPv6 CIDR 块。 IPv6双栈负载均衡器需要 CIDR 块。在使用双堆栈模式之前，请将 IPv6 CIDR 块与您的 VPC 关联。*

您的 VPC 和所有子网都必须有与之关联的 IPv6 CIDR 块。这是在配置负载均衡器以支持双堆栈之前必须达成的 VPC 先决条件之一。有关更多信息，请参阅本主题前面的 [Amazon VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs)。

 **事件：***VPC 的一个或多个子网*vpc\$1id*未配置 IPv6 CIDR 块。 IPv6 双栈负载均衡器使用的子网需要 CIDR 块。在使用双堆栈模式之前，请将 IPv6 CIDR 块与所有必需的子网关联。*

您的 VPC 的所有子网都必须有与之关联的 IPv6 CIDR 块。这是在配置负载均衡器以支持双堆栈之前必须达成的 VPC 先决条件之一。有关更多信息，请参阅本主题前面的 [Amazon VPC 先决条件](#environments-cfg-elbv2-ipv6-dualstack.prereqs)。

 **错误：***The `IpAddressType` option can only be applied on Elastic Beanstalk environments configured with an Application Load Balancer or Network Load Balancer.*

此消息表明 Elastic Beanstalk 环境可能是单实例环境，或者该环境可能正在使用经典负载均衡器。只有配置了应用程序负载均衡器或网络负载均衡器的环境才能配置 `IpAddressType`。

# 配置访问日志
<a name="environments-cfg-loadbalancer-accesslogs"></a>

您可以使用[配置文件](ebextensions.md)将环境的负载均衡器配置为将访问日志上传到 Amazon S3 存储桶。有关说明，请参阅以下示例配置文件： GitHub 
+ `[loadbalancer-accesslogs-existingbucket.config](https://github.com/awslabs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/resource-configuration/loadbalancer-accesslogs-existingbucket.config)` – 将负载均衡器配置为将访问日志上传到现有 Amazon S3 存储桶。
+ `[loadbalancer-accesslogs-newbucket.config](https://github.com/awslabs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/resource-configuration/loadbalancer-accesslogs-newbucket.config)` – 将负载均衡器配置为将访问日志上传到新的存储桶。

# 将数据库添加到 Elastic Beanstalk 环境
<a name="using-features.managing.db"></a>

Elastic Beanstalk 提供与 [Amazon Relational Database Service（Amazon RDS）](https://aws.amazon.com/rds/)进行*耦合*数据库集成的功能。在创建环境时，您可以使用 Elastic Beanstalk 将 MySQL、PostgreSQL、Oracle 或 SQL Server 数据库添加到现有环境或新环境中。在添加已与某个环境耦合的数据库实例时，Elastic Beanstalk 会向应用程序提供连接信息。它通过设置数据库主机名、端口、用户名、密码和数据库名称的环境属性来完成此操作。

**使用耦合数据库的优势**  
如果您之前没有将数据库实例与应用程序结合使用，那么我们建议您首先按照本主题中介绍的过程操作，使用 Elastic Beanstalk 服务将数据库添加到测试环境。这样，您就可以验证应用程序是否可以读取环境属性、构建连接字符串以及连接到数据库实例，而无需为 Elastic Beanstalk 外部的数据库执行额外的配置工作。

**投入生产时的注意事项**  
在验证应用程序可与数据库一起正常使用之后，您可以考虑转向生产环境。此时，您可以选择将数据库与 Elastic Beanstalk 环境解耦，以转向提供更大灵活度的配置。解耦的数据库可以作为外部 Amazon RDS 数据库实例保持运行。解耦数据库不会影响环境的正常运行状态。如果您需要终止环境，您可以这样做，还可以选择在 Elastic Beanstalk 之外保持数据库可用和运行的选项。

**迁移到解耦数据库的好处**  
使用外部数据库有多种优点。您可以从多个环境连接到外部数据库，使用集成数据库不支持的数据库类型以及执行 blue/green 部署。作为使用 Elastic Beanstalk 创建的解耦数据库的替代方法，您还可以在 Elastic Beanstalk 环境之外创建数据库实例。这两个选项都会产生一个位于 Elastic Beanstalk 环境外部的数据库实例，并且需要其他安全组和连接字符串配置。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)。

**Topics**
+ [数据库生命周期](#environments-cfg-rds-lifecycle)
+ [使用控制台向环境中添加 Amazon RDS 数据库实例](#environments-cfg-rds-create)
+ [连接到数据库](#environments-cfg-rds-connect)
+ [使用控制台配置集成 RDS 数据库实例](#using-features.managing.db.CON)
+ [使用配置文件配置集成 RDS 数据库实例](#using-features.managing.db.namespace)
+ [使用控制台解耦 RDS 数据库实例](#using-features.decoupling.db)
+ [使用配置文件解耦 RDS 数据库实例](#using-features.decoupling-config-files.db)

## 数据库生命周期
<a name="environments-cfg-rds-lifecycle"></a>

在将数据库与 Elastic Beanstalk 环境解耦后，您可以选择要对其执行的操作。您可以选择的选项统称为*删除策略*。在您[将数据库与 Elastic Beanstalk 环境解耦](#using-features.decoupling.db)或者终止 Elastic Beanstalk 环境之后，以下删除策略适用于数据库：
+ *Snapshot*（快照）– 在 Elastic Beanstalk 终止数据库之前，它会保存数据库的快照。当您将数据库实例添加到 Elastic Beanstalk 环境或创建独立数据库时，您可以从快照中恢复数据库。有关从快照中创建新的独立数据库实例的更多信息，请参阅*《Amazon RDS 用户指南》*中的[从数据库快照还原](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)。您可能产生存储数据库快照的费用。有关更多信息，请参阅 [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)的*备份存储*部分。
+ *Delete*（删除）– Elastic Beanstalk 终止数据库。终止后，数据库实例将不再可用于任何操作。
+ *Retain*（保留）– 数据库实例未终止。尽管数据库与 Elastic Beanstalk 解耦，但它仍然可用且可运行。然后，您可以配置一个或多个环境以作为外部 Amazon RDS 数据库实例连接到数据库。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)。

## 使用控制台向环境中添加 Amazon RDS 数据库实例
<a name="environments-cfg-rds-create"></a>

您可以使用 Elastic Beanstalk 控制台将数据库实例添加到环境。

**向环境添加数据库实例**

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

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

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

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

1. 选择数据库引擎，然后输入用户名和密码。

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

您可以配置以下选项：
+ **Snapshot**（快照）– 选择现有数据库快照。Elastic Beanstalk 还原该快照并将它添加到您的环境。默认值为 **None**（无）。默认值为 **None**（无），这将允许您使用此页面上的其他设置来配置新的数据库。
+ **Engine**（引擎）– 选择数据库引擎。
+ **Engine version**（引擎版本）– 选择数据库引擎的具体版本。
+ **Instance Class**（实例类）– 选择数据库实例类。有关数据库实例类的信息，请参阅 [https://aws.amazon.com/rds/](https://aws.amazon.com/rds/)。
+ **Storage**（存储）– 选择要为数据库预置的存储空间量。您可以以后增加分配的存储空间，但是不能降低它。有关存储分配的信息，请参阅[功能](https://aws.amazon.com/rds/#features)。
+ **Username**（用户名）– 仅使用数字和字母组合输入您选择的用户名称。
+ **Password**（密码）– 输入您选择的密码，包含 8-16 个可打印 ASCII 字符（不包括 `/`、`\` 和 `@`）。
+ **Availability**（可用性）– 选择 **High (Multi-AZ)**（高(多可用区)）可在第二个可用区中运行热备份以实现高可用性。
+ **Database deletion policy**（数据库删除策略）– 删除策略决定数据库在与您的环境[解耦](#using-features.decoupling.db)之后会发生的情况。可以设置为下列值之一：`Create Snapshot`、`Retain` 或 `Delete`。这些值在同一主题中的[数据库生命周期](#environments-cfg-rds-lifecycle)中进行了描述。

**注意**  
Elastic Beanstalk 会使用您提供的用户名和密码为数据库创建主用户。要了解有关主用户及其权限的更多信息，请参阅[主用户账户权限](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.MasterAccounts.html)。

添加一个数据库实例大约需要 10 分钟。更新完成后，新数据库与环境*耦合*。您的应用程序就可以通过以下环境属性访问数据库实例的主机名和其他连接信息。


| 属性名称 | 描述 | 属性值 | 
| --- | --- | --- | 
|  `RDS_HOSTNAME`  |  数据库实例的主机名。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Endpoint**（端点）。  | 
|  `RDS_PORT`  |  数据库实例接受连接的端口。默认值因数据库引擎而异。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Port**（端口）。  | 
|  `RDS_DB_NAME`  |  数据库名称 **ebdb**。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**DB Name**（数据库名称）。  | 
|  `RDS_USERNAME`  |  您为数据库配置的用户名。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**Master username**（主用户名）。  | 
|  `RDS_PASSWORD`  |  您为数据库配置的密码。  |  在 Amazon RDS 控制台中不可供参考。  | 

## 连接到数据库
<a name="environments-cfg-rds-connect"></a>

使用连接信息，通过环境变量与应用程序内的数据库连接。有关配合使用 Amazon RDS 和您的应用程序的详细信息，请参阅以下主题。
+ Java SE – [连接数据库 (Java SE 平台)](java-rds.md#java-rds-javase)
+ Java with Tomcat – [连接数据库 (Tomcat 平台)](java-rds.md#java-rds-tomcat)
+ Node.js – [连接到数据库](create-deploy-nodejs.rds.md#nodejs-rds-connect)
+ .NET – [连接到数据库](create_deploy_NET.rds.md#dotnet-rds-connect)
+ PHP – [使用 PDO 或 “我的” 连接到数据库 SQLi](create_deploy_PHP.rds.md#php-rds-connect)
+ Python – [连接到数据库](create-deploy-python-rds.md#python-rds-connect)
+ Ruby – [连接到数据库](create_deploy_Ruby.rds.md#ruby-rds-connect)

## 使用控制台配置集成 RDS 数据库实例
<a name="using-features.managing.db.CON"></a>

在 [Elastic Beanstalk 控制台](environments-console.md)中，您可以在环境的 **Configuration**（配置）页面上的 **Database**（数据库）部分中查看和修改数据库实例的配置设置。

**在 Elastic Beanstalk 控制台中配置环境的数据库实例**

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

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

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

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

创建数据库后，您可以修改**实例类**、****存储**、密码**、**可用性**和**数据库删除策略**设置。如果您更改实例类，Elastic Beanstalk 将重新预置数据库实例。

如果您不再需要 Elastic Beanstalk 将数据库与环境关联，则可以通过选择 **Decouple database**（解耦数据库）来选择将其解耦。了解此操作涉及的选项和注意事项非常重要。有关更多信息，请参阅 [使用控制台解耦 RDS 数据库实例](#using-features.decoupling.db)。

**警告**  
请勿在 Elastic Beanstalk 提供的功能之外修改耦合数据库实例的设置（例如，在 Amazon RDS 控制台中）。如果您执行此操作，则 Amazon RDS 数据库配置可能与您的环境的定义不同步。在更新或重新启动环境时，环境中指定的设置将覆盖在 Elastic Beanstalk 外部所做的任何设置。  
如果您需要修改 Elastic Beanstalk 不直接支持的设置，请使用 Elastic Beanstalk [配置文件](#using-features.managing.db.namespace)。

## 使用配置文件配置集成 RDS 数据库实例
<a name="using-features.managing.db.namespace"></a>

您可以使用[配置文件](ebextensions.md)配置环境的数据库实例。使用 [`aws:rds:dbinstance`](command-options-general.md#command-options-general-rdsdbinstance) 命名空间中的选项。以下示例将分配的数据库存储大小修改为 100 GB。

**Example .ebextensions/ .config db-instance-options**  

```
option_settings:
  aws:rds:dbinstance:
    DBAllocatedStorage: 100
```

如果您需要配置 Elastic Beanstalk 不支持的数据库实例属性，则仍可使用配置文件，并使用 `resources` 键指定您的设置。以下示例将值设置为 `StorageType` 和 `Iops` Amazon RDS 属性。

**Example .ebextensions/ .config db-instance-properties**  

```
Resources:
  AWSEBRDSDatabase:
    Type: AWS::RDS::DBInstance
    Properties:
      StorageType:io1
      Iops: 1000
```

## 使用控制台解耦 RDS 数据库实例
<a name="using-features.decoupling.db"></a>

您可以将数据库与 Elastic Beanstalk 环境解耦，而不会影响环境的运行状况。在解耦数据库之前，请考虑以下要求：
+ *数据库解耦后应该会发生什么？*

  您可以选择创建数据库的快照，然后将其终止，将数据库作为 Elastic Beanstalk 之外的独立数据库保留运行，或者永久删除该数据库。**Database deletion policy**（数据库删除策略）设置决定了此结果。有关删除策略的详细描述，请参阅在同一主题中的 [数据库生命周期](#environments-cfg-rds-lifecycle)。
+ *在解耦之前，您是否需要对数据库配置设置进行任何更改？*

  如果您想对数据库进行任何配置更改，那么应该在数据库*解耦之前*应用它们。这包括对 **Database deletion policy**（数据库删除策略）的更改。仅应用解耦设置时，使用 **Decouple database**（解耦数据库）设置同时提交的任何待处理的更改将被忽略。

  

**将数据库实例与环境解耦**

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

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

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

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

1. 查看 **Database settings**（数据库设置）部分中的所有配置值，尤其是 **Database deletion policy**（数据库删除策略），此策略决定了数据库在解耦后会发生什么情况。

     
![\[Database settings form with engine, instance, storage, and deletion policy options.\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-rds-options-w-db-deletion-policies.png)

   

   如果所有其他配置设置均正确，请跳到**步骤 6** 来解耦数据库。
**警告**  
将 **Database deletion policy**（删除数据库策略）设置与 **Decouple database**（解耦数据库）*分开**应用*非常重要。如果您选择 **Apply**（应用）的目的是同时保存 **Decouple database**（解耦数据库）和新选择的 **Database deletion policy**（数据库删除策略），您选择的新删除策略将被忽略。Elastic Beanstalk 将按照先前设定的删除策略解耦数据库。如果先前设置的删除策略为 `Delete` 或者 `Create Snapshot`，则会有丢失数据库的风险，而不是遵循预期的待处理策略。

   如果任何配置设置需要更新，请执行以下操作：

   1. 在 **Database settings**（数据库设置）面板中进行必要的修改。

   1. 选择**应用**。保存数据库的配置更改将需要几分钟时间。

   1. 返回到**步骤 3**，然后从导航窗格中选择 **Configuration**（配置）。

1. 转到窗格的 **Database connection**（数据库连接）部分。

     
![\[Database connection options showing "Couple database" selected and "Decouple database" unselected.\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-rds-couple-decouple-db.png)

   

1. 选择 **Decouple database**（解耦数据库）。

1. 选择 **Apply**（应用）以启动数据库解耦操作。

删除策略设置决定了数据库的结果以及解耦数据库所需的时间长度。
+ 如果删除策略设置为 `Delete`，数据库将被删除。该操作可能需要大约 10-20 分钟，具体取决于数据库的大小。
+ 如果删除策略设置为 `Snapshot`，将创建数据库快照。然后，数据库将被删除。此过程所需的时间长度因数据库的大小而异。
+ 如果删除策略设置为 `Retain`，数据库在 Elastic Beanstalk 环境之外仍可运行。解耦数据库通常需要不到五分钟的时间。

 如果您决定在 Elastic Beanstalk 环境之外保留数据库，则需要采取其他步骤对其进行配置。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)。如果您计划为生产环境使用解耦数据库，请验证数据库使用的存储类型适合您的工作负载。有关更多信息，请参阅《Amazon RDS 用户指南》**中的[数据库实例存储](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)和[修改数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html)。

## 使用配置文件解耦 RDS 数据库实例
<a name="using-features.decoupling-config-files.db"></a>

您可以将数据库实例与 Elastic Beanstalk 环境解耦，而不会影响环境的运行状况。数据库实例在数据库解耦时应用的 *数据库删除策略*。

解耦数据库所需的两个选项都在 [aws:rds:dbinstance](command-options-general.md#command-options-general-rdsdbinstance) 命名空间中。这些特性如下所示：
+ `DBDeletionPolicy` 选项设置了删除策略。可以设置为下列值之一：`Snapshot`、`Delete` 或 `Retain`。这些值在同一主题中的[数据库生命周期](#environments-cfg-rds-lifecycle)中进行了描述。
+ `HasCoupledDatabase` 选项确定您的环境是否有耦合数据库。
  + 如果切换为 `true`，Elastic Beanstalk 会创建一个与您的环境耦合的新数据库实例。
  + 如果切换为 `false`，Elastic Beanstalk 开始将数据库实例与您的环境解耦。

如果要在解耦之前更改数据库配置，请先在单独的操作中应用任何配置更改。这包括更改 `DBDeletionPolicy` 配置。应用更改后，请运行单独的命令来设置解耦选项。如果同时提交其他配置设置和解耦设置，则在应用解耦设置时忽略其他配置选项设置。

**警告**  
请您务必运行这些命令以将 `DBDeletionPolicy` 和 `HasCoupledDatabase` 设置作为两个单独的操作应用。如果活跃删除策略已设置为 `Delete` 或者 `Snapshot`，您会有丢失数据库的风险。数据库遵循当前处于活跃状态的删除策略，而不是您预期的待处理删除策略。

**将数据库实例与环境解耦**

请按照以下步骤将数据库与 Elastic Beanstalk 环境解耦。您可以使用 EB CLI 或 AWS CLI 来完成这些步骤。有关更多信息，请参阅[使用配置文件的高级环境自定义项](ebextensions.md)。

1. 如果要更改删除策略，请按以下格式设置配置文件。在此示例中，删除策略设置为保留。  
**Example**  

   ```
   option_settings:
     aws:rds:dbinstance:
       DBDeletionPolicy: Retain
   ```

1. 使用首选工具运行命令以完成配置更新。

1. 设置配置文件以将 `HasCoupledDatabase` 设置为 `false`。  
**Example**  

   ```
   option_settings:
     aws:rds:dbinstance:
       HasCoupledDatabase: false
   ```

1. 使用首选工具运行命令以完成配置更新。

删除策略设置决定了数据库的结果以及解耦数据库所需的时间长度。
+ 如果删除策略设置为 `Delete`，数据库将被删除。该操作可能需要大约 10-20 分钟，具体取决于数据库的大小。
+ 如果删除策略设置为 `Snapshot`，将创建数据库快照。然后，数据库将被删除。此过程所需的时间长度因数据库的大小而异。
+ 如果删除策略设置为 `Retain`，数据库在 Elastic Beanstalk 环境之外仍可运行。解耦数据库通常需要不到五分钟的时间。

 如果您决定在 Elastic Beanstalk 环境之外保留数据库，则需要采取其他步骤对其进行配置。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)。如果您计划为生产环境使用解耦数据库，请验证数据库使用的存储类型适合您的工作负载。有关更多信息，请参阅《Amazon RDS 用户指南》**中的[数据库实例存储](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)和[修改数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html)。

# 您的 AWS Elastic Beanstalk 环境安全
<a name="using-features.managing.security"></a>

Elastic Beanstalk 提供了多个选项，用于控制您的环境及其中的亚马逊实例的服务访问（安全）。 EC2 本主题将讨论这些选项的配置。

**Topics**
+ [配置环境安全性](#using-features.managing.security.console)
+ [环境安全性配置命名空间](#using-features.managing.security.namespaces)

## 配置环境安全性
<a name="using-features.managing.security.console"></a>

您可以在 Elastic Beanstalk 控制台中修改 Elastic Beanstalk 环境的安全性配置。

**在 Elastic Beanstalk 控制台中配置环境服务访问（安全性）**

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

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

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

1. 在 **Service access**（服务访问）配置类别中，选择 **Edit**（编辑）。

可供使用的设置如下。

**Topics**
+ [服务角色](#using-features.managing.security.servicerole)
+ [EC2 key pair](#using-features.managing.security.keypair)
+ [IAM 实例配置文件](#using-features.managing.security.profile)

![\[Elastic Beanstalk 安全性服务访问配置页\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/configuration-configure-service-access.png)


### 服务角色
<a name="using-features.managing.security.servicerole"></a>

选择要与 Elastic Beanstalk 环境关联的[服务角色](iam-servicerole.md)。Elastic Beanstalk 在代表你 AWS 访问其他服务时担任服务角色。有关更多信息，请参阅 [管理 Elastic Beanstalk 服务角色](iam-servicerole.md)。

### EC2 key pair
<a name="using-features.managing.security.keypair"></a>

您可以使用亚马逊密钥对安全地登录为您的 Elastic Beanstalk 应用程序预配置的亚马逊弹性计算云 (Amazon EC2) 实例。 EC2 有关创建密钥对的说明，请参阅亚马逊* EC2 用户指南 EC2*中的[使用亚马逊创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair)。

**注意**  
当您创建密钥对时，Amazon 会 EC2 存储您的公钥副本。如果您不再需要使用它来连接任何环境实例，可以将其从 Amazon 中删除 EC2。有关详情，请参阅 *Amazon EC2 用户指南*中的[删除您的密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#delete-key-pair)。

从下拉菜单中选择**EC2 密钥对**，将其分配给您的环境实例。当您分配密钥对时，公共密钥存储在实例上，用于对存储在本地的私有密钥进行身份验证。私钥永远不会存储在上 AWS。

有关连接到亚马逊 EC2 实例的更多信息，请参阅《*亚马逊 EC2 用户*指南》中的[连接到您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)和[使用 Putty 从 Windows 连接 Linux/UNIX 实](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)例。

### IAM 实例配置文件
<a name="using-features.managing.security.profile"></a>

 EC2 [实例配置文件](concepts-roles-instance.md)是一个 IAM 角色，适用于在您的 Elastic Beanstalk 环境中启动的实例。Amazon EC2 实例扮演实例配置文件角色来签署请求 AWS 和访问请求 APIs，例如，将日志上传到 Amazon S3。

首次在 Elastic Beanstalk 控制台中创建环境时，Elastic Beanstalk 提示您创建具有默认权限集的实例配置文件。您可以向此配置文件添加权限，以向您的实例提供对其他 AWS 服务的访问权限。有关更多信息，请参阅 [管理 Elastic Beanstalk 实例配置文件](iam-instanceprofile.md)。

**注意**  
以前，Elastic Beanstalk 创建 EC2 了一个默认的实例`aws-elasticbeanstalk-ec2-role`配置文件，该配置文件名为账户首次创建环境 AWS 时命名。该实例配置文件包含默认的托管式策略。如果您的账户已经有该实例配置文件，则可继续将其分配到您的环境。  
但是，在这种情况下，最近的 AWS 安全准则不允许 AWS 服务自动创建具有对其他 AWS 服务的信任策略 EC2 的角色。根据这些安全准则，Elastic Beanstalk 将不再创建默认的 `aws-elasticbeanstalk-ec2-role` 实例配置文件。

**注意**  
 EC2 实例安全的另一个方面是为 EC2 实例指定防火墙规则。这由 EC2 安全组控制。有关更多信息，请参阅 [你的 Elastic Beanstalk 环境的亚马逊 EC2 实例](using-features.managing.ec2.md)。

## 环境安全性配置命名空间
<a name="using-features.managing.security.namespaces"></a>

Elastic Beanstalk 在以下命名空间中提供了[配置选项](command-options.md)来使您能够自定义环境的安全性：
+ [`aws:elasticbeanstalk:environment`](command-options-general.md#command-options-general-elasticbeanstalkenvironment) - 使用 `ServiceRole` 选项配置环境的服务角色。
+ [`aws:autoscaling:launchconfiguration`](command-options-general.md#command-options-general-autoscalinglaunchconfiguration)— 使用`EC2KeyName`、`IamInstanceProfile`、和`SecurityGroups`选项为环境的 Amazon EC2 实例配置权限。`DisableDefaultEC2SecurityGroup`

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

# 在 Elastic Beanstalk 环境中标记资源
<a name="using-features.tagging"></a>

您可以将标签应用于您的 AWS Elastic Beanstalk 环境。标签是与资源关联的键值对。 AWS 有关 Elastic Beanstalk 资源标记、使用案例、标签键和值约束以及支持的资源类型的信息，请参阅[标记 Elastic Beanstalk 应用程序资源](applications-tagging-resources.md)。

Elastic Beanstalk 将环境标签应用于环境资源本身，以及 Elastic Beanstalk 为环境创建的其他 AWS 资源。您可以使用标签管理某个环境内的特定资源级权限。有关更多信息，请参阅《亚马逊* EC2 用户指南》中的为您的亚马逊 EC2 *[资源添加标签](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)。

默认情况下，Elastic Beanstalk 会将几个标签应用于您的环境：
+ `elasticbeanstalk:environment-name` – 环境名称。
+ `elasticbeanstalk:environment-id` – 环境 ID。
+ `Name`— 也是环境的名称。 `Name`在 Amazon EC2 控制面板中用于识别和分类资源。

您不能编辑这些默认标签。

您可以在创建 Elastic Beanstalk 环境时指定标签。在现有环境中，您可以添加或删除标签，以及更新现有标签的值。一个环境最多可以有 50 个标签，包括默认标签。

## 在创建环境期间添加标签
<a name="using-features.tagging.create"></a>

在使用 Elastic Beanstalk 控制台创建环境时，可以在[创建新环境向导](environments-create-wizard.md)的**修改标签**配置页面上指定标签键和值。

![\[在 Elastic Beanstalk 控制台中创建环境期间的“修改标签”配置页面\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environment-create-tags.png)


如果使用 EB CLI 创建环境，则可以使用 **[eb create](eb3-create.md)** 的 `--tags` 选项添加标签。

```
~/workspace/my-app$ eb create --tags mytag1=value1,mytag2=value2
```

对于 AWS CLI 或其他基于 API 的客户端，请使用命令中的`--tags`参数。**[create-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-environment.html)**

```
$ aws elasticbeanstalk create-environment \
      --tags Key=mytag1,Value=value1 Key=mytag2,Value=value2 \
      --application-name my-app --environment-name my-env --cname-prefix my-app --version-label v1 --template-name my-saved-config
```

[保存的配置](environment-configuration-methods-before.md#configuration-options-before-savedconfig)包括用户定义的标签。当您在创建环境期间应用包含标签的已保存配置时，只要您不指定任何新标签，这些标签就将应用于新环境。如果使用前述方法之一向环境添加标签，则将弃用已保存配置中定义的任何标签。

## 管理现有环境的标签
<a name="using-features.tagging.manage"></a>

您可以在现有的 Elastic Beanstalk 环境中添加、更新和删除标签。Elastic Beanstalk 会将更改应用到您的环境中的资源。

不过，您不能编辑 Elastic Beanstalk 应用于您的环境的默认标签。

**在 Elastic Beanstalk 控制台中管理环境的标签**

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

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

1. 在导航窗格中，选择 **Tags**。

   标签管理页会显示环境中当前存在的标签的列表。  
![\[标签管理页显示环境的标签\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environment-manage-tags.png)

1. 添加、更新或删除标签：
   + 要添加标签，请将其输入列表底部的空白框中。要添加另一个标签，请选择**添加标签**，Elastic Beanstalk 将添加另一对空白框。
   + 要更新标签的键或值，请编辑标签行中的相应框。
   + 要删除标签，请选择标签的值框旁边的 **Remove (删除)**。

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

如果使用 EB CLI 更新环境，则可使用 **[eb tags](eb3-tags.md)** 来添加、更新、删除或列出标签。

例如，以下命令会列出默认环境中的标签。

```
~/workspace/my-app$ eb tags --list
```

以下命令会更新标签 `mytag1` 并删除标签 `mytag2`。

```
~/workspace/my-app$ eb tags --update mytag1=newvalue --delete mytag2
```

有关选项和更多示例的完整列表，请参阅 `eb tags`。

对于 AWS CLI 或其他基于 API 的客户端，使用**[list-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/list-tags-for-resource.html)**命令列出环境的标签。

```
$ aws elasticbeanstalk list-tags-for-resource --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:environment/my-app/my-env"
```

使用 **[update-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-tags-for-resource.html)** 命令可在环境中添加、更新或删除标签。

```
$ aws elasticbeanstalk update-tags-for-resource \
      --tags-to-add Key=mytag1,Value=newvalue --tags-to-remove mytag2 \
      --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:environment/my-app/my-env"
```

在 `--tags-to-add` 的 **update-tags-for-resource** 参数中指定要添加的标签和要更新的标签。添加了一个不存在的标签，更新了现有标签的值。

**注意**  
要在 Elastic Beanstalk 环境中使用这两个 AWS CLI 命令，你需要环境的 ARN。您可以使用下面的命令检索该 ARN。  

```
$ aws elasticbeanstalk describe-environments
```

# 环境变量和其他软件设置
<a name="environments-cfg-softwaresettings"></a>

**配置更新、监控和记录**配置页面允许您在运行您的应用程序的亚马逊弹性计算云 (Amazon EC2) 实例上配置软件。您可以配置环境变量、 AWS X-Ray 调试、实例日志存储和流式传输以及特定于平台的设置。

**Topics**
+ [配置特定于平台的设置](#environments-cfg-softwaresettings-specific)
+ [配置环境属性（环境变量）](#environments-cfg-softwaresettings-console)
+ [软件设置命名空间](#environments-cfg-softwaresettings-configfiles)
+ [访问环境属性](#environments-cfg-softwaresettings-accessing)
+ [配置 AWS X-Ray 调试](environment-configuration-debugging.md)
+ [查看您的 Elastic Beanstalk 环境日志](environments-cfg-logging.md)

## 配置特定于平台的设置
<a name="environments-cfg-softwaresettings-specific"></a>

除了可用于所有环境的标准选项集之外，大多数 Elastic Beanstalk 平台还允许您指定特定于语言或框架的设置。这些设置显示在**配置更新、监控和日志记录**页面的**平台软件**部分中，并且可以采用以下形式：
+ **预设环境属性** - Ruby 平台将环境属性用于框架设置，例如 `RACK_ENV` 和 `BUNDLE_WITHOUT`。
+ **占位符环境属性** - Tomcat 平台定义名为 `JDBC_CONNECTION_STRING` 且未设置为任何值的环境属性。此类设置在较旧的平台版本中更常见。
+ **配置选项** - 大多数平台在特定于平台或共享的命名空间（如 `aws:elasticbeanstalk:xray` 或 `aws:elasticbeanstalk:container:python`）中定义[配置选项](command-options.md)。

**在 Elastic Beanstalk 控制台中配置特定于平台的设置**

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

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

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

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 在**平台软件**下，进行必要的选项设置更改。

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

有关特定于平台的选项以及有关在代码中获取环境属性值的信息，请参阅适用于您的语言或框架的平台主题：
+ Docker – [配置 Elastic Beanstalk Docker 环境](create_deploy_docker.container.console.md)
+ Go – [使用 Elastic Beanstalk Go 平台](go-environment.md)
+ Java SE – [使用 Elastic Beanstalk Java SE 平台](java-se-platform.md)
+ Tomcat – [使用 Elastic Beanstalk Tomcat 平台](java-tomcat-platform.md)
+ .NET Core on Linux – [使用 Elastic Beanstalk .NET core on Linux 平台](dotnet-linux-platform.md)
+ .NET – [使用 Elastic Beanstalk .NET Windows 平台](create_deploy_NET.container.console.md)
+ Node.js – [使用 Elastic Beanstalk Node.js 平台](create_deploy_nodejs.container.md)
+ PHP – [使用 Elastic Beanstalk PHP 平台](create_deploy_PHP.container.md)
+ Python – [使用 Elastic Beanstalk Python 平台](create-deploy-python-container.md)
+ Ruby – [使用 Elastic Beanstalk Ruby 平台](create_deploy_Ruby.container.md)

## 配置环境属性（环境变量）
<a name="environments-cfg-softwaresettings-console"></a>

您可以使用**环境属性**（也称为**环境变量**）向应用程序传递端点、调试设置和其他信息。环境变量可以帮助您在多个环境中为实现不同目的运行应用程序，如开发、测试、暂存和生产。

此外，当您[向环境中添加数据库](using-features.managing.db.md)时，Elastic Beanstalk 会设置环境变量（例如 `RDS_HOSTNAME`），您可以在应用程序代码中读取这些变量来构建连接对象或字符串。

**在 Elastic Beanstalk 控制台中配置环境变量**

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

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

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

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 向下滚动到**运行时环境变量**。

1. 选择**添加环境变量**。

1. 对于**来源**，选择**纯文本**。
**注意**  
下拉列表中的 **Secrets Manager** 和 **SSM Parameter Store** 值用于将环境变量配置为用于存储敏感数据（例如凭证和 API 密钥）的密钥。有关更多信息，请参阅 [将 Elastic B AWS Secrets Manager ean AWS Systems Manager stalk 与参数存储和参数存储一起使用](AWSHowTo.secrets.md)。

1. 输入**环境变量名称**和**环境变量值**对。

1. 如需添加更多变量，请重复**步骤 6** 至**步骤 8**。

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

**环境属性限制**
+ **键**可以包含任意字母数字字符和以下符号：`_ . : / + \ - @`

  列出的符号对环境属性键有效，但可能对您的环境平台上的环境变量名称无效。为了与所有平台兼容，请将环境属性限制于以下模式：`[A-Z_][A-Z0-9_]*`
+ **值**可以包含任意字母数字字符、空格和以下符号：`_ . : / = + \ - @ ' "`
**注意**  
环境属性值中的一些字符必须进行转义。可使用反斜杠字符 (`\`) 表示一些特殊字符和控制字符。以下列表包含表示需要转义的一些字符的示例：  
反斜杠 (`\`) — 表示使用 `\\`
单引号 (`'`) — 表示使用 `\'`
双引号 (`"`) — 表示使用 `\"`
+ **键**和**值**区分大小写。
+ 当存储为格式*key*为 = 的字符串时，所有环境属性的总大小不能超过 4,096 字节。*value*

## 软件设置命名空间
<a name="environments-cfg-softwaresettings-configfiles"></a>

您可以使用[配置文件](ebextensions.md)设置配置选项并在部署期间执行其他实例配置。配置选项可以[特定于平台](command-options-specific.md)，也可以应用于整个 Elastic Beanstalk 服务中的[所有平台](command-options-general.md)。配置选项被组织到*命名空间*中。

您可以使用 Elastic Beanstalk [配置文件](ebextensions.md)在源代码中设置环境属性和配置选项。使用 [`aws:elasticbeanstalk:application:environment` 命名空间](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment)定义环境属性。

**Example .ebextensions/options.config**  

```
option_settings:
  aws:elasticbeanstalk:application:environment:
    API_ENDPOINT: www.example.com/api
```

如果您使用配置文件或 CloudFormation 模板来创建[自定义资源](environment-resources.md)，则可以使用 CloudFormation 函数来获取有关资源的信息，并在部署期间将其动态分配给环境属性。[elastic-beanstalk-samples](https://github.com/awsdocs/elastic-beanstalk-samples/) GitHub 存储库中的以下示例使用 [Ref 函数](ebextensions-functions.md)获取其创建的 Amazon SNS 主题的 ARN，并将其分配给名为的环境属性。`NOTIFICATION_TOPIC`

**注意**  
如果您使用 CloudFormation 函数来定义环境属性，则在评估该函数之前，Elastic Beanstalk 控制台会显示该属性的值。您可以使用 [`get-config` 平台脚本](custom-platforms-scripts.md) 来确定适用于您的应用程序的环境属性的值。
[多容器 Docker](create_deploy_docker_ecs.md) 平台不用于创建 CloudFormation 容器资源。因此，该平台不支持使用 CloudFormation 函数定义环境属性。

**Example .Ebextensions/[sns-topic.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/resource-configuration/sns-topic.config)**  

```
Resources:
  NotificationTopic:
    Type: AWS::SNS::Topic

option_settings:
  aws:elasticbeanstalk:application:environment:
    NOTIFICATION_TOPIC: '`{"Ref" : "NotificationTopic"}`'
```

您也可以使用此功能从 [CloudFormation 虚拟参数](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html)传播信息。此示例获取当前区域并将其分配给名为 `AWS_REGION` 的属性。

**Example .Ebextensions/[env-regionname.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/env-regionname.config)**  

```
option_settings:
  aws:elasticbeanstalk:application:environment:
    AWS_REGION: '`{"Ref" : "AWS::Region"}`'
```

大多数 Elastic Beanstalk 平台都使用用于配置在实例中运行的软件的选项定义其他命名空间，如可将请求中继到您的应用程序的反向代理。有关可用于您的平台的命名空间的更多信息，请参阅以下内容：
+ Go – [Go 配置命名空间](go-environment.md#go-namespaces)
+ Java SE – [Java SE 配置命名空间](java-se-platform.md#java-se-namespaces)
+ Tomcat – [Tomcat 配置命名空间](java-tomcat-platform.md#java-tomcat-namespaces)
+ .NET Core on Linux – [.NET Core on Linux 配置命名空间](dotnet-linux-platform.md#dotnet-linux-namespace)
+ .NET – [aws:elasticbeanstalk:container:dotnet:apppool 命名空间](create_deploy_NET.container.console.md#dotnet-namespaces)
+ Node.js – [Node.js 配置命名空间](create_deploy_nodejs.container.md#nodejs-namespaces)
+ PHP – [配置的命名空间](create_deploy_PHP.container.md#php-namespaces)
+ Python – [Python 配置命名空间](create-deploy-python-container.md#python-namespaces)
+ Ruby – [Ruby 配置命名空间](create_deploy_Ruby.container.md#ruby-namespaces)

Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外，您还可使用控制台、保存的配置、EB CLI 或 AWS CLI来配置选项。请参阅[配置选项](command-options.md)了解更多信息。

## 访问环境属性
<a name="environments-cfg-softwaresettings-accessing"></a>

大多数情况下，您在应用程序代码 (如环境变量) 中访问环境属性。但是，环境属性通常只传递给应用程序，不能通过在您的环境中连接实例和运行 `env` 来查看。
+ [Go](go-environment.md#go-options-properties) – `os.Getenv`

  ```
  endpoint := os.Getenv("API_ENDPOINT")
  ```
+ [Java SE](java-se-platform.md#java-se-options-properties) – `System.getenv`

  ```
  String endpoint = System.getenv("API_ENDPOINT");
  ```
+ [Tomcat](java-tomcat-platform.md#java-tomcat-options-properties)：`System.getProperty` 和 `System.getenv` 

  [2025 年 3 月 26 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html)或之后发布的 Tomcat 平台版本也可以使用 `System.getenv` 来访问纯文本环境变量。您可以继续使用 `System.getProperty` 访问纯文本环境变量。但是，[作为密钥存储的环境变量](AWSHowTo.secrets.env-vars.md)只能使用 `System.getenv` 获取。

  ```
  String endpoint = System.getProperty("API_ENDPOINT");
  ```

  ```
  String endpoint = System.getenv("API_ENDPOINT");
  ```
**重要**  
在 [2025 年 3 月 26 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html)或之后发布的 Tomcat 平台版本中增加了对环境变量的 `System.getenv` 访问权限，在环境变量优先于 Java 系统属性的应用程序中或在明确地从 `System.getProperty` 切换为 `System.getenv` 时，这可能会导致意外行为。有关更多信息和建议的操作，请参阅[使用 Elastic Beanstalk Tomcat 平台](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-platform.html)。
+ [.NET Core on Linux](dotnet-linux-platform.md#dotnet-linux-options-properties) – `Environment.GetEnvironmentVariable`

  ```
  string endpoint = Environment.GetEnvironmentVariable("API_ENDPOINT");
  ```
+ [.NET](create_deploy_NET.container.console.md#dotnet-console-properties) – `appConfig`

  ```
  NameValueCollection appConfig = ConfigurationManager.AppSettings;
  string endpoint = appConfig["API_ENDPOINT"];
  ```
+ [Node.js](create_deploy_nodejs.container.md#nodejs-platform-console-envprops) – `process.env`

  ```
  var endpoint = process.env.API_ENDPOINT
  ```
+ [PHP](create_deploy_PHP.container.md#php-console-properties) – `$_SERVER`

  ```
  $endpoint = $_SERVER['API_ENDPOINT'];
  ```
+ [Python](create-deploy-python-container.md#create-deploy-python-custom-container-envprop) – `os.environ`

  ```
  import os
  endpoint = os.environ['API_ENDPOINT']
  ```
+ [Ruby](create_deploy_Ruby.container.md#create_deploy_Ruby.env.console.ruby.envprops) – `ENV`

  ```
  endpoint = ENV['API_ENDPOINT']
  ```

除了应用程序代码（如在部署过程中运行的脚本）外，您还可以使用[`get-config` 平台脚本](custom-platforms-scripts.md)来访问环境属性。有关使用的示例配置，请参阅[elastic-beanstalk-samples](https://github.com/awsdocs/elastic-beanstalk-samples/search?utf8=%E2%9C%93&q=get-config) GitHub 存储库`get-config`。

# 配置 AWS X-Ray 调试
<a name="environment-configuration-debugging"></a>

您可以使用 AWS Elastic Beanstalk 控制台或配置文件在环境中的实例 AWS X-Ray 上运行守护程序。X-Ray 是一项 AWS 服务，它收集有关您的应用程序所处理的请求的数据，并使用它来构建服务地图，您可以使用该地图来识别应用程序的问题和优化机会。

**注意**  
有些区域不提供 X-Ray。如果您在其中一个区域中创建环境，则不能在环境中的实例上运行 X-Ray 守护程序。  
有关每个区域提供的 AWS 服务的信息，请参阅[区域表](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。

![\[使用 Amazon DynamoDB 存储数据的 Web API 应用程序的服务地图\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/scorekeep-servicemap.png)


X-Ray 提供了一个可用于检测应用程序代码的开发工具包，以及一个用于将调试信息从开发工具包中继到 X-Ray API 的守护程序。

**支持的平台**

您可以将 X-Ray 开发工具包与以下 Elastic Beanstalk 平台结合使用：
+ **Go** - 版本 2.9.1 及更高版本
+ **Java 8** - 版本 2.3.0 及更高版本
+ **Java 8 with Tomcat 8** - 版本 2.4.0 及更高版本
+ **Node.js** - 版本 3.2.0 及更高版本
+ **Windows Server** - 在 2016 年 12 月 18 日或之后发布的所有平台版本
+ **Python** - 版本 2.5.0 及更高版本

在支持的平台上，您可以使用配置选项在环境中的实例上运行 X-Ray 守护程序。您可以在 [Elastic Beanstalk 控制台](#environment-configuration-debugging-console)中或使用[配置文件](#environment-configuration-debugging-namespace)启用此守护程序。

要将数据上传到 X-Ray，X-Ray 守护程序需要**AWSXrayWriteOnlyAccess**托管策略中的 IAM 权限。这些权限包含在 [Elastic Beanstalk 实例配置文件](concepts-roles-instance.md)中。如果您不使用默认的实例配置文件，请参阅 *AWS X-Ray 开发人员指南*中的[为守护进程授予向 X-Ray 发送数据的权限](https://docs.aws.amazon.com/xray/latest/devguide/xray-daemon.html#xray-daemon-permissions)。

要使用 X-Ray 进行调试，必须使用 X-Ray 开发工具包。有关说明和示例应用程序，请参阅 *AWS X-Ray 开发人员指南*中的[开始使用 AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-gettingstarted.html)。

如果使用不包含守护程序的平台版本，您仍然可以在配置文件中使用脚本运行它。有关更多信息，请参阅 *AWS X-Ray 开发人员指南*中的[手动下载和运行 X-Ray 守护进程（高级）](https://docs.aws.amazon.com/xray/latest/devguide/xray-daemon-beanstalk.html#xray-daemon-beanstalk-manual)。

**Topics**
+ [配置调试](#environment-configuration-debugging-console)
+ [aws:elasticbeanstalk:xray 命名空间](#environment-configuration-debugging-namespace)

## 配置调试
<a name="environment-configuration-debugging-console"></a>

您可以通过 Elastic Beanstalk 控制台在运行环境中启用 X-Ray 守护程序。

**在 Elastic Beanstalk 控制台中启用调试**

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

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

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

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 在 **Amazon X-Ray** 部分中，选择**启用**。

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

您也可以在创建环境期间启用此选项。有关更多信息，请参阅 [创建新环境向导](environments-create-wizard.md)。

## aws:elasticbeanstalk:xray 命名空间
<a name="environment-configuration-debugging-namespace"></a>

您可以使用 `XRayEnabled` 命名空间中的 `aws:elasticbeanstalk:xray` 选项启用调试。

要在部署应用程序时自动启用调试，请在源代码中的[配置文件](ebextensions.md)中设置此选项，如下所示。

**Example .ebextensions/debugging.config**  

```
option_settings:
  aws:elasticbeanstalk:xray:
    XRayEnabled: true
```

# 查看您的 Elastic Beanstalk 环境日志
<a name="environments-cfg-logging"></a>

AWS Elastic Beanstalk 提供了两种定期查看运行您的应用程序的 Amazon EC2 实例的日志的方法：
+ 配置您的 Elastic Beanstalk 环境以将轮换的实例日志上传到环境的 Amazon S3 存储桶。
+ 配置环境以将实例日志流式传输到 Amazon CloudWatch 日志。

当您将实例日志流配置为 CloudWatch 日志时，Elastic CloudWatch Beanstalk 会为 EC2 亚马逊实例上的代理和部署日志创建日志日志组，并将这些日志 CloudWatch 文件实时传输到日志。有关实例日志的更多信息，请参阅[查看您的 Elastic Beanstalk 环境中的 Amazon EC2 实例的日志](using-features.logging.md)。

除了实例日志外，如果您为环境启用[增强型运行状况](health-enhanced.md)，则可以将环境配置为将运行状况信息流式传输到 CloudWatch 日志。当环境的运行状况状态发生更改时，Elastic Beanstalk 会将记录连同新状态和更改原因说明一起添加到运行状况日志组。有关环境运行状况流式传输的信息，请参阅[将 Elastic Beanstalk 环境运行状况信息流式传输到亚马逊日志 CloudWatch](AWSHowTo.cloudwatchlogs.envhealth.md)。

## 配置实例日志查看
<a name="environments-cfg-logging-console"></a>

要查看实例日志，您可以在 Elastic Beanstalk 控制台中启用实例日志轮换和日志流式传输。

**在 Elastic Beanstalk 控制台中配置实例日志轮换和日志流式传输**

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

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

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

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 在 **S3 日志存储**部分中，选择**轮换日志**下方的**启用**以允许将轮换日志上传到 Amazon S3。

1. 在将**实例日志流式传输到 CloudWatch 日志**部分中，配置以下设置：
   + **日志流式传输**：选择**启用**以启用日志流式传输。
   + **保留**-在 “日志” 中指定保留 CloudWatch 日志的天数。
   + **生命周期**-设置为**终止时**删除日志，以便在环境终止时立即从 CloudWatch 日志中删除日志，而不是等待日志过期。

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

在启用日志流式传输后，您可以返回到**软件**配置类别或页面并查找**日志组**链接。单击此链接可在 CloudWatch 控制台中查看您的实例日志。

## 配置环境运行状况日志查看
<a name="environments-cfg-logging-health-console"></a>

要查看环境运行状况日志，您可以在 Elastic Beanstalk 控制台中启用环境运行状况日志流式传输。

**在 Elastic Beanstalk 控制台中配置环境运行状况日志流式传输**

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

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

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

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 转到**监控**部分。

1. 在 **Health 事件流式传输到 CloudWatch 日志**下，配置以下设置：
   + **日志流式传输**：选择**启用**以启用日志流式传输。
   + **保留**-在 “日志” 中指定保留 CloudWatch 日志的天数。
   + **生命周期**-设置为**终止时**删除日志，以便在环境终止时立即从 CloudWatch 日志中删除日志，而不是等待日志过期。

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

## 日志查看命名空间
<a name="environments-cfg-logging-namespaces"></a>

以下命名空间包含日志查看的设置：
+ [`aws:elasticbeanstalk:hostmanager`](command-options-general.md#command-options-general-elasticbeanstalkhostmanager) - 配置为将轮换日志上传到 Amazon S3。
+ [`aws:elasticbeanstalk:cloudwatch:logs`](command-options-general.md#command-options-general-cloudwatchlogs)— 将实例日志流配置为 CloudWatch。
+ [`aws:elasticbeanstalk:cloudwatch:logs:health`](command-options-general.md#command-options-general-cloudwatchlogs-health)— 将环境运行状况流配置为 CloudWatch。

# 使用 Amazon SNS 发送 Elastic Beanstalk 环境通知
<a name="using-features.managing.sns"></a>

您可以将 AWS Elastic Beanstalk 环境配置为使用亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 将影响您的应用程序的重要事件通知您。要在发生错误或环境运行状况发生变化 AWS 时接收电子邮件，请在创建环境时或之后指定电子邮件地址。

**注意**  
Elastic Beanstalk 使用 Amazon SNS 进行通知。[有关 Amazon SNS 定价的信息，请参阅https://aws.amazon.com/sns/定价/。](https://aws.amazon.com/sns/pricing/)

为环境配置通知时，Elastic Beanstalk 会代表您为环境创建 Amazon SNS 主题。Elastic Beanstalk 必须具有所需的权限才能发送消息到 Amazon SNS 主题。有关更多信息，请参阅 [配置发送通知的权限](#configuration-notifications-permissions)。

当值得注意的[事件](using-features.events.md)发生时，Elastic Beanstalk 会向该主题发送消息。然后，Amazon SNS 则将它收到的消息中继到该主题的订阅者。值得注意的事件包括环境创建错误以及[环境和实例运行状况](health-enhanced.md)的所有更改。针对 Amazon EC2 Auto Scaling 操作（例如，对环境添加和删除实例）的事件和其他信息性事件不会触发通知。

![\[Amazon SNS 通知电子邮件\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/sns-notification-email.png)


您可以在创建环境时或此后的某个时间在 Elastic Beanstalk 控制台中输入电子邮件地址。这样将会创建一个 Amazon SNS 主题并订阅该主题。Elastic Beanstalk 负责管理主题的生命周期，在您的环境终止时或者您在[环境管理控制台](environments-console.md)中删除电子邮件地址时删除主题。

`aws:elasticbeanstalk:sns:topics` 命名空间提供了各种选项，可用于使用配置文件、CLI 或软件开发工具包来配置 Amazon SNS 主题。使用这些方法之一，您可以配置订阅者和终端节点的类型。对于订阅者类型，您可以选择 Amazon SQS 队列或 HTTP URL。

您只能打开或关闭 Amazon SNS 通知。根据环境的大小和构成，发送到主题的通知频率可能较高。要配置在特定情况下发送的通知，您还可以使用其他选项。您可以通过亚马逊[设置事件驱动型规则， EventBridge 这些规则](AWSHowTo.eventbridge.md)在 Elastic Beanstalk 发出符合特定标准的事件时通知您。或者，您可以[将您的环境配置为发布自定义指标](health-enhanced-cloudwatch.md)，并将 [Amazon CloudWatch 警报设置](using-features.alarms.md)为在这些指标达到不健康阈值时通知您。

## 使用 Elastic Beanstalk 控制台配置通知
<a name="configuration-notifications-console"></a>

您可以在 Elastic Beanstalk 控制台中输入电子邮件地址，以便为环境创建 Amazon SNS 主题。

**在 Elastic Beanstalk 控制台中配置通知**

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

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

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

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 向下滚动到**电子邮件通知**部分。

1. 输入电子邮箱地址。

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

当您为通知输入电子邮件地址时，Elastic Beanstalk 会为环境创建 Amazon SNS 主题并添加订阅。Amazon SNS 会向订阅的地址发送电子邮件以确认订阅。您必须单击确认电子邮件中的链接才能激活订阅并接收通知。

## 使用配置选项配置通知
<a name="configuration-notifications-namespace"></a>

可以使用 [`aws:elasticbeanstalk:sns:topics` 命名空间](command-options-general.md#command-options-general-elasticbeanstalksnstopics)中的选项为您的环境配置 Amazon SNS 通知。可以使用[配置文件](ebextensions.md)、CLI 或开发工具包来设置这些选项。
+ **通知终端节点** – 要将通知发送到的电子邮件地址、Amazon SQS 队列或 URL。如果您设置此选项，则可为指定终端节点创建 SQS 队列和订阅。如果终端节点不是电子邮件地址，还必须设置 `Notification Protocol` 选项。SNS 会基于 `Notification Endpoint` 的值来验证 `Notification Protocol` 的值。多次设置此选项可创建针对主题的更多订阅。如果您清除此选项，则该主题将被删除。
+ **通知协议** – 用于将通知发送到 `Notification Endpoint` 的协议。此选项默认为 `email`。将此选项设置为 `email-json` 可发送 JSON 格式的电子邮件，设置为 `http` 或 `https` 可将 JSON 格式的通知发布到 HTTP 终端节点，或设置为 `sqs` 可向 SQS 队列发送通知。
**注意**  
AWS Lambda 不支持通知。
+ **通知主题 ARN** – 为环境设置通知终端节点之后，读取此设置以获取 SNS 主题的 ARN。您还可以设置此选项为通知使用现有 SNS 主题。更改此选项或终止环境时，不会删除通过此选项附加到环境的主题。

  要配置 Amazon SNS 通知，您需要具备所需的权限。如果您的 IAM 用户使用 Elastic Bean **AdministratorAccessstalk-AWSElastic Beanstalk** [托管用户策略，那么您应该已经拥有配置 Elastic Bean](AWSHowTo.iam.managed-policies.md) stalk 为您的环境创建的默认 Amazon SNS 主题所需的权限。但是，当您配置 Elastic Beanstalk 无法管理的 Amazon SNS 主题时，则需要将以下策略添加到您的用户角色。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "sns:SetTopicAttributes",
          "sns:GetTopicAttributes",
          "sns:Subscribe",
          "sns:Unsubscribe",
          "sns:Publish"
        ],
        "Resource": [
          "arn:aws:sns:us-east-2:123456789012:sns_topic_name"
        ]
      }
    ]
  }
  ```

------
+ **通知主题名称** – 设置此选项可自定义用于环境通知的 Amazon SNS 主题的名称。如果已存在同名主题，则 Elastic Beanstalk 会将该主题挂载到环境。
**警告**  
如果您使用 `Notification Topic Name` 将现有 SNS 主题挂载到环境，则将来您终止环境或更改此设置时，Elastic Beanstalk 将会删除该主题。

  如果您更改此选项，`Notification Topic ARN` 也会更改。如果环境已经挂载了主题，则 Elastic Beanstalk 会删除旧主题，并创建新的主题和订阅。

  使用自定义主题名称，您还必须提供外部创建的自定义主题的 ARN。托管用户策略不会自动检测使用自定义名称的主题，因此您必须向 IAM 用户提供自定义 Amazon SNS 权限。使用的策略与用于自定义主题 ARN 的策略相似，但增加以下内容：
  + `Actions` 列表中包括另外两个操作，具体是：`sns:CreateTopic`、`sns:DeleteTopic`
  + 如果您要将`Notification Topic Name`一个自定义主题名称更改为另一个自定义主题名称，则还必须在`Resource`列表中 ARNs 包括两个主题的名称。或者，包含一个涵盖两个主题的正则表达式。这样，Elastic Beanstalk 就有权删除旧主题并创建新主题。

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

## 配置发送通知的权限
<a name="configuration-notifications-permissions"></a>

本部分讨论与使用 Amazon SNS 的通知相关的安全注意事项。有两种截然不同的情况：
+ 使用 Elastic Beanstalk 为您的环境创建的默认 Amazon SNS 主题。
+ 通过配置选项提供外部 Amazon SNS 主题。

Amazon SNS 主题的默认访问策略仅允许主题所有者发布或订阅该主题。但是，通过适当的策略配置，Elastic Beanstalk 可以获得在本节中描述的两种情况之一中向 Amazon SNS 主题发布的权限。以下各子节提供了详细信息。

### 默认主题的权限
<a name="configuration-notifications-permissions-default"></a>

为环境配置通知时，Elastic Beanstalk 会为环境创建 Amazon SNS 主题。Elastic Beanstalk 必须具有所需的权限才能发送消息到 Amazon SNS 主题。如果您的环境使用 Elastic Beanstalk 控制台或 EB CLI 为其生成的[服务角色](iam-servicerole.md)，或者使用您的账户的[监控服务相关角色](using-service-linked-roles-monitoring.md)，则无需执行任何其他操作。这些托管角色包括允许 Elastic Beanstalk 向 Amazon SNS 主题发送消息所需的权限。

但是，如果您在创建环境时提供自定义服务角色，请确保此自定义服务角色包括以下策略。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sns:Publish"
      ],
      "Resource": [
        "arn:aws:sns:us-east-2:123456789012:ElasticBeanstalkNotifications*"
      ]
    }
  ]
}
```

------

### 外部主题的权限
<a name="configuration-notifications-permissions-external"></a>

[使用配置选项配置通知](#configuration-notifications-namespace) 解释了如何使用其他 Amazon SNS 主题替换 Elastic Beanstalk 提供的 Amazon SNS 主题。如果您替换了主题，Elastic Beanstalk 必须验证您有权发布到此 SNS 主题，您才能将 SNS 主题与环境关联。您应该具有 `sns:Publish`。服务角色使用相同的权限。为验证这一点，Elastic Beanstalk 在您创建或更新环境的操作中，发送测试通知到 SNS。如果此测试失败，则创建或更新环境的尝试也会失败。Elastic Beanstalk 会显示一条消息，解释失败的原因。

如果您为环境提供了自定义服务角色，请确保自定义服务角色包括以下策略，以允许 Elastic Beanstalk 向 Amazon SNS 主题发送消息。在以下代码中，将 *`sns_topic_name`* 替换为您在配置选项中提供的 Amazon SNS 主题的名称。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sns:Publish"
      ],
      "Resource": [
        "arn:aws:sns:us-east-2:123456789012:sns_topic_name"
      ]
    }
  ]
}
```

------

 有关 Amazon SNS 访问控制的详细信息，请参阅《*Amazon Simple Notification Service 开发人员指南*》中的 [Amazon SNS 访问控制示例案例](https://docs.aws.amazon.com/sns/latest/dg/sns-access-policy-use-cases.html)。

# 使用 Elastic Beanstalk 配置 Amazon Virtual Private Cloud (Amazon VPC)
<a name="using-features.managing.vpc"></a>

[亚马逊虚拟私有云](https://docs.aws.amazon.com/vpc/latest/userguide/)（亚马逊 VPC）是一项网络服务，可将流量安全地路由到在 Elastic Beanstalk 中运行您的应用程序的 EC2 实例。如果在启动您的环境时未配置 VPC，Elastic Beanstalk 将使用默认 VPC。

您可以在自定义 VPC 中启动您的环境以自定义网络和安全设置。您可以在 Elastic Beanstalk 中选择用于您的资源的子网，以及如何为您的环境中的实例和负载均衡器配置 IP 地址。在创建环境时，它将锁定到一个 VPC，但您可以在运行的环境上更改子网和 IP 地址设置。

## 在 Elastic Beanstalk 控制台中配置 VPC 设置
<a name="environments-cfg-vpc-console"></a>

如果在创建环境时选择自定义 VPC，您可以在 Elastic Beanstalk 控制台中修改其 VPC 设置。

**配置您的环境的 VPC 设置**

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

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

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

1. 在 **Network**（网络）配置类别中，选择 **Edit**（编辑）。

可供使用的设置如下。

**Topics**
+ [VPC](#environments-cfg-vpc-console-vpc)
+ [负载均衡器可见性](#environments-cfg-vpc-console-lbvisibility)
+ [负载均衡器子网](#environments-cfg-vpc-console-lbsubnets)
+ [实例公有 IP 地址](#environments-cfg-vpc-console-ec2ip)
+ [实例子网](#environments-cfg-vpc-console-ec2subnets)
+ [数据库子网](#environments-cfg-vpc-console-dbsubnets)

### VPC
<a name="environments-cfg-vpc-console-vpc"></a>

为您的环境选择一个 VPC。您只能在创建环境期间更改该设置。

![\[Elastic Beanstalk 控制台上的 Modify network（修改网络）配置页面中的“VPC”部分\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environments-cfg-vpc-console-vpc.png)


### 负载均衡器可见性
<a name="environments-cfg-vpc-console-lbvisibility"></a>

对于负载均衡的环境，请选择负载均衡器模式。默认情况下，负载均衡器是具有公有 IP 地址和域名的公有负载均衡器。如果您的应用程序仅处理来自您的 VPC 或连接的 VPN 的流量，请取消选择该选项，然后为您的负载均衡器选择私有子网以将负载均衡器指定为内部负载均衡器并禁止从 Internet 访问。

### 负载均衡器子网
<a name="environments-cfg-vpc-console-lbsubnets"></a>

对于负载均衡的环境，请选择负载均衡器用于处理流量的子网。对于公有应用程序，请选择公有子网。可以在多个可用区中使用子网以提供高可用性。对于内部应用程序，请选择私有子网并禁用负载均衡器可见性。

![\[Elastic Beanstalk 控制台上的 Modify network（修改网络）配置页面中的 Load balancer settings（负载均衡器设置）部分\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environments-cfg-vpc-console-lb.png)


### 实例公有 IP 地址
<a name="environments-cfg-vpc-console-ec2ip"></a>

如果为您的应用程序实例选择公有子网，请启用公有 IP 地址以便从 Internet 路由这些地址。

### 实例子网
<a name="environments-cfg-vpc-console-ec2subnets"></a>

为您的应用程序实例选择子网。为您的负载均衡器使用的每个可用区选择至少一个子网。如果为您的实例选择私有子网，您的 VPC 必须在公有子网中具有实例可用于访问 Internet 的 NAT 网关。

![\[Elastic Beanstalk 控制台上的 Modify network（修改网络）配置页面中的 Instance settings（实例设置）部分\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environments-cfg-vpc-console-ec2.png)


### 数据库子网
<a name="environments-cfg-vpc-console-dbsubnets"></a>

在运行附加到您的 Elastic Beanstalk 环境的 Amazon RDS 数据库时，请为数据库实例选择子网。为了获得高可用性，请将数据库指定为多可用区数据库，并为每个可用区选择一个子网。要确保您的应用程序可以连接到您的数据库，请在同一子网中运行应用程序和数据库。

## aws:ec2:vpc 命名空间
<a name="environments-cfg-vpc-namespace"></a>

您可以使用 `aws:ec2:vpc` 命名空间中的配置选项配置您的环境的网络设置。

以下[配置文件](ebextensions.md)使用该命名空间中的选项，为公有-私有配置设置环境的 VPC 和子网。要在配置文件中设置 VPC ID，必须在创建环境期间在应用程序源包中包含该文件。有关在创建环境期间配置这些设置的其他方法，请参阅[在环境创建期间设置配置选项](environment-configuration-methods-during.md)。

**Example .ebextensions/vpc.config – 公有-私有**  

```
option_settings:
   aws:ec2:vpc:
      VPCId: vpc-087a68c03b9c50c84
      AssociatePublicIpAddress: 'false'
      ELBScheme: public
      ELBSubnets: subnet-0fe6b36bcb0ffc462,subnet-032fe3068297ac5b2
      Subnets: subnet-026c6117b178a9c45,subnet-0839e902f656e8bd1
```

此示例显示了公共公共配置，其中负载均衡器和 EC2 实例在同一个公有子网中运行。

**Example .ebextensions/vpc.config – 公有-公有**  

```
option_settings:
   aws:ec2:vpc:
      VPCId: vpc-087a68c03b9c50c84
      AssociatePublicIpAddress: 'true'
      ELBScheme: public
      ELBSubnets: subnet-0fe6b36bcb0ffc462,subnet-032fe3068297ac5b2
      Subnets: subnet-0fe6b36bcb0ffc462,subnet-032fe3068297ac5b2
```

# 将 Elastic Beanstalk EC2 环境从-Classic 迁移到 VPC
<a name="vpc-ec2migration"></a>

本主题介绍如何将您的 Elastic Beanstalk 环境 EC2从经典网络平台迁移到亚马逊虚拟[私有云（亚马逊](https://docs.aws.amazon.com/vpc/latest/userguide/) VPC）网络的不同选项。

如果您在 2013 年 12 月 4 日之前创建了 AWS 账户，则某些 AWS 区域环境中可能使用 EC2-Classic 网络配置。2013 年 12 月 4 日当天或之后创建的所有 AWS 账户都已在每个地区仅限 VPC。 AWS 唯一的豁免是由于支持请求而启用了 Amazon EC2-Classic。

**注意**  
您可以在 [Elastic Beanstalk 控制台](https://console.aws.amazon.com/elasticbeanstalk)的 [Configuration overview](environments-cfg-console.md#environments-cfg-console.overview)（配置概览）页面的 **Network configuration**（网络配置）类别中查看环境的网络配置设置。

## 为什么应该迁移
<a name="vpc-ec2migration.benefits"></a>

Amazon EC2-Classic将于2022年8月15日结束其标准支持。为避免工作负载中断，我们建议您在 2022 年 8 月 15 日之前从 Amazon EC2-Classic 迁移到 VPC。我们还要求您将来不要在 Amazon EC2-Classic 上启动任何 AWS 资源，而是使用亚马逊 VPC。

当您将 Elastic Beanstalk 环境从 EC2 Amazon-Classic 迁移到亚马逊 VPC 时，必须创建一个新账户。 AWS 您还必须在新 AWS 账户中重新创建 AWS EC2-Classic 环境。无需为您的环境执行任何其他配置工作即可使用默认 VPC。如果默认 VPC 不符合您的要求，您可以手动创建自定义 VPC 并将其与您的环境关联。



或者，如果您的现有 AWS 账户中有无法迁移到新 AWS 账户的资源，请将一个 VPC 添加到您的当前账户。然后，配置您的环境以使用 VPC。

有关更多信息，请参阅 “[EC2经典网络即将停用——以下是如何准备](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)” 博客文章。

## 将环境从 EC2-Classic 迁移到新 AWS 账户（推荐）
<a name="vpc-ec2migration.newaccount"></a>

如果您还没有在 2013 年 12 月 4 日当天或之后创建的账户，请创建一个新账户。 AWS 您要将您的环境迁移到此新账户中。

1. 您的新 AWS 账户为其环境提供了默认 VPC。如果您不需要创建自定义 VPC，请跳至步骤 2。

   您可以通过以下方式之一创建自定义 VPC：
   + 使用 Amazon VPC 控制台向导，您可以使用其中一个可用的配置选项快速创建 VPC。有关更多信息，请参阅 [Amazon VPC 控制台向导配置](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_wizard.html)。
   + 如果您对 VPC 有更具体的要求，请在 Amazon VPC 控制台上创建自定义 VPC。例如，如果您的使用案例需要特定数量的子网，我们建议您这样做。有关更多信息，请参阅[VPCs 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)。
   + 如果您更喜欢在 Elastic Beanstalk 环境中使用 AWS CloudFormation 模板，请使用 GitHub 网站上的[elastic-beanstalk-samples](https://github.com/awsdocs/elastic-beanstalk-samples/)存储库创建 VPC。此存储库包含 CloudFormation 模板。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon VPC 结合使用](vpc.md)。
**注意**  
您还可以在使用新建环境[向导在新 AWS 账户中重新创建环境的同时创建](environments-create-wizard.md)自定义 VPC。如果您使用向导并选择创建自定义 VPC，则该向导将您重新导向到 Amazon VPC 控制台。

1. 在新 AWS 账户中，创建新环境。我们建议该环境在您要迁移的 AWS 账户中包含与现有环境相同的配置。您可以使用以下方法之一实现这一点。
**注意**  
如果您的新环境在迁移后必须使用相同的 CNAME，请在 EC2-Classic 平台上终止原始环境。这会释放别名记录以供使用。但是，这样做可能会导致该环境停机，还可能导致其他客户在您终止 EC2-Classic环境和创建新环境之间选择您的CNAME。有关更多信息，请参阅 [终止 Elastic Beanstalk 环境](using-features.terminating.md)。  
对于具有自己的专有域名的环境，CNAME 没有此问题。您只需更新域名系统 (DNS)，即可将请求转发到您的新 CNAME。
   +  使用 [Elastic Beanstalk 控制台](https://console.aws.amazon.com/elasticbeanstalk)上的[创建新环境向导](environments-create-wizard.md)。该向导提供了一个用于创建自定义 VPC 的选项。如果您不选择创建自定义 VPC，则会分配默认 VPC。
   + 使用 Elastic Beanstalk 命令行界面 (EB CLI) 在新账户中重新创建您的环境。 AWS **eb create** 命令描述中的其中一个[示例](eb3-create.md#eb3-createexample1)演示了如何在自定义 VPC 中创建环境。如果您不提供 VPC ID，环境使用默认 VPC。

     通过使用这种方法，您可以跨两个 AWS 账户使用已保存的配置文件。因此，无需手动输入所有配置信息。但是，您必须使用 e [b config save 命令保存要迁移的 EC2-Classic 环境的配置](eb3-config.md)设置。将保存的配置文件复制到新账户环境的新目录中。
**注意**  
您必须编辑已保存的配置文件中的某些数据，然后才能在新账户中使用它。您必须使用新账户的正确数据更新与先前账户相关的信息。例如，您必须将 AWS Identity and Access Management （IAM）角色的 Amazon Resource Name（ARN）替换为新账户的 IAM 角色 ARN。

     如果您使用带有 `cfg` 的 [eb create](eb3-create.md) 命令，系统将使用指定的已保存的配置文件创建新环境。有关更多信息，请参阅 [使用 Elastic Beanstalk 保存的配置](environment-configuration-savedconfig.md)。

## 将环境从 EC2-Classic 迁移到同一个 AWS 账户中
<a name="vpc-ec2migration.classicaccount"></a>

您的现有 AWS 账户可能有无法迁移到新 AWS 账户的资源。在这种情况下，您必须重新创建环境并为您创建的每个环境手动配置 VPC。

### 将您的环境迁移到自定义 VPC
<a name="vpc-ec2migration.classicaccount.expandable"></a>

**先决条件**  
开始之前，您必须拥有 VPC。您可以通过以下方式之一创建非默认（自定义）VPC：
+ 使用 Amazon VPC 控制台向导，您可以使用其中一个可用的配置选项快速创建 VPC。有关更多信息，请参阅 [Amazon VPC 控制台向导配置](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_wizard.html)。
+ 如果您对 VPC 有更具体的要求，请在 Amazon VPC 控制台上创建自定义 VPC。例如，如果您的使用案例需要特定数量的子网，我们建议您这样做。有关更多信息，请参阅[VPCs 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)。
+ 如果您更喜欢在 Elastic Beanstalk 环境中使用 AWS CloudFormation 模板，请使用 GitHub 网站上的[elastic-beanstalk-samples](https://github.com/awsdocs/elastic-beanstalk-samples/)存储库创建 VPC。此存储库包含 CloudFormation 模板。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon VPC 结合使用](vpc.md)。

在以下步骤中，在新环境中配置 VPC IDs 时，您将使用生成的 VPC ID 和子网。

1. 创建与现有环境包含相同配置的新环境。您可以使用以下方法之一实现这一点。
**注意**  
“保存的配置”功能可以帮助您在新账户中重新创建环境。此功能可以保存环境配置，因此您可以在创建或更新其他环境时应用它。有关更多信息，请参阅 [使用 Elastic Beanstalk 保存的配置](environment-configuration-savedconfig.md)。
   + 在配置新环境时，使用 [Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk 控制台，应用您的-Classic 环境 EC2中保存的配置。此配置将使用 VPC。有关更多信息，请参阅 [使用 Elastic Beanstalk 保存的配置](environment-configuration-savedconfig.md)。
   + 使用 Elastic Beanstalk 命令行界面 (EB CLI)，运行 [eb create](eb3-create.md) 命令以重新创建环境。提供原始环境的参数和 VPC 标识符。**eb create** 命令描述中的其中一个[示例](eb3-create.md#eb3-createexample1)演示了如何在自定义 VPC 中创建环境。
   + 使用 AWS Command Line Interface (AWS CLI)，然后使用**elasticbeanstalk create-environment**命令重新创建您的环境。使用 VPC 标识符提供原始环境的参数。有关说明，请参阅[使用 CLI 创建 Elastic Beanstalk 环境 AWS](environments-create-awscli.md)。

1. 将 CNAMEs 现有环境与新环境交换。这样就可以使用熟悉的地址引用创建的新环境。您可以使用 EB CLI 或 AWS CLI。
   + 使用 EB CLI， CNAMEs 通过运行**eb swap**命令来交换环境。有关更多信息，请参阅 [设置 EB 命令行界面（EB CLI）来管理 Elastic Beanstalk](eb-cli3.md)。
   + 使用 AWS CLI，使用 ela [sticbeanstalk 命令 swap-environment-cnames](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/swap-environment-cnames.html)交换环境 CNAMEs 。有关更多信息，请参阅 [AWS CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/)。

# 您的 Elastic Beanstalk 环境的域名
<a name="customdomains"></a>

默认情况下，您的环境可供位于 `elasticbeanstalk.com` 子域的用户使用。在[创建环境](using-features.environments.md)时，您可以为应用程序选择一个主机名。子域和域自动填充到 `region.elasticbeanstalk.com`。

为了将用户路由到您的环境，Elastic Beanstalk 将注册一个 CNAME 记录，以指向您环境的负载均衡器。可以在 Elastic Beanstalk 控制台的[环境概述](environments-dashboard.md)页面中查看环境的应用程序 URL 以及 CNAME 的当前值。

![\[Elastic Beanstalk 控制台中的环境概述页面上显示了带 CNAME 的环境 URL\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environment-management-dashboard-url.png)


在概述页面上选择 URL，或选择导航窗格上的 **Go to environment**（转至环境）以导航到应用程序的网页。

您可通过将您的环境上的 CNAME 与其他环境的 CNAME 进行交换来更改它。有关说明，请参阅[使用 Elastic Beanstalk 进行蓝/绿部署](using-features.CNAMESwap.md)。

如果您拥有一个域名，则可使用 Amazon Route 53 将它解析到您的环境。您可向 Amazon Route 53 购买域名，也可使用从其他提供商处购买的域名。

要向 Route 53 购买域名，请参阅 *Amazon Route 53 开发人员指南*中的[注册新域](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html)。

要了解有关使用自定义域的更多信息，请参阅 *Amazon Route 53 开发人员指南*中的[将流量路由到 AWS Elastic Beanstalk 环境](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-beanstalk-environment.html)。

**重要**  
如果您终止环境，则还必须删除您创建的任何 CNAME 映射，因为其他客户可能会重用可用的主机名。请务必删除指向已终止环境的 DNS 记录，以防出现 *悬空 DNS 条目*。悬空 DNS 条目可能会使指向您的域的互联网流量出现安全漏洞，此外还可能带来其他风险。  
有关更多信息，请参阅《Amazon Route 53 开发人员指南》中的 [防止 Route 53 中悬挂委派记录](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/protection-from-dangling-dns.html)**。您还可以在*AWS 安全博客*的 [Amazon CloudFront 请求增强域名保护](https://aws.amazon.com/blogs/security/enhanced-domain-protections-for-amazon-cloudfront-requests/)中了解有关悬挂 DNS 条目的更多信息。