Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

竞价型队列的自动扩展

自动扩展 是根据需求自动增加或减少竞价型队列目标容量的能力。竞价型队列能够根据一个或多个扩展策略,在您选择的范围内启动实例 (扩展) 或终止实例 (缩减)。我们建议您创建两个策略,一种用于扩展,一个用于缩减。

扩展策略 使用 CloudWatch 警报来触发扩展流程。例如,如果您希望在 CPU 利用率达到特定水平时扩展,可以使用 Amazon EC2 提供的 CPUUtilization 指标创建警报。

在创建扩展策略时,必须指定以下扩展调整类型之一:

  • Add — 按指定的容量单位数量或当前容量的指定百分比来增加队列的目标容量。

  • Remove — 按指定的容量单位数量或当前容量的指定百分比来缩减队列的目标容量。

  • Set to — 将队列的目标容量设为指定的容量单位数量。

当触发警报时,Auto Scaling 过程使用执行容量和扩展策略计算新的目标容量,然后相应地更新目标容量。例如,假设目标容量和执行容量为 10,扩展策略加 1。当触发警报时,Auto Scaling 过程为 10 增加 1 得到 11,因此竞价型队列启动 1 个实例。

如果使用实例加权,请记住,竞价型队列可以根据需要超出目标容量,并且执行容量可以是浮点数,但目标容量必须是整数,因此竞价型队列向上舍入到下一个整数。在您查看触发警报时扩展策略的结果时,必须考虑这些行为。例如,假设目标容量为 30,执行容量为 30.1,扩展策略减 1。当触发报警时,Auto Scaling 过程将 30.1 减 1 得到 29.1,然后将其向上取整为 30,因此不执行扩展操作。再如,假设您选择的实例权重为 2、4 和 8,目标容量为 10,但没有权重 2 实例可用,因此竞价型队列为执行容量为 12 的实例预配置权重为 4 和 8 的实例。如果扩展策略将目标容量减少 20% 并触发警报,则 Auto Scaling 过程将 12 减 12*0.2 得到 9.6,然后将其向上取整为 10,因此不执行扩展操作。

此外,您还可以为扩展策略配置冷却时间。这是扩展活动完成后上一个与触发相关的扩展活动可影响将来扩展事件的秒数。对于扩大策略,虽然冷却时间有效,但启动冷却的上一个扩大事件所添加的容量将计算为下一次扩大所需容量的一部分。旨在持续 (但不过度) 扩大。对于缩小策略,冷却时间用于阻止后续缩小请求,直至到期。旨在谨慎地缩小以保护您的应用程序的可用性。但是,如果在缩小后,另一个警报在冷却时间内触发了扩大策略,Auto Scaling 将立即扩大您的可扩展目标。

请注意,当竞价型队列因目标容量下降而终止某个实例时,该实例将收到一条竞价型实例中断通知。

限制

  • 竞价型队列请求必须使用 maintain 作为请求类型。一次性请求或竞价型限制不支持自动扩展。

先决条件

  • 考虑哪些 CloudWatch 指标对您的应用程序比较重要。您可以根据 AWS 提供的指标或您自己的自定义指标来创建 CloudWatch 警报。

  • 如果您打算在扩展策略中使用 AWS 指标,请为其启用 CloudWatch 指标集合 (如果提供这些指标的服务默认未启用它的话)。

  • 使用 AWS 管理控制台为竞价型队列启用自动扩展功能时,它会创建一个名为 aws-ec2-spot-fleet-autoscale-role 的角色来授予 Auto Scaling 权限,以描述策略警报、监控队列的当前容量及修改队列的容量。如果您使用 AWS CLI 或 API 配置自动扩展功能,则可以使用该角色 (如果存在) 或按以下步骤手动创建您自己的角色。

    1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

    2. 在导航窗格中,选择 Roles

    3. 选择 Create New Role

    4. Set Role Name 页面上,请键入角色名称,然后选择 Next Step

    5. Select Role Type 页面上,选择 Amazon EC2 旁的 Select

    6. Attach Policy 页面上,选择 AmazonEC2SpotFleetAutoscaleRole 策略,然后选择 Next Step

    7. Review 页面上,选择 Create Role

    8. 选择您刚创建的角色。

    9. Trust Relationships 选项卡上,选择 Edit Trust Relationship

    10. ec2.amazonaws.com 更改为 application-autoscaling.amazonaws.com,然后选择 Update Trust Policy

创建 CloudWatch 警报

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在导航窗格中,选择 Alarms

  3. 选择 Create Alarm

  4. CloudWatch Metrics by Category 选择一个类别,如 EC2 Spot MetricsFleet Request Metrics

  5. 选择一个指标,然后选择 Next

  6. 对于 Alarm Threshold,请键入警报的名称和描述,并为警报设置阈值和时间段数量。

  7. (可选) 如需接收扩展事件通知,请为 Actions 选择 New list,然后键入您的电子邮件地址。当然,您也可以删除通知,待日后需要时再添加。

  8. 选择 Create Alarm

使用控制台为竞价型队列配置自动扩展功能

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,请选择 Spot Requests

  3. 选择您的竞价型队列请求,然后选择 Auto Scaling 选项卡。

  4. 如果未配置自动扩展,请选择 Configure

  5. 使用 Scale capacity between 设置队列的最小和最大容量。队列的自动扩展操作不会超出最小或最大容量范围。

  6. 最初,Scaling policies 包含名为 ScaleUp 和 ScaleDown 的策略。您可以完善这些策略,或选择 Remove policy 来删除它们。您也可以选择 Add policy 来添加策略。

  7. 要定义策略,请执行以下操作:

    1. Policy name 中键入策略的名称。

    2. 对于 Policy trigger,可以选择现有的警报,或选择 Create new alarm 来打开 Amazon CloudWatch 控制台并创建警报。

    3. 对于 Modify capacity,选择扩展调整类型、数字及单位。

    4. (可选) 要执行步进扩展,请选择 Define steps。默认情况下,添加策略的下限为负无穷,上限为警报阈值。默认情况下,删除策略的下限为警报阈值,上限为正无穷。要添加其他步骤,请选择 Add step

    5. (可选) 要修改冷却时间的默认值,请从 Cooldown period 中选择一个数字。

  8. 选择 Save

使用 AWS CLI 为竞价型队列配置自动扩展功能

  1. 使用 register-scalable-target 命令将竞价型队列请求注册为可扩展目标。

  2. 使用 put-scaling-policy 命令创建扩展策略。

  3. 使用 put-metric-alarm 命令创建触发该扩展策略的警报。