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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon CLI创建分步扩缩策略

您可以使用执行以下配置任务,为 Application Auto Scaling 创建步进扩展策略。 Amazon CLI

  1. 注册可扩展目标。

  2. 在可扩展目标上添加分步扩缩策略。

  3. 为策略创建 CloudWatch 警报。

为简洁起见,本主题中的示例说明了 Amazon ECS 服务的 CLI 命令。要指定不同的可扩展目标,请在 --service-namespace 中指定其命名空间,在 --scalable-dimension 中指定其可扩展维度,并在 --resource-id 中指定其资源 ID。有关每项服务的更多信息和示例,请参阅 Amazon 可以与 Application Auto Scaling 一起使用的服务 中的主题。

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

注册可扩展目标

如果您尚未注册,请注册可扩展目标。使用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" }

创建分步扩缩策略

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

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 } ] }

    有关更多信息,请参阅《App licati StepScalingPolicyConfigurationon Auto Scaling API 参考》中的。

  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 } ] }

    有关更多信息,请参阅《App licati StepScalingPolicyConfigurationon Auto Scaling API 参考》中的。

  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" }

创建调用扩缩策略的警报

最后,使用以下 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

描述分步扩缩策略

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

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

您可以使用 --query 参数将结果筛选为仅步进扩展策略。有关 query 的语法的更多信息,请参阅 Amazon Command Line Interface 用户指南中的控制 Amazon CLI的命令输出

Linux、macOS 或 Unix

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

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/my-cluster/my-service", "ServiceNamespace": "ecs", "Alarms": [ { "AlarmName": "Step-Scaling-AlarmHigh-ECS:service/my-cluster/my-service", "AlarmARN": "arn:aws:cloudwatch:region:012345678910:alarm:Step-Scaling-AlarmHigh-ECS:service/my-cluster/my-service" } ], "PolicyName": "my-step-scaling-policy", "ScalableDimension": "ecs:service:DesiredCount", "CreationTime": 1515024099.901 } ]

删除分步扩缩策略

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

删除您的扩展策略

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

Linux、macOS 或 Unix

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

Windows

aws application-autoscaling delete-scaling-policy --service-namespace ecs --scalable-dimension ecs:service:DesiredCount --resource-id service/my-cluster/my-service --policy-name my-step-scaling-policy
删除 CloudWatch 警报

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

aws cloudwatch delete-alarms --alarm-name Step-Scaling-AlarmHigh-ECS:service/my-cluster/my-service Step-Scaling-AlarmLow-ECS:service/my-cluster/my-service