AWS CLI を使用して、Application Auto Scaling のステップスケーリングポリシーを作成する
この例では、 AWS CLI コマンドを使用して Amazon ECS サービスのステップスケーリングポリシーを作成します。別のスケーラブルターゲットについては、--service-namespace
でその名前空間、--scalable-dimension
でそのスケーラブルディメンション、--resource-id
でそのリソース ID を指定します。
AWS CLI を使用するときは、コマンドは自分のプロファイル用に設定された AWS リージョンで実行されることを忘れないようにしてください。別のリージョンでコマンドを実行する場合は、プロファイルのデフォルトのリージョンを変更するか、コマンドに --region
パラメータを使用します。
ステップ 1: スケーラブルなターゲットを登録する
まだ登録していない場合は、スケーラブルターゲットを登録します。register-scalable-target コマンドを使用して、ターゲットサービス内の特定のリソースをスケーラブルターゲットとして登録します。以下の例は、Amazon ECS サービスを Application Auto Scaling に登録します。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
-
スケールアウト (容量増加) 用のステップスケーリングポリシーを作成する
-
次の cat
コマンドを使用して、ステップスケーリングポリシー設定をホームディレクトリの config.json
という名前の JSON ファイルに保存します。以下は、調整タイプが PercentChangeInCapacity
のサンプル設定で、以下のステップ調整値に基づいてスケーラブルターゲットの容量を増加させます (CloudWatch アラームしきい値を 70 とした場合)。
-
メトリクスの値が 70 パーセント以上、85 パーセント未満の場合は容量を 20 パーセント増やします。
-
メトリクスの値が 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 を参照してください。
-
作成した config.json
ファイルと共に以下の put-scaling-policy コマンドを使用して、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
-
スケールイン (容量減少) 用のステップスケーリングポリシーを作成する
-
次の 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 を参照してください。
-
作成した config.json
ファイルと共に以下の put-scaling-policy コマンドを使用して、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 の平均利用率に基づくアラームもあります。アラームは、少なくとも 2 つの連続する 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