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

Application Auto Scaling 的目标跟踪扩展策略

在使用目标跟踪扩展策略时,可以选择一个扩展指标并设置一个目标值。Application Auto Scaling 创建和管理触发扩展策略的 CloudWatch 警报,并根据指标和目标值计算扩展调整。扩展策略根据需要增加或减少容量,将指标保持在指定的目标值或接近指定的目标值。除了将指标保持在目标值附近以外,目标跟踪扩展策略还会对由于负载模式变化而造成的指标变化进行调整。

您可以具有一个或多个目标跟踪扩展策略和/或一个或多个步进扩展策略。Application Auto Scaling 基于为扩展和缩减提供了最大容量的策略进行扩展。这样可以更灵活地覆盖多种场景,并确保始终有足够的容量来处理应用程序工作负载。

限制

  • 无法为 Amazon EMR 集群或 AppStream 2.0 队列创建目标跟踪扩展策略。

  • 您无法使用 Application Auto Scaling 创建或更新用于 AWS Auto Scaling 服务的扩展策略。有关 AWS Auto Scaling 控制台、CLI 或 API 操作的信息,请参阅 AWS Auto Scaling 文档。

  • 您可以使用 Application Auto Scaling 基于预定义或 CloudWatch 自定义指标来应用目标跟踪扩展策略。不过,并非所有服务都可让您通过控制台管理自定义指标。要查看某个服务是否支持控制台中的自定义指标,请参阅该服务的文档。

注意事项

请注意以下事项:

  • 并非所有指标都适用于目标跟踪。当指定自定义指标时,这可能很重要。指标必须是有效的使用率指标并且描述可扩展目标的繁忙程度。指标值必须根据可扩展目标的容量按比例增加或减少,以便指标数据可用于按比例扩展可扩展目标。

  • 只要可能,您应按照具有 1 分钟频率的指标进行扩展,因为这可以确保更快地响应利用率变化。

  • 目标跟踪扩展策略假设它应该在指定指标高于目标值时执行扩展。因此,不能使用目标跟踪扩展策略在指定指标低于目标值时向外扩展。

  • 例如,如果因网络问题导致指定的指标数据不足,则目标跟踪扩展策略不会执行扩展。它不会执行向内扩展,因为它不会将数据不足解读为使用率低。

  • 您可能会看到目标值与实际指标数据点之间存在差距。这是因为 Application Auto Scaling 在确定要添加或删除多少容量时将始终通过向上或向下舍入保守地进行操作,以免添加的容量不足或删除的容量过多。但是,对于具有小容量的可扩展目标,实际指标数据点可能看起来与目标值差距很大。

  • 对于容量更高的可扩展目标,添加或删除容量将缩小目标值与实际指标数据点之间的差距。

  • 为了确保应用程序可用性,Application Auto Scaling 针对指标尽快按比例扩展,但会逐渐缩减。

  • 一个可扩展目标可以具有多个目标跟踪扩展策略,前提是它们分别使用不同的指标。Application Auto Scaling 的目的是始终优先考虑可用性,因此其行为会有所不同,具体取决于目标跟踪策略是否已准备好扩展或缩减。如果任何目标跟踪策略已准备好进行扩展,它将扩展可扩展目标,但仅在所有目标跟踪策略(启用了缩减部分)准备好缩减时才执行缩减。

  • 您可以禁用目标跟踪扩展策略的缩减部分。利用此功能,您可以灵活地使用与用于向外扩展的方法不同的向内扩展方法。例如,您可以使用不同的扩展策略类型进行缩减,同时使用目标跟踪扩展策略进行扩展。

  • 不要编辑或删除为目标跟踪扩展策略配置的 CloudWatch 警报。当您删除扩展策略时,将自动删除与目标跟踪扩展策略关联的 CloudWatch 警报。

冷却时间

向外扩展冷却时间 是一个向外扩展活动完成后、另一个向外扩展活动开始之前的时间量(秒)。尽管此冷却时间有效,但启动向外扩展事件所添加的容量将计算为下一向外扩展事件所需容量的一部分。旨在持续 (但不过度) 扩大。

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

注册可扩展目标

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

以下示例使用 Application Auto Scaling 注册 Spot 队列请求。Application Auto Scaling 可以扩展 Spot 队列中的实例数量,最少 2 个实例,最多 10 个实例。

aws application-autoscaling register-scalable-target --service-namespace ec2 \ --scalable-dimension ec2:spot-fleet-request:TargetCapacity \ --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --min-capacity 2 --max-capacity 10

注意

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

创建目标跟踪扩展策略

您可以创建目标跟踪扩展策略,来指示 Application Auto Scaling 在应用程序上的负载发生更改时自动横向扩展或缩减。

以下是将 CPU 平均使用率保持在 40% 的示例目标跟踪配置。将此配置保存在名为 config.json 的文件中。

{ "TargetValue": 40.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "EC2SpotFleetRequestAverageCPUUtilization" } }

或者,您可以通过创建自定义指标规范并为 CloudWatch 中的每个参数添加值来自定义用于扩展的指标。以下是一个示例目标跟踪配置,它将指定指标的平均利用率保持在 40%。

{ "TargetValue":40.0, "CustomizedMetricSpecification":{ "MetricName":"MyUtilizationMetric", "Namespace":"MyNamespace", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName", "Value":"MyOptionalMetricDimensionValue" } ], "Statistic":"Average", "Unit":"Percent" } }

使用以下 put-scaling-policy 命令以及您创建的 config.json 文件,创建一个名为 cpu40-target-tracking-scaling-policy 的扩展策略。

aws application-autoscaling put-scaling-policy --service-namespace ec2 \ --scalable-dimension ec2:spot-fleet-request:TargetCapacity \ --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --policy-name cpu40-target-tracking-scaling-policy --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration file://config.json

下面是示例输出。它包含代表您创建的两个 CloudWatch 警报的 ARN 和名称。

{ "PolicyARN": "arn:aws-cn:autoscaling:region:account-id:scalingPolicy:policy-id:resource/ec2/spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE:policyName/cpu40-target-tracking-scaling-policy", "Alarms": [ { "AlarmARN": "arn:aws-cn:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca", "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca" }, { "AlarmARN": "arn:aws-cn:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d", "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d" } ] }

描述目标跟踪扩展策略

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

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

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

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

下面是示例输出。

[ { "PolicyARN": "PolicyARN", "TargetTrackingScalingPolicyConfiguration": { "PredefinedMetricSpecification": { "PredefinedMetricType": "EC2SpotFleetRequestAverageCPUUtilization" }, "TargetValue": 40.0 }, "PolicyName": "cpu40-target-tracking-scaling-policy", "ScalableDimension": "ec2:spot-fleet-request:TargetCapacity", "ServiceNamespace": "ec2", "PolicyType": "TargetTrackingScaling", "ResourceId": "spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", "Alarms": [ { "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca", "AlarmARN": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca" }, { "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d", "AlarmARN": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d" } ], "CreationTime": 1515021724.807 } ]

删除目标跟踪扩展策略

在使用完目标跟踪扩展策略后,您可以使用 delete-scaling-policy 命令删除该策略。

以下命令将删除指定 Spot 队组请求的目标跟踪扩展策略。它还将删除 Application Auto Scaling 代表您创建的 CloudWatch 警报。

aws application-autoscaling delete-scaling-policy --service-namespace ec2 \ --scalable-dimension ec2:spot-fleet-request:TargetCapacity \ --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --policy-name cpu40-target-tracking-scaling-policy