Auto Scaling Group のターゲット追跡スケーリングポリシーで、あらかじめ用意されていないメトリクスを使用したいときの対処方法

2022.07.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Auto Scaling Group のターゲット追跡スケーリングポリシーを作成したいのですが、使用したいメトリクスが選択肢にありません。
ターゲット追跡スケーリングポリシーで、事前に用意されていないメトリクスを使用するにはどうすればよいでしょうか?

どう対応すればいいの?

結論から述べると、カスタマイズされたメトリクスを作成する必要があります。

ターゲット追跡スケーリングポリシーで使用できるメトリクスには、定義済みのメトリクスカスタマイズされたメトリクスの 2種類があります。

定義済みのメトリクス: 事前に定義されたメトリクス
カスタマイズされたメトリクス: 定義済みのメトリクス以外のメトリクス

定義済みのメトリクスとは、ユーザーが事前の準備をする必要なく、ターゲット追跡スケーリングポリシーで使用できるメトリクスです。 具体的には、以下の 4 種類のメトリクスタイプを指します。

Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシー - Amazon EC2 Auto Scaling

以下の事前定義されたメトリクスを使用できます。

・ASGAverageCPUUtilization - Auto Scaling グループの平均 CPU 使用率。
・ASGAverageNetworkIn - すべてのネットワークインターフェイスで Auto Scaling グループが受信した平均バイト数。
・ASGAverageNetworkOut - すべてのネットワークインターフェイスで Auto Scaling グループが送信した平均バイト数。
・ALBRequestCountPerTarget — Auto Scaling グループのターゲットあたりの Application Load Balancer リクエストの平均。

マネジメントコンソールの設定画面からも確認することができます。

一方、カスタマイズされたメトリクスとは、定義済みのメトリクスのように事前に準備されていないメトリクスのことです。
Cloud Watch のカスタムメトリクスとは意味合いが異なるので、混同しないように注意します。
あくまでもカスタマイズされたメトリクスとは、定義済みメトリクス以外のメトリクスを指します。
例えば、カスタマイズされたメトリクスは、標準の CloudWatch メトリクスCloudWatch カスタムメトリクスのどちらも使用することができます。

カスタマイズされたメトリクスは、マネジメントコンソールから作成することができません(2022.7現在)。
AWS CLI あるいは SDK を使用する必要があります。

AWS CLI で作成する手順

Auto Scaling Group は事前に作成されているものとします。
手順は以下となります。

  1. カスタマイズされたメトリクスを作成
  2. スケーリングポリシーの作成

カスタマイズされたメトリクスを作成し、それを使用してスケーリングポリシーを作成する流れです。

1. カスタマイズされたメトリクスを作成

json ファイルで作成します。
ファイル名は、config.jsonにしてください。

{
   "TargetValue":ターゲット値,
   "CustomizedMetricSpecification":{
      "MetricName":"メトリクス名",
      "Namespace":"名前空間",
      "Dimensions":[
         {
            "Name":"ディメンション名",
            "Value":"ディメンション値"
         }
      ],
      "Statistic":"Average",
      "Unit":"Percent"
   }
}

Unit はメトリクスに応じて適宜変更します。

2. スケーリングポリシーの作成

以下のコマンドを AWS CLI で実行します。

aws autoscaling put-scaling-policy --policy-name スケーリングポリシー名 \
  --auto-scaling-group-name オートスケーリンググループ名 --policy-type TargetTrackingScaling \
  --target-tracking-configuration file://config.json

手順はこれで以上となります。

成功した場合は、ユーザーに代わって作成された 2 つの CloudWatch アラームの ARN と名前が返されます。

注意点

EC2 Auto Scaling の目的はあくまでも EC2 インスタンスの負荷分散であり、定義済みのメトリクスでほとんどの要件をカバーすることができます。
そのため、カスタマイズされたメトリクスの使い方によっては、負荷分散の機能が損なわれることにご注意ください。

参考資料

Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシー - Amazon EC2 Auto Scaling