

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

# 你的 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。