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

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

Elastic Beanstalk 环境的 Auto Scaling 组

您的 Amazon 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 实例。您可以配置 Amazon EC2 Auto Scaling,以通过启用容量再平衡监控和自动响应影响 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 实例的需求在不同时间可能有显著的差异,Spot 实例的可用性也会因为未使用 Amazon EC2 实例的可用数量而差别巨大。Spot 实例可能会中断。

为了有助于最大限度地减少这些中断对应用程序的影响,您可以启用 Amazon EC2 Auto Scaling 随附的“容量再平衡”选项。启用此功能后,EC2 会在中断前自动尝试替换 Auto Scaling 组中的 Spot 实例。要启用此功能,请使用 Elastic Beanstalk 控制台以配置 Auto Scaling 组。或者,您可以在 aws:autoscaling:asg 命名空间中将 Elastic Beanstalk EnableCapacityRebalancing 配置选项设置为 true

有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的容量再平衡用于 Linux 实例的 Amazon EC2 用户手册中的 Spot 实例中断

Elastic Beanstalk 提供了多个配置选项来支持 Spot 功能。这些内容将在以下与配置 Auto Scaling 组相关的章节中讨论。

aws:ec2:instances 命名空间中,这些选项里有两个值得特别注意:

  • SpotFleetOnDemandBase

  • SpotFleetOnDemandAboveBasePercentage

这两个选项与 aws:autoscaling:asg 命名空间中的 MinSize 选项相关联。

  • 只有 MinSize 决定了您环境的初始容量,即您希望运行的最低实例数。

  • SpotFleetOnDemandBase 不会影响初始容量。启用 Spot 时,此选项仅确定在考虑任何 Spot 实例前预置的按需实例数。

  • 考虑何时 SpotFleetOnDemandBase 小于 MinSize。您仍然会得到完全的 MinSize 实例作为初始容量。至少这些实例中的 SpotFleetOnDemandBase 必须是按需实例。

  • 考虑何时 SpotFleetOnDemandBase 大于 MinSize。随着环境的扩展,将保证您至少可获得等于两个值之间的差值的额外实例数。换句话说,可以保证您在满足 SpotFleetOnDemandBase 要求之前至少获得额外的按需 (SpotFleetOnDemandBase - MinSize) 实例。

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

注意
  • 某些较旧的Amazon账户可能会向 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(区域)列表中选择您的 Amazon Web Services 区域。

  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) — 默认值为按需实例。要启用 Spot 实例请求,请选择组合购买选项和实例

      如果选择启用 Spot 实例请求,请启用以下选项:

      • 最高 Spot 价格 — 有关 Spot 实例最高价格选项的建议,请参阅的适用于 Linux 实例的 Amazon EC2 用户指南中的 Spot 实例定价历史记录

      • 按需基准 (On-Demand base) – 向外扩展环境时,在考虑 Spot 实例之前,Auto Scaling 组预配置的最小按需实例数。

      • 按需上方基准 (On-Demand above base)– Auto Scaling 组在按需基本实例之外调配的任何额外容量中,按需实例所占的百分比。

        注意

        选项 On-Demand base(按需基准)和 On-Demand above base(按需上方基准)关联到之前列出的 Min(最小值)和 Max(最大值)实例选项。有关这些选项和例子的更多信息,请参阅 Spot 实例支持

      • 启用容量再平衡— 仅当 Auto Scaling 组中至少有一个 Spot 实例时,此选项才相关。启用此功能后,EC2 会在中断前自动尝试替换 Auto Scaling 组中的 Spot 实例,以最大限度地减少 Spot 实例对应用程序的中断。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的容量再平衡

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

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

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

    • Placement (放置)(可选)- 选择要使用的可用区。如果您的实例需要连接至特定区域中的资源或者您购买了区域特定的预留实例,请使用此设置。如果您在自定义 VPC 中启动环境,则无法配置此选项。在自定义 VPC 中,您需要为分配给环境的子网选择可用区。

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

    
            Elastic Beanstalk Auto Scaling 配置窗口
  6. 要保存更改,请选择页面底部的 Apply(应用)。

使用 EB CLI 进行 Auto Scaling 组配置

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

--single

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

--enable-spot

为您的环境启用 Spot 实例请求。

只有 eb create 命令的以下这些选项才能与 --enable-spot 一起使用。

--instance-types

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

--spot-max-price

您愿意为 Spot 实例支付的每单位小时的最高价(美元)。有关 Spot 实例最高价格选项的建议,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 Spot 实例定价历史记录

--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 设置的配置选项aws:autoscaling:asgaws:ec2:instances

aws:autoscaling:asg 命名空间

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

以下配置文件示例配置 Auto Scaling 组以便使用两到四个实例、特定可用区和 12 分钟(720 秒)的冷却时间。已启用 Spot 实例的容量再平衡。如下面的配置文件示例所示,如果在 aws:ec2:instances 命名空间中将 EnableSpot 设置为 true,则只有最后一个选项才有效。

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 命名空间

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