Application Auto Scaling
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Application Auto Scaling 的步进扩展策略

借助分步扩展,您可以为触发扩展流程的 CloudWatch 警报选择扩展指标和阈值,并定义当阈值违反指定数量的评估期时应如何扩展您的可扩展目标。

步进扩展策略根据一组扩展调整增加或减少可扩展目标的当前容量,这些调整称为步进调整。这些调整将根据警报违例规模发生变化。

在扩展活动启动后,该策略继续响应其他警报,甚至在进行扩展活动时也是如此。因此,在收到警报消息时,Application Auto Scaling 将评估触发的任何警报。

如果您的扩展指标是与可扩展目标的容量成比例增加或减少的利用率指标,我们建议您使用目标跟踪扩展策略。有关更多信息,请参阅 Application Auto Scaling 的目标跟踪扩展策略。您仍然可以选择使用目标跟踪扩展与步进扩展来实现更高级的扩展策略配置。例如,如果需要,您可以在利用率达到特定级别时配置更积极的响应。

限制

  • 您无法为 DynamoDB 表和全局辅助索引创建步进扩展策略。

扩展调整类型

在执行步进扩展策略时,将使用该策略中指定的扩展调整更改可扩展目标的当前容量。扩展调整无法将可扩展目标的容量更改为高于最大容量或低于最小容量。

对于步进扩展策略,Application Auto Scaling 支持以下调整类型:

  • ChangeInCapacity — 将可扩展目标的当前容量增加或减少指定的值。正值将增加容量,负值将减小容量。

    示例:如果当前容量为 3 且调整为 5%,则 Application Auto Scaling 将为容量增加 5(总量为 8)。

  • ExactCapacity — 将可扩展目标的当前容量更改为指定的值。为该调整类型指定一个正值。

    示例:如果当前容量为 3 且调整为 5,则 Application Auto Scaling 会将容量更改为 5。

  • PercentChangeInCapacity — 将可扩展目标的当前容量增加或减少指定的百分比。正值将增加容量,负值将减小容量。如果得出的值不是整数,Application Auto Scaling 将进行舍入,如下所示:

    • 大于 1 的值向下取整。例如,12.7 取整为 12

    • 0 和 1 之间的值舍入到 1。例如,.67 取整为 1

    • 0 和 -1 之间的值舍入到 -1。例如,-.58 取整为 -1

    • 小于 -1 的值向上取整。例如,-6.67 取整为 -6

    示例:如果当前容量为 10 且调整值为 10%,则 Application Auto Scaling 将在容量中增加 1,总数为 11。

对于 PercentChangeInCapacity,您还可以指定最小扩展量(使用 MinAdjustmentMagnitude 参数)。例如,假定您创建一个增加 25% 的策略,并指定最小扩展量为 2。如果可扩展目标的容量为 4 并执行该扩展策略,4 的 25% 为 1。不过,由于您指定最小扩展量为 2,Application Auto Scaling 将增加 2。

步进调整

创建分步扩展策略时,将添加一个或多个分步调整,让您可以根据警报的严重程度进行扩展。每个分步调整指定以下内容:

  • 指标值的下限

  • 指标值的上限

  • 要扩展的数量(基于扩展调整类型)

策略分步调整有一些规则:

  • 分步调整范围不能重叠或有间隙。

  • 只有一个分步调整可以有空下限 (负无穷)。如果一个分步调整有负下限,则必须有一个分步调整有空下限。

  • 只有一个分步调整可以有空上限 (正无穷)。如果一个分步调整有正上限,则必须有一个分步调整有空上限。

  • 同一分步调整中的上限和下限不能为空。

  • 如果指标值高于违例阈值,则含下限而不含上限。如果指标值低于违例阈值,则不含下限而含上限。

CloudWatch 根据与您的 CloudWatch 警报关联的指标的统计信息聚合指标数据点。当突破警报阈值时,将触发相应的扩展策略。 Application Auto Scaling 将指定的聚合类型应用于 CloudWatch 中最新的指标数据点(与原始指标数据相对)。它将此聚合指标值与步进调整定义的上限和下限进行比较,以确定执行哪个步进调整。

您可以指定相对于违例阈值的上限和下限。例如,假定警报的违例阈值为 50,扩展调整类型为 PercentChangeInCapacity。还有具有以下步进调整的扩大和缩小策略:

Scale out policy
Lower bound Upper bound Adjustment Metric value

0

10

0

50 <= < 60

10

20

10

60 <= < 70

20

null

30

70 <= < +无穷

Scale in policy

Lower bound Upper bound Adjustment Metric value

-10

0

0

40 < <= 50

-20

-10

-10

30 < <= 40

null

-20

-30

- 无穷 < <= 30

您的可扩展目标的当前容量和所需容量均为 10。在聚合指标值大于 40 并小于 60 时,将保留当前容量和所需容量。

如果指标值增加到 60,Application Auto Scaling 会将组的所需容量增加 1 以达到 11。这基于向外扩展策略的第二个步进调整(增加 10 的 10%)。在增加新容量后,Application Auto Scaling 将当前容量增加到 11。如果即使在增加该容量后指标值仍增加到 70,Application Auto Scaling 会将目标容量增加 3 以达到 14。这基于向外扩展策略的第三个步进调整(增加 11 的 30%,即 3.3,向下舍入到 3)。

如果指标值达到 40,根据缩小策略的第二个步进调整 (减去 14 的 10%,即 1.4,向下舍入到 1),Application Auto Scaling 将目标容量减少 1 以达到 13。如果在减少该容量后指标值仍降到 30,根据缩小策略的第三个步进调整 (减去 13 的 30%,即 3.9,向下舍入到 3),Application Auto Scaling 将目标容量减小 3 以达到 10。

冷却时间

冷却时间 是指,在扩展活动完成后,以前的触发器相关扩展活动可能影响将来的扩展事件的时间(秒)。

尽管冷却时间有效,但启动向外扩展事件所添加的容量将计算为下一向外扩展事件所需容量的一部分。旨在持续 (但不过度) 扩大。例如,如果警报触发一个步进扩展策略以将容量增加 2,将成功完成扩展活动并开始计算冷却时间。如果警报在冷却时间内再次触,但进行了 3 这样更大幅度的步进调整,以前增加的 2 将被视为当前容量的一部分。因此,仅在容量中增加 1。

对于缩小策略,冷却时间用于阻止后续缩小事件,直至冷却时间到期。旨在谨慎地缩小以保护您的应用程序的可用性。但是,如果事件中另一个警报在扩展之后的冷却时间内触发了向外扩展策略,Application Auto Scaling 将立即向外扩展您的可扩展目标。

注册可扩展目标

您必须注册可扩展目标,然后才能创建扩展策略。使用 register-scalable-target 命令注册新的可扩展目标。

以下示例向 Application Auto Scaling 注册一个 Amazon ECS 服务。Application Auto Scaling 可以扩展任务的数量,最少 2 个任务,最多 10 个任务。

aws application-autoscaling register-scalable-target --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --resource-id service/default/sample-app-service \ --min-capacity 2 --max-capacity 10

注意

当您在控制台中配置扩展策略时,会自动向 Application Auto Scaling 将资源注册为可扩展目标。有关更多信息,请参阅开始使用部分中的文档。

使用 AWS CLI 配置分步扩展策略

您可以创建分步扩展策略,来指示 Application Auto Scaling 当该应用程序上的负载发生变化时该怎么做。

下面是调整类型为 ChangeInCapacity 的示例分步配置,其基于以下分步调节增加可扩展目标的容量(假设 CloudWatch 警报阈值为 70%):

  • 当指标值大于或等于 70% 但小于 85% 时,将容量增加 1

  • 当指标值大于或等于 85% 但小于 95% 时,将容量增加 2

  • 当指标值大于或等于 95% 时,将容量增加 3

将此配置保存在名为 config.json 的文件中。

{ "AdjustmentType": "ChangeInCapacity", "MetricAggregationType": "Average", "Cooldown": 60, "StepAdjustments": [ { "MetricIntervalLowerBound": 0, "MetricIntervalUpperBound": 15, "ScalingAdjustment": 1 }, { "MetricIntervalLowerBound": 15, "MetricIntervalUpperBound": 25, "ScalingAdjustment": 2 }, { "MetricIntervalLowerBound": 25, "ScalingAdjustment": 3 } ] }

可以使用以下 put-scaling-policy 命令以及您创建的 config.json 文件创建一个名为 my-step-scaling-policy 的扩展策略:

aws application-autoscaling put-scaling-policy --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --resource-id service/default/sample-app-service \ --policy-name my-step-scaling-policy --policy-type StepScaling \ --step-scaling-policy-configuration file://config.json

输出包括作为策略唯一名称的 ARN。您需要使用它来创建 CloudWatch 警报。

{ "PolicyARN": "arn:aws-cn:autoscaling:region:123456789012:scalingPolicy:ac542982-cbeb-4294-891c-a5a941dfa787:resource/ecs/service/default/sample-app-service:policyName/my-step-scaling-policy" }

最后,使用以下 CloudWatch put-metric-alarm 命令创建要与分步扩展策略结合使用的警报。在本示例中,您将根据平均 CPU 利用率发出警报。如果警报在至少两个连续 60 秒的评估期间达到 70% 的阈值,则它将被配置为处于 ALARM 状态。要指定其他 CloudWatch 指标或使用您自己的自定义指标,请在 --metric-name 中指定其名称并在 --namespace 中指定其命名空间。

aws cloudwatch put-metric-alarm --alarm-name Step-Scaling-AlarmHigh-ECS:service/default/sample-app-service \ --metric-name CPUUtilization --namespace AWS/ECS --statistic Average \ --period 60 --evaluation-periods 2 --threshold 70 \ --comparison-operator GreaterThanOrEqualToThreshold \ --dimensions "Name=ClusterName,Value=default,Name=ServiceName,Value=sample-app-service" \ --alarm-actions PolicyARN

描述步进扩展策略

您可使用以下 describe-scaling-policies 命令描述指定服务命名空间的所有扩展策略。

aws application-autoscaling describe-scaling-policies --service-namespace ecs

您可以使用 --query 参数将结果筛选为仅步进扩展策略。此 query 语法仅在 Linux 或 macOS 上有效。在 Windows 上,请将单引号更改为双引号。

aws application-autoscaling describe-scaling-policies --service-namespace ecs \ --query 'ScalingPolicies[?PolicyType==`StepScaling`]'

下面是示例输出。

[ { "PolicyARN": "PolicyARN", "StepScalingPolicyConfiguration": { "MetricAggregationType": "Average", "Cooldown": 60, "StepAdjustments": [ { "MetricIntervalLowerBound": 0.0, "MetricIntervalUpperBound": 15.0, "ScalingAdjustment": 1 }, { "MetricIntervalLowerBound": 15.0, "MetricIntervalUpperBound": 25.0, "ScalingAdjustment": 2 }, { "MetricIntervalLowerBound": 25.0, "ScalingAdjustment": 3 } ], "AdjustmentType": "ChangeInCapacity" }, "PolicyType": "StepScaling", "ResourceId": "service/default/sample-app-service", "ServiceNamespace": "ecs", "Alarms": [ { "AlarmName": "Step-Scaling-AlarmHigh-ECS:service/default/sample-app-service", "AlarmARN": "arn:aws-cn:cloudwatch:region:012345678910:alarm:Step-Scaling-AlarmHigh-ECS:service/default/sample-app-service" } ], "PolicyName": "my-step-scaling-policy", "ScalableDimension": "ecs:service:DesiredCount", "CreationTime": 1515024099.901 } ]

删除步进扩展策略

当您不再需要某个步进扩展策略时,可将其删除。要删除的扩展策略和 CloudWatch 警报,请完成以下任务。

删除您的扩展策略

使用以下 delete-scaling-policy 命令:

aws application-autoscaling delete-scaling-policy --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --resource-id service/default/sample-app-service \ --policy-name my-step-scaling-policy

删除 CloudWatch 警报

使用 delete-alarms 命令。您可以一次删除一个或多个警报。例如,使用以下命令可删除 Step-Scaling-AlarmHigh-ECS:service/default/sample-app-serviceStep-Scaling-AlarmLow-ECS:service/default/sample-app-service 警报。

aws cloudwatch delete-alarms --alarm-name Step-Scaling-AlarmHigh-ECS:service/default/sample-app-service Step-Scaling-AlarmLow-ECS:service/default/sample-app-service