Elastic Beanstalk 环境的 Auto Scaling 组 - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Elastic Beanstalk 环境的 Auto Scaling 组

您的 AWS Elastic Beanstalk 环境包含一个 Auto Scaling 组,该组管理您环境中的 Amazon EC2 实例。在单实例环境中,Auto Scaling 组可确保始终有一个正在运行的实例。在负载均衡的环境中,您将为组配置一系列要运行的实例,Auto Scaling 将根据负载按需添加或删除实例。

Auto Scaling 组还会为您环境中的实例应用启动配置。您可以修改启动配置,以更改实例类型、密钥对、Amazon Elastic Block Store (Amazon EBS) 存储和只能在启动实例时配置的其他设置。

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

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

作为一个选项,Elastic Beanstalk 可以为您的环境组合按需实例和 Spot 实例。

Auto Scaling 监控它启动的每个 Amazon EC2 实例的运行状况。如果任何实例出现意外终止,Auto Scaling 会检测该终止,并启动替代实例。要配置组以使用负载均衡器的运行状况检查机制,请参阅Auto Scaling 运行状况检查设置

您可以使用 Elastic Beanstalk 控制台EB CLI配置选项为您的环境配置 Auto Scaling。

Spot 实例支持

要利用 Amazon EC2 Spot 实例,您可以为您的环境启用 Spot 选项。然后,您环境的 Auto Scaling 组会将 Amazon EC2 购买选项组合在一起,并将按需实例和 Spot 实例组合在一起。

重要

对 Spot 实例的需求在不同时间可能有显著的差异,Spot 实例的可用性也会因为未使用 Amazon EC2 实例的可用数量而差别巨大。Spot 实例可能会中断。因此,必须确保应用程序针对 Spot 实例中断做好准备。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的 Spot 实例中断

Elastic Beanstalk 提供了多个配置选项来支持 Spot 功能。这些内容将在以下与配置 Auto Scaling 组相关的章节中讨论。其中两个选项值得特别注意:SpotFleetOnDemandBaseSpotFleetOnDemandAboveBasePercentage(均在 aws:ec2:instances 命名空间中)。请思考它们与 MinSize 选项(在 aws:autoscaling:asg 命名空间中)的关系。只有 MinSize 才能确定您环境的初始容量 - 您希望至少运行的实例数。SpotFleetOnDemandBase 不会影响初始容量;启用 Spot 时,此选项仅确定在考虑任何 Spot 实例前预配置的按需实例数。当 SpotFleetOnDemandBase 小于 MinSize 时,您仍将获得正好等于 MinSize 的实例数作为初始容量;其中至少有等于 SpotFleetOnDemandBase 的实例数必须是按需实例。当 SpotFleetOnDemandBase 大于 MinSize 时,随着环境的扩展,在满足 SpotFleetOnDemandBase 要求之前,将保证您至少可获得等于 SpotFleetOnDemandBase - MinSize 的额外按需实例数。

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

备注
  • 某些较旧的 AWS 账户可能会向 Elastic Beanstalk 提供不支持 Spot 实例的默认实例类型(例如,t1.micro)。如果启用 Spot 实例请求,并且显示 None of the instance types you specified supports Spot (您指定的所有实例类型均不支持 Spot) 错误,请务必配置支持 Spot 的实例类型。要选择 Spot 实例类型,请使用 Spot Instance Advisor

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

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

例 1:初始容量包含按需实例和 Spot 实例

选项设置
选项 命名空间

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 实例。

例 2:所有按需初始容量

选项设置
选项 命名空间

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 实例。

例 3:初始容量以外的额外按需基本实例

选项设置
选项 命名空间

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 控制台进行 Auto Scaling 组配置

可以通过在 Elastic Beanstalk 控制台中环境的 Configuration (配置) 页面上编辑 Capacity (容量) 来配置 Auto Scaling 的工作方式。

在 Elastic Beanstalk 控制台中配置 Auto Scaling 组

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

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

    注意

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

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

  4. Capacity (容量) 配置类别中,选择 Edit (编辑)

  5. Auto Scaling group (Auto Scaling 组) 部分中,配置以下设置。

    • Environment type (环境类型) - 选择 Load balanced (负载均衡)

    • Min instances (最小实例数) - 组在任何时间均应包含的最小 EC2 实例数。组从最小计数开始,当满足扩展触发条件时,则添加实例。

    • Max instances (最大实例数) - 组在任何时间均应包含的最大 EC2 实例数。

      注意

      如果您使用滚动更新,请确保最大实例计数高于滚动更新的 Minimum instances in service (使用的最小实例数) 设置

    • Fleet composition (队列组合) - 选择 Combined purchase options and instance types (组合购买选项和实例类型) 以启用 Spot 实例请求。

      在此示例中,选择按需实例

    • Instance type (实例类型) - 为运行应用程序而启动的 Amazon EC2 实例的类型。有关详细信息,请参阅 实例类型

    • AMI ID - Elastic Beanstalk 用来启动环境中的 Amazon EC2 实例的计算机映像。有关详细信息,请参阅 AMI ID

    • Availability Zones (可用区) - 选择环境实例要跨越的可用区的数量。默认情况下,Auto Scaling 组会在所有可用区中均匀启动实例。要将实例集中在少数几个区域中,请选择要使用的区域数。对于生产环境而言,至少要使用两个区域,以确保当一个可用区中断服务时您的应用程序仍然可用。

    • Placement (放置)(可选)- 选择要使用的可用区。如果您的实例需要连接至特定区域中的资源或者您购买了区域特定的预留实例,请使用此设置。如果您的冷却时间为“720”,自定义可用区为“us-west-2a、us-west-2b”,MaxSize 为“4”,请设置可用区数量,并且必须至少选择该数量的自定义可用区。

      如果您在自定义 VPC 中启动环境,则无法配置此选项。在自定义 VPC 中,您需要为分配给环境的子网选择可用区。

    • Scaling cooldown (扩展冷却时间) - 在扩展之后、在继续评估触发器之前等待实例启动或终止的时间(以秒为单位)。有关更多信息,请参阅扩展冷却时间

    
            Elastic Beanstalk Auto Scaling 配置窗口
  6. 选择 Apply

使用 EB CLI 进行 Auto Scaling 组配置

使用 eb create 命令创建环境时,可以指定几个与环境的 Auto Scaling 组相关的选项。这些选项可帮助您控制环境的容量。

--single

一个用于创建具有单个 Amazon EC2 实例且没有负载均衡器的环境的选项。如果不使用此选项,则会创建负载均衡环境。

--instance-types

您希望环境使用的 Amazon EC2 实例类型的列表。

--enable-spot
--spot-max-price

与启用和配置 Spot 实例请求相关的选项。

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

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

配置选项

Elastic Beanstalk 在以下两个命名空间中提供了用于 Auto Scaling 设置的配置选项aws:autoscaling:asgaws:ec2:instances

aws:autoscaling:asg 命名空间

aws:autoscaling:asg 命名空间提供了用于整体调整和可用性的选项。

以下配置文件示例配置 Auto Scaling 组以便使用两到四个实例、特定可用区和 12 分钟(720 秒)的冷却时间。

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

aws:ec2:instances 命名空间

aws:ec2:instances 命名空间提供与环境的实例相关的选项,包括 Spot 实例管理。它是 aws:autoscaling:launchconfigurationaws:autoscaling:asg 的补充。

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

以下配置文件示例配置 Auto Scaling 组以便为您的环境启用 Spot 实例请求,该组使用三种可能的实例类型,并至少采用一个按需实例作为基准容量,采用 33% 的按需实例作为补充用作任何额外容量。

option_settings: aws:ec2:instances: EnableSpot: true InstanceTypes: 't2.micro,t3.micro,t3.small' SpotFleetOnDemandBase: '1' SpotFleetOnDemandAboveBasePercentage: '33'

要选择 Spot 实例类型,请使用 Spot Instance Advisor