你的 Elastic Beanstalk 环境的亚马逊EC2实例 - AWS Elastic Beanstalk

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

你的 Elastic Beanstalk 环境的亚马逊EC2实例

创建 Web 服务器环境时, AWS Elastic Beanstalk 创建一台或多台亚马逊弹性计算云 (AmazonEC2) 虚拟机,称为实例

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

注意

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

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

Amazon EC2 实例类型

当您创建新环境时,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 命名空间中的 i386 处理器实例类型提供配置选项

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

在亚马逊推出新的兼容实例类型之后,Elastic Beanstalk 会定期增加对这些实例类型的支持。EC2有关可用实例类型的信息,请参阅 Amazon EC2 用户指南中的实例类型

注意

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

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

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

为您的环境配置 Amazon EC2 实例

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

注意

尽管 Elastic Beanstalk 控制台不提供更改现有环境处理器架构的选项,但你可以使用 AWS CLI。 有关命令示例,请参见配置 AWS EC2使用您的环境的实例 AWS CLI

在创建环境期间在 Elastic Beanstalk 控制台中配置亚马逊EC2实例
  1. 打开 Elastic Beanstalk 控制台,然后在区域列表中,选择你的 AWS 区域.

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

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

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

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

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

    选择处理器架构

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

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

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

  8. 选择创建环境

在 Elastic Beanstalk 控制台中配置运行环境的亚马逊EC2实例
  1. 打开 Elastic Beanstalk 控制台,然后在区域列表中,选择你的 AWS 区域.

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

    注意

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

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

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

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

实例类别设置

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

Elastic Beanstalk EC2 实例配置窗口中的亚马逊实例设置

监控间隔

默认情况下,您环境中的实例每隔五分钟向 Amazon CloudWatch 发布基本运行状况指标,无需支付额外费用。

要获得更详细的报告,您可以将监控间隔设置为 1 分钟,以提高环境中资源发布基本运行状况指标 CloudWatch 的频率。 CloudWatch 服务费适用于一分钟间隔指标。有关更多信息,请参阅 Amazon CloudWatch

根卷(引导设备)

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

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

有关更多信息,请参阅《亚马逊EC2用户指南》中的 “亚马逊EBS卷类型” 和 “亚马逊EBS产品详情”。

实例元数据服务

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

注意

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

安全组

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

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

注意

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

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

有关亚马逊EC2安全组的更多信息,请参阅亚马逊EC2用户指南中的亚马逊EC2安全组

容量类别设置

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

Elastic Beanstalk 容量配置窗口上用于创建环境的亚马逊EC2实例设置

实例类型

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

注意

尽管 Elastic Beanstalk 控制台不提供更改现有环境处理器架构的选项,但你可以使用 AWS CLI。 有关命令示例,请参见配置 AWS EC2使用您的环境的实例 AWS CLI

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

有关 Amazon EC2 实例系列和类型的更多信息,请参阅亚马逊EC2用户指南中的实例类型。要确定哪些实例类型符合您的要求及其支持的区域,请参阅 Amazon EC2 用户指南中的可用实例类型

AMI身份证

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

Elastic Beanstalk 会根据您选择AMI的区域、平台版本和处理器架构为您的环境选择默认值。如果您创建了自定义 AMI,请将默认 AMI ID 替换为您自己的默认自定义 ID。

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

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

前两个示例创建新环境。该命令指定了基于 arm64 处理器架构的亚马逊EC2实例类型 t4g.small。Elastic Beanstalk 根据区域、平台版本和实例类型默认实例EC2的映像 AMI ID ()。实例类型对应于处理器架构。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 处理器的支持浪潮。第一波是在 AWS Elastic Beanstalk 发布说明日期为 2021 年 10 月 13 日、10 月 21 日和 11 月 19 日。如果您创建了基于 arm64 的环境,则说明会告诉您使用发行说明中AMIs提供的自定义配置实例。现在,对 Graviton arm64 的增强支持已经推出,Elastic Beanstalk 在最新平台版本中默认使用 arm64 AMIs 实例类型。

如果您使用第一波版本中AMIs提供的自定义创建环境,我们建议您执行以下操作以保持健康的工作环境。

  1. AMIs从您的环境中移除自定义。

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

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

注意

Elastic Beanstalk 不会自动取代定制版。AMIs您必须在步骤 1 AMIs 中删除自定义,因此步骤 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. 运行更新环境以删除自定义设置。AMIs

    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-env ironment 命令,指定最新可用的平台版本。

      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 来为实例配置其他块储存设备。有关更多信息,请参阅 Amazon EC2 用户指南中的区块设备映射

EB CLI 和 Elastic Beanstalk 控制台为上述选项应用推荐值。如果您需要使用配置文件来配置相同的项,则必须删除这些设置。有关详细信息,请参阅 建议值