困っていた内容
ECS サービスの自動スケーリングで、ターゲット追跡スケーリングポリシーの利用を検討しています。 AWS マネジメントコンソールでは次のメトリクスから選択できますが、任意のメトリクスを指定する方法を教えてください。
- ECSServiceAverageCPUUtilization
- ECSServiceAverageMemoryUtilization
- ALBRequestCountPerTarget
どう対応すればいいの?
AWS CLI をご使用ください。
2023年11月時点の挙動として、AWS マネジメントコンソールからは所定のメトリクスのみが指定可能です。一方で、AWS CLI のregister-scalable-targetコマンドやput-scaling-policyコマンドを使用すると、任意のメトリクスを指定したスケーリングポリシーが設定できます。
やってみた
register-scalable-targetコマンドを使用して、ECS サービスをスケーラブルターゲットに登録します。
$ aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/hato-cluster/hato-service \
--min-capacity 1 \
--max-capacity 3
{
"ScalableTargetARN": "arn:aws:application-autoscaling:ap-northeast-1:123456789012:scalable-target/0ec522d6bad61a5f47f887af70d30bf5edb9"
}
任意のメトリクスを指定した設定ファイルを作成します。
scaling-configuration.json
{
"TargetValue": 50,
"CustomizedMetricSpecification": {
"MetricName": "NetworkRxBytes",
"Namespace": "ECS/ContainerInsights",
"Dimensions": [
{
"Name": "ServiceName",
"Value": "hato-service"
},
{
"Name": "ClusterName",
"Value": "hato-cluster"
}
],
"Statistic": "Average"
}
}
put-scheduled-actionコマンドで、ポリシーを設定します。
$ aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--policy-name hato-networkrx-scaling-policy \
--resource-id service/hato-cluster/hato-service \
--scalable-dimension ecs:service:DesiredCount \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration file://scaling-configuration.json
{
"PolicyARN": "arn:aws:autoscaling:ap-northeast-1:123456789012:scalingPolicy:22d6bad6-1a5f-47f8-87af-70d30bf5edb9:resource/ecs/service/hato-cluster/hato-service:policyName/hato-networkrx-scaling-policy",
"Alarms": [
{
"AlarmName": "TargetTracking-service/hato-cluster/hato-service-AlarmHigh-abcd",
"AlarmARN": "arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:TargetTracking-service/hato-cluster/hato-service-AlarmHigh-abcd"
},
{
"AlarmName": "TargetTracking-service/hato-cluster/hato-service-AlarmLow-efgh",
"AlarmARN": "arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:TargetTracking-service/hato-cluster/hato-service-AlarmLow-efgh"
}
]
}
参考資料
- カスタムメトリクスに基づいた Application Auto Scaling による Amazon ECS サービスのオートスケール | Amazon Web Services ブログ
- ターゲット追跡スケーリングポリシーの概要 - Application Auto Scaling
- register-scalable-target — AWS CLI 2.14.2 Command Reference
- put-scaling-policy — AWS CLI 2.14.2 Command Reference
- サービスのオートスケーリング - Amazon Elastic Container Service