Application Auto Scaling のターゲット追跡スケーリングポリシーで任意のメトリクスを指定する方法を教えてください

2023.11.29

困っていた内容

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

参考資料