您的 Elastic Beanstalk 环境的 Amazon EC2 实例 - AWS Elastic Beanstalk

您的 Elastic Beanstalk 环境的 Amazon EC2 实例

在创建 Web 服务器环境时,AWS Elastic Beanstalk 会创建一个或多个 Amazon Elastic Compute Cloud(Amazon EC2)虚拟机(称作实例)。

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

注意

您环境中的 Auto Scaling 组将管理运行应用程序的 Amazon EC2 实例。当您进行本页中所述的配置更改时,启动配置也将发生更改。启动配置是 Amazon EC2 启动模板或 Auto Scaling 组启动配置资源。此更改需要替换所有实例。它还会触发滚动更新不可变更新,具体视配置而定。

Elastic Beanstalk 支持多种 Amazon EC2 实例购买选项按需实例预留实例Spot 实例。按需实例是一种随用随付的资源 – 使用时不需要长期承诺。预留实例是对环境中的匹配按需实例自动应用的预购账单折扣。Spot 实例是一种未使用的 Amazon EC2 实例,以低于按需价格提供。您可以通过设置单个选项在环境中启用 Spot 实例。您可以通过使用其他选项来配置 Spot 实例使用,包括混合使用按需实例和 Spot 实例。有关更多信息,请参阅Auto Scaling 组

Amazon EC2 实例类型

当您创建新环境时,Elastic Beanstalk 会基于您选择的 Amazon EC2 实例类型预置 Amazon EC2 实例。您选择的实例类型决定了运行实例的主机硬件。EC2 实例类型可以按每种类型所基于的处理器架构进行分类。Elastic Beanstalk 支持基于以下处理器架构的实例类型:AWS Graviton 64 位 Arm 架构 (arm64)、64 位架构 (x86) 和 32 位架构 (i386)。

注意

大多数 Elastic Beanstalk 平台都不再支持 i386 32 位架构。我们建议您选择 x86 或 arm64 架构类型代替。Elastic Beanstalk 为 aws:ec2:instances 命名空间中的 i386 处理器实例类型提供配置选项

默认情况下,创建新环境时,Elastic Beanstalk 会选择 x86 处理器架构。只有创建新环境时,才能为实例类型选择处理器架构(x86、arm64)。创建环境后,只能将实例类型更改为运行环境的同一处理器架构中的其他实例类型。您无法更改处理器架构。

指定 Elastic Beanstalk 环境配置中的所有实例类型必须具有相同类型的处理器架构。假设您将新实例类型添加到已经具有 t2.medium 实例类型(基于 x86 架构)的现有环境。您只能添加相同架构的其他实例类型,例如 t2.small 或 t4g.large。

在 Amazon EC2 推出新的兼容实例类型之后,Elastic Beanstalk 会定期增加对这些实例类型的支持。有关可用实例类型的更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的实例类型或《适用于 Windows 实例的 Amazon EC2 用户指南》中的实例类型

注意

Elastic Beanstalk 现在跨所有 AWS Graviton 支持的区域在所有最新 Amazon Linux 2 平台上提供对 Graviton 的支持。有关使用基于 arm64 的实例类型创建 Elastic Beanstalk 环境的更多信息,请参阅 配置您环境的 Amazon EC2 实例

创建在 arm64 架构上运行 Amazon EC2 实例的新环境,然后在 Elastic Beanstalk 中使用部署选项将现有的应用程序迁移到这些环境。

要了解有关 Graviton 基于 arm64 的处理器的更多信息,请参阅以下 AWS 资源:

配置您环境的 Amazon EC2 实例

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

创建环境后,您无法编辑环境的处理器架构。只有创建环境期间才能为实例类型选择处理器架构(x86、arm64)。

创建环境期间在 Elastic Beanstalk 控制台中配置 Amazon EC2 实例

  1. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 AWS 区域。

  2. 在导航窗格中,选择 Environments (环境)

  3. 选择 Create a new environment (创建新环境) 以开始创建环境。

  4. 在向导的主页上,在选择创建环境之前,选择配置更多选项

  5. Instances (实例) 配置类别中,选择 Edit (编辑)。对此类别中的设置进行更改,然后选择应用。有关设置说明,请参阅本页上的实例类别设置部分。

  6. Capacity(容量)配置类别中,选择 Edit(编辑)。对此类别中的设置进行更改,然后选择继续。有关设置说明,请参阅本页上的容量类别设置部分。

    选择处理器架构

    向下滚动到 Processor(处理器),为 EC2 实例选择处理器架构。控制台列出您之前在 Create environment(创建环境)面板中所选平台支持的处理器架构。

    如果您没有看到所需的处理器架构,请返回配置类别列表选择支持该架构的平台。从 Modify Capacity(修改容量)面板,选择 Cancel(取消)。然后,选择 Change platform version(更改平台版本)选择新的平台设置。接下来,在 Capacity(容量)配置类别中选择 Edit(编辑)以再次查看处理器架构选择。

    
              运行环境的 Elastic Beanstalk 容量配置窗口上的 Amazon EC2 实例设置
  7. 选择保存,然后进行您的环境所需的任何其他配置更改。

  8. 选择 Create environment(创建环境)。

在 Elastic Beanstalk 控制台中配置运行环境的 Amazon EC2 实例

  1. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 AWS 区域。

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Instances (实例) 配置类别中,选择 Edit (编辑)。对此类别中的设置进行更改,然后选择应用。有关设置说明,请参阅本页上的实例类别设置部分。

  5. Capacity(容量)配置类别中,选择 Edit(编辑)。对此类别中的设置进行更改,然后选择继续。有关设置说明,请参阅本页上的容量类别设置部分。

实例类别设置

以下与 Amazon EC2 实例相关的设置在 Instances(实例)配置类别中提供。


          Elastic Beanstalk 实例配置窗口上的 Amazon EC2 实例设置

监控间隔

默认情况下,您环境中的实例按 5 分钟的间隔将基本运行状况指标发送到 Amazon CloudWatch,不需要额外付费。

如需更详细的报告,您可以将 Monitoring interval(监控时间间隔)设为 1 minute(1 分钟),以提高环境中将资源的基本运行状况指标发布到 CloudWatch 的频率。一分钟时间间隔指标会产生 CloudWatch 服务费用。有关更多信息,请参阅 Amazon CloudWatch

根卷(引导设备)

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

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

有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的 Amazon EBS 卷类型Amazon EBS 产品详细信息

实例元数据服务

实例元数据服务(IMDS)是实例上的组件,在实例上进行编码,用于安全访问实例元数据。代码可以使用两种方法之一,从正在运行的实例访问实例元数据。这两种方法是实例元数据服务版本 1 (IMDSv1) 或实例元数据服务版本 2 (IMDSv2)。IMDSv2 更加安全。禁用 IMDSv1 以强制实施 IMDSv2。有关更多信息,请参阅 在环境实例上配置实例元数据服务

注意

此配置页面上的 IMDS 部分仅为支持 IMDSv2 的平台版本显示。

安全组

附加到您实例的安全组决定允许哪些流量到达实例。这些实例还决定允许哪些流量离开实例。Elastic Beanstalk 会创建一个允许来自负载均衡器上标准端口 HTTP(80)和 HTTPS(443)流量的安全组。

您可以指定自己创建的其他安全组,允许来自其他端口或其他来源的流量。例如,您可以为 SSH 访问创建安全组,允许来自限定 IP 地址范围的端口 22 上的入站流量。或者,为了增强安全性,创建一个只允许您有权访问的堡垒主机的流量。

注意

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

因此,我们建议您首先创建单独的安全组。然后,将该安全组附加到环境 A,并在环境 B 的安全组规则中指定该组。

有关 Amazon EC2 安全组的更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的 Amazon EC2 安全组

容量类别设置

以下与 Amazon EC2 实例相关的设置在 Capacity(容量)配置类别中提供。


          创建环境的 Elastic Beanstalk 容量配置窗口上的 Amazon EC2 实例设置

实例类型

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

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

注意

无法更改现有环境的处理器架构。但是,您可以将应用程序迁移到运行所需处理器架构(例如 arm64)的另一个环境。创建具有所需处理器架构的新环境。然后,使用 Elastic Beanstalk 中的部署选项之一将应用程序迁移到新环境。

有关 Amazon EC2 实例系列和类型的更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的实例类型或者《适用于 Windows 实例的 Amazon EC2 用户指南》中的实例类型。要确定哪些实例类型满足您的需求和它们的受支持区域,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的可用实例类型或《适用于 Windows 实例的 Amazon EC2 用户指南》中的可用实例类型

AMI ID

Amazon Machine Image(AMI)是 Elastic Beanstalk 用于在您的环境中启动 Amazon EC2 实例的 Amazon Linux 或 Windows Server 系统映像。Elastic Beanstalk 提供包含运行您的应用程序所需的工具和资源的系统映像。

Elastic Beanstalk 基于您选择的区域、平台版本和处理器架构选择适用于您的环境的默认 AMI。如果您创建了自定义 AMI,则使用自己的默认自定义 AMI ID 替换默认 AMI ID。

使用 AWS CLI 为您的环境配置 AWS EC2 实例

使用 AWS 命令行界面 (AWS CLI) 创建和配置 Elastic Beanstalk 环境(在命令行 shell 中使用命令)。本节提供 create-environmentupdate-environment 命令的示例。

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

例 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 文件来指定命名空间选项,而不是将其内联。

例 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 options.json ### [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" }, { "Namespace": "aws:ec2:instances", "OptionName": "InstanceTypes", "Value": "t4g.small" } ]

接下来的两个示例使用 update-environment 命令更新现有环境的配置。在本例中,我们添加了也基于 arm64 处理器架构的另一种实例类型。对于现有环境,添加的所有实例类型必须具有相同的处理器架构。创建新环境时,您可为其选择处理器架构。创建环境后,处理器架构将无法更改。

例 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 文件来指定命名空间选项,而不是将其内联。

例 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 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 命令。这些示例不提供 InstanceTypes 的值。未指定 InstanceTypes 值时,Elastic Beanstalk 默认使用基于 x86 的处理器架构。环境的 EC2 实例的镜像 ID (AMI) 将基于区域、平台版本和默认实例类型确定默认值。实例类型对应于处理器架构。

例 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 文件来指定命名空间选项,而不是将其内联。

例 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 options.json ### [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" } ]

Graviton arm64 第一波环境的建议

注意

本节仅适用于部分客户。如果您在 2021 年 11 月 24 日之前创建具有 Graviton 基于 arm64 的实例类型的新环境,则本节中的信息可能适用于您。

从 2021 年 10 月和 11 月开始,Elastic Beanstalk 开始在某些区域和一些平台版本增加对 Graviton arm64 处理器的支持浪潮。这第一波是在日期为 2021 年 10 月 13 日10 月 21 日11 月 19 日AWS Elastic Beanstalk 发布说明中宣布的。如果您当时创建了基于 arm64 的环境,则说明会告知您使用发布说明中提供的自定义 AMI 配置实例。现在提供对 Graviton arm64 的增强支持,Elastic Beanstalk 默认设置最新平台版本中 arm64 实例类型的 AMI。

如果您使用第一波版本中提供的自定义 AMI 创建环境,我们建议您执行以下操作来维护正常运行和工作的环境。

  1. 从环境中删除自定义 AMI。

  2. 使用最新的平台版本更新环境。

  3. 设置托管平台更新以在计划的维护时段内自动升级到最新平台版本。

注意

Elastic Beanstalk 不会自动替换自定义 AMI。您必须在步骤 1 中删除自定义 AMI,以使步骤 2 中的下一次平台更新对其进行更新。

以下程序将指导您完成这些步骤。AWS CLI 示例适用于使用以下信息创建的环境。

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 \ Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId,Value=ami-0fbdb88ce139244bf

更新在第一波 Graviton arm64 支持下创建的 arm64 环境

  1. 运行 update-environment 以删除自定义 AMI 设置。

    aws elasticbeanstalk update-environment \ --region us-east-1 \ --environment-name my-env \ --options-to-remove \ Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId
  2. 使用最新的平台版本更新环境。请选择以下选项之一。

    • 控制台选项 — 使用 Elastic Beanstalk 控制台更新平台版本。有关更多信息,请参阅更新环境的平台版本

    • AWS CLI 选项 — 运行 AWS update-environment 命令,指定最新的可用平台版本。

      aws elasticbeanstalk update-environment \ --region us-east-1 \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2 v3.4.9 running Docker"
      注意

      list-available-solution-stacks 命令提供 AWS 区域中您的账户可用的平台版本列表。

      aws elasticbeanstalk list-available-solution-stacks --region us-east-1 --query SolutionStacks
  3. 使用 Elastic Beanstalk 控制台为您的环境设置托管平台更新。托管平台更新会在计划的维护时段内将您的环境自动升级到最新平台版本。您的应用程序在更新过程中会继续提供服务。有关更多信息,请参阅托管平台更新

aws:autoscaling:launchconfiguration 命名空间

您可以使用 aws:autoscaling:launchconfiguration 命名空间中的配置选项来配置您的环境的实例,其中包括未在控制台中提供的附加选项。

以下配置文件示例使用本主题中的基本配置选项。例如,它使用IMDS中讨论的 DisableIMDSv1 选项。它还使用安全性中讨论的 EC2KeyNameIamInstanceProfile 选项,以及 BlockDeviceMappings 选项,该选项在控制台中不可用。

option_settings: aws:autoscaling:launchconfiguration: SecurityGroups: my-securitygroup MonitoringInterval: "1 minute" DisableIMDSv1: false EC2KeyName: my-keypair IamInstanceProfile: "aws-elasticbeanstalk-ec2-role" BlockDeviceMappings: "/dev/sdj=:100,/dev/sdh=snap-51eef269,/dev/sdb=ephemeral0"

您可以使用 BlockDeviceMappings 来为实例配置其他块储存设备。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的块存储设备映射

EB CLI 和 Elastic Beanstalk 控制台会对前面的选项应用建议的值。如果您需要使用配置文件来配置相同的项,则必须删除这些设置。有关更多信息,请参阅 建议值