Spot 队列的自动扩展 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Spot 队列的自动扩展

自动扩展是根据需求自动增加或减少 Spot 队列目标容量的能力。Spot 队列能够根据一个或多个扩展策略,在您选择的范围内启动实例 (扩展) 或终止实例 (缩减)。

Spot 队列支持以下类型的自动扩展:

  • 目标跟踪扩展 – 根据特定指标的目标值,增加或减少队列的当前容量。这与恒温器保持家里温度的方式类似—您选择一个温度,恒温器将完成所有其他工作。

  • 步进扩展 – 根据一组扩展调整,增加或减小队列的当前容量,这些调整称为步进调整,将根据警报严重程度发生变化。

  • 计划扩展 – 根据日期和时间增加或减少队列的当前容量。

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

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

建议将随实例指标扩展的频率设置为 1 分钟,这可确保更快地响应使用率变化。如果将随指标扩展的频率设置为 5 分钟,可能会导致响应时间变慢,并且可能导致系统依据陈旧的指标数据进行扩展。要每隔 1 分钟向 CloudWatch 发送一次实例的指标数据,您必须专门启用详细监控。有关更多信息,请参阅对实例启用或禁用详细监控使用已定义的参数创建 Spot 队列请求(控制台)

有关为 Spot 队列配置扩展的更多信息,请参阅以下资源:

Spot 队列自动扩展所需的 IAM 权限

通过结合使用 Amazon EC2、Amazon CloudWatch 和 Application Auto Scaling API 可实现 Spot 队列的自动扩展。通过 Amazon EC2 可创建 Spot 队列请求,通过 CloudWatch 可创建警报,通过 Application Auto Scaling 可创建扩展策略。

竞价型实例集的 IAM 权限和 Amazon EC2 外,访问实例集扩展设置的用户必须具有使用支持动态扩缩的服务的适当权限。用户必须具有使用以下示例策略中的操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "application-autoscaling:*", "ec2:DescribeSpotFleetRequests", "ec2:ModifySpotFleetRequest", "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "cloudwatch:DisableAlarmActions", "cloudwatch:EnableAlarmActions", "iam:CreateServiceLinkedRole", "sns:CreateTopic", "sns:Subscribe", "sns:Get*", "sns:List*" ], "Resource": "*" } ] }

您还可以创建自己的 IAM 策略,从而使 Application Auto Scaling API 调用获得更精细的权限。有关更多信息,请参阅 Application Auto Scaling 用户指南中的身份验证和访问控制

Application Auto Scaling 服务还需要描述 Spot 队列和 CloudWatch 警报的权限,以及代表您修改 Spot 队列目标容量的权限。如果您为竞价型实例集启用自动扩展功能,它将创建一个名为 AWSServiceRoleForApplicationAutoScaling_EC2SpotFleetRequest 的服务相关角色。此服务相关角色授予 Application Auto Scaling 权限,以描述策略警报、监控队列的当前容量以及修改队列的容量。Application Auto Scaling 的原托管竞价型实例集角色为 aws-ec2-spot-fleet-autoscale-role,但今后已不再需要。此服务相关角色是 Application Auto Scaling 的默认角色。有关更多信息,请参阅 Application Auto Scaling 用户指南 中的服务相关角色权限