使用 Amazon CLI 为 Application Auto Scaling 创建步进扩展策略 - Application Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon CLI 为 Application Auto Scaling 创建步进扩展策略

此示例使用 Amazon CLI 命令来创建 Amazon ECS 服务的步进扩展策略。对于不同的可扩展目标,请在 --service-namespace 中指定其命名空间,在 --scalable-dimension 中指定其可扩展维度,并在 --resource-id 中指定其资源 ID。

当使用 Amazon CLI 时,请记住您的命令在为您的配置文件配置的 Amazon Web Services 区域 中运行。如果您想要在不同的区域中运行命令,可以为配置文件更改默认区域,或者与命令一起使用 --region 参数。

步骤 1:注册可扩展目标

如果您尚未注册,请注册可扩展目标。使用 register-scalable-target 命令可将目标服务中的特定资源注册为可扩展目标。以下示例使用 Application Auto Scaling 注册 Amazon ECS 服务。Application Auto Scaling 可扩展任务的数量,最少 2 个任务,最多 10 个任务。将每个用户输入占位符替换为您自己的信息。

Linux、macOS 或 Unix

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

Windows

aws application-autoscaling register-scalable-target --service-namespace ecs ^ --scalable-dimension ecs:service:DesiredCount ^ --resource-id service/my-cluster/my-service ^ --min-capacity 2 --max-capacity 10
输出

如果成功,该命令会返回可扩展目标的 ARN。下面是示例输出。

{ "ScalableTargetARN": "arn:aws:application-autoscaling:region:account-id:scalable-target/1234abcd56ab78cd901ef1234567890ab123" }

步骤 2:创建步进扩展策略

要为可扩展目标创建步进扩展策略,可以使用以下示例来协助您入门。

Scale out
为横向扩展创建步进扩展策略(增加容量)
  1. 使用以下 cat 命令在主目录的名为 config.json 的 JSON 文件中存储步进扩展策略配置。下面是调整类型为 PercentChangeInCapacity 的示例配置,该配置基于以下步进调整增加可扩展目标的容量(假设 CloudWatch 警报阈值为 70):

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

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

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

    $ cat ~/config.json { "AdjustmentType": "PercentChangeInCapacity", "MetricAggregationType": "Average", "Cooldown": 60, "MinAdjustmentMagnitude": 1, "StepAdjustments": [ { "MetricIntervalLowerBound": 0.0, "MetricIntervalUpperBound": 15.0, "ScalingAdjustment": 10 }, { "MetricIntervalLowerBound": 15.0, "MetricIntervalUpperBound": 25.0, "ScalingAdjustment": 20 }, { "MetricIntervalLowerBound": 25.0, "ScalingAdjustment": 30 } ] }

    有关更多信息,请参阅《Application Auto Scaling API 参考》中的 StepScalingPolicyConfiguration

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

    Linux、macOS 或 Unix

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

    Windows

    aws application-autoscaling put-scaling-policy --service-namespace ecs ^ --scalable-dimension ecs:service:DesiredCount ^ --resource-id service/my-cluster/my-service ^ --policy-name my-step-scaling-policy --policy-type StepScaling ^ --step-scaling-policy-configuration file://config.json
    输出

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

    { "PolicyARN": "arn:aws:autoscaling:region:123456789012:scalingPolicy:ac542982-cbeb-4294-891c-a5a941dfa787:resource/ecs/service/my-cluster/my-service:policyName/my-step-scaling-policy" }
Scale in
为横向缩减创建步进扩展策略(减少容量)
  1. 使用以下 cat 命令在主目录的名为 config.json 的 JSON 文件中存储步进扩展策略配置。下面是调整类型为 ChangeInCapacity 的示例配置,该配置基于以下步进调整减少可扩展目标的容量(假设 CloudWatch 警报阈值为 50):

    • 当指标的值小于或等于 50 但大于 40 时,将容量减少 1

    • 当指标的值小于或等于 40 但大于 30 时,将容量减少 2

    • 当指标的值小于或等于 30 时,将容量减少 3

    $ cat ~/config.json { "AdjustmentType": "ChangeInCapacity", "MetricAggregationType": "Average", "Cooldown": 60, "StepAdjustments": [ { "MetricIntervalUpperBound": 0.0, "MetricIntervalLowerBound": -10.0, "ScalingAdjustment": -1 }, { "MetricIntervalUpperBound": -10.0, "MetricIntervalLowerBound": -20.0, "ScalingAdjustment": -2 }, { "MetricIntervalUpperBound": -20.0, "ScalingAdjustment": -3 } ] }

    有关更多信息,请参阅《Application Auto Scaling API 参考》中的 StepScalingPolicyConfiguration

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

    Linux、macOS 或 Unix

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

    Windows

    aws application-autoscaling put-scaling-policy --service-namespace ecs ^ --scalable-dimension ecs:service:DesiredCount ^ --resource-id service/my-cluster/my-service ^ --policy-name my-step-scaling-policy --policy-type StepScaling ^ --step-scaling-policy-configuration file://config.json
    输出

    输出包括作为策略唯一名称的 ARN。您需要使用此 ARN 来为策略创建 CloudWatch 警报。下面是示例输出。

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

步骤 3:创建调用扩展策略的警报

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

Linux、macOS 或 Unix

aws cloudwatch put-metric-alarm --alarm-name Step-Scaling-AlarmHigh-ECS:service/my-cluster/my-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

Windows

aws cloudwatch put-metric-alarm --alarm-name Step-Scaling-AlarmHigh-ECS:service/my-cluster/my-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