

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Application Auto Scaling のターゲット追跡スケーリングポリシー
<a name="application-auto-scaling-target-tracking"></a>

ターゲット追跡スケーリングポリシーは、ターゲットメトリクス値に基づいてアプリケーションを自動的にスケールします。これにより、手動で操作しなくても、アプリケーションは最適なパフォーマンスとコスト効率を維持できます。

ターゲット追跡を使用することで、アプリケーションの理想的な平均使用率またはスループットレベルを表すメトリクスとターゲット値を選択します。Application Auto Scaling は、メトリクスとターゲットから逸脱したときにスケーリングイベントをトリガーする CloudWatch アラームを作成および管理します。これは、サーモスタットがターゲット温度を維持する仕組みと似ています。

例えば、現在スポットフリートで実行されているアプリケーションがあり、アプリケーションの負荷が変化してもフリートの CPU 使用率を約 50% に維持する必要があるとします。これにより、過剰な数のアイドルリソースを維持することなくトラフィックのスパイクを処理するための追加のキャパシティが得られます。

このニーズを満たすには、50% の平均 CPU 使用率をターゲットとする、ターゲット追跡スケーリングポリシーを作成します。次に、CPU が 50% を超えると、Application Auto Scaling がスケールアウト (容量を増やし) して負荷の増加に対応します。CPU が 50% を下回るとスケールイン (容量が減少) し、使用率が低い期間のコストを最適化します。

ターゲット追跡ポリシーにより、CloudWatch アラームとスケーリング調整を手動で定義する必要がなくなります。Application Auto Scaling は、設定したターゲットに基づいてこれを自動的に処理します。

事前定義されたメトリクスまたはカスタムメトリクスのいずれかを使用して、ターゲット追跡スケーリングポリシーをベースにできます。
+ **事前定義メトリクス** — Application Auto Scaling によって提供されるメトリクス (ターゲットごとの平均 CPU 使用率や平均リクエスト数など)。
+ **カスタムメトリクス** — メトリクスを組み合わせる、既存のメトリクスを活用する、または CloudWatch に公開された独自のカスタムメトリクスを使用するために、メトリクス計算を使用できます。

スケーラブルなターゲット容量の変化に反比例して変化するメトリクスを選択してください。つまり、容量を 2 倍に増やすと、メトリクスが 50% 減少するという仕組みです。これにより、メトリクスデータが比例スケーリングイベントを正確にトリガーできます。

**Topics**
+ [ターゲット追跡の仕組み](target-tracking-scaling-policy-overview.md)
+ [ターゲット追跡スケーリングポリシーを作成する](create-target-tracking-policy-cli.md)
+ [ターゲット追跡スケーリングポリシーを削除する](delete-target-tracking-policy.md)
+ [Metric Math を使用する](application-auto-scaling-target-tracking-metric-math.md)

# Application Auto Scaling のターゲット追跡スケーリングの仕組み
<a name="target-tracking-scaling-policy-overview"></a>

このトピックでは、ターゲット追跡スケーリングの仕組みと、ターゲット追跡スケーリングポリシーの主要な要素について説明します。

**Topics**
+ [仕組み](#target-tracking-how-it-works)
+ [メトリクスを選択する](#target-tracking-choose-metrics)
+ [ターゲット値の定義](#target-tracking-define-target-value)
+ [クールダウン期間を定義する](#target-tracking-cooldown)
+ [考慮事項](#target-tracking-considerations)
+ [複数のスケーリングポリシー](#target-tracking-multiple-scaling-policies)
+ [よく使われるコマンド](#target-tracking-policy-commonly-used-commands)
+ [関連リソース](#target-tracking-related-resources)
+ [制限事項](#target-tracking-limitations)

## 仕組み
<a name="target-tracking-how-it-works"></a>

ターゲット追跡スケーリングを使用するには、ターゲット追跡スケーリングポリシーを作成し、以下を指定します。
+ **メトリクス** — 平均 CPU 使用率やターゲットごとの平均リクエスト数など、追跡する CloudWatch メトリクス。
+ **ターゲット値** — メトリクスのターゲット値 (CPU 使用率 50%、ターゲット 1 分あたり 1000 リクエストなど)。

Application Auto Scaling は、スケーリングポリシーを呼び出す CloudWatch アラームを作成および管理し、メトリクスとターゲット値に基づいてスケーリング調整値を計算します。これは、指定されたターゲット値、またはそれに近い値にメトリクスを維持するため、必要に応じて容量を追加または削除します。

メトリクスが目標値を上回る場合、Application Auto Scaling は容量を追加してメトリクス値とターゲット値の差を減らすことでスケールアウトします。メトリクス値がターゲット値を下回ると、Application Auto Scaling は容量を削除してスケールインします。

スケーリングアクティビティは、容量の急激な変動を防ぐため、クールダウン期間を設けて実行されます。オプションでスケーリングポリシーのクールダウン期間を設定できます。

次の図は、設定完了時におけるターゲット追跡スケーリングポリシーの動作の概要を示しています。

![\[ターゲット追跡スケーリングポリシーの概要図。\]](http://docs.aws.amazon.com/ja_jp/autoscaling/application/userguide/images/target-tracking-scaling-policy.png)


- ターゲット追跡スケーリングポリシーは、使用率が低下したときの容量の削除よりも、使用率が増加したときの容量の追加の方が強力である点に注意してください。例えば、ポリシーの指定されたメトリクスがターゲット値に到達した場合、ポリシーはアプリケーションの負荷がすでに高くなっていると見なします。したがって、できるだけ早くメトリクス値に比例した容量を追加することで対応します。メトリクスが大きいほど、より多くの容量が追加されます。

メトリクスがターゲット値を下回ると、最小容量単位を削除するとメトリクスがターゲット値を上回る可能性が高いと計算された場合、ポリシーはスケールインしません。この場合、ポリシーが容量を削除することによってスケーリングの速度を落とすのは、使用率がターゲット値を下回るしきい値未満になり (通常は 10% を超えて低い値の場合)、そのレベルが使用率が減速したとみなされるに十分である場合のみになります。この保守的な動作の意図は、アプリケーションの需要が以前ほど高いレベルでなくなった場合にのみ、容量が削除されるようにすることです。

## メトリクスを選択する
<a name="target-tracking-choose-metrics"></a>

事前定義されたメトリクスまたはカスタムメトリクスのいずれかを使用して、ターゲット追跡スケーリングポリシーを作成できます。

事前定義済みメトリクスタイプでターゲット追跡スケーリングポリシーを作成する場合、[ターゲット追跡スケーリングポリシーの事前定義メトリクス](monitoring-cloudwatch.md#predefined-metrics) の事前定義済みメトリクスのリストからメトリクスを選択します。

メトリクスを選択するときは、以下の点に注意してください。
+ カスタムメトリクスにはターゲット追跡に使用できないものもあります。メトリクスは、有効な使用率メトリクスで、スケーラブルなターゲットの使用頻度を示す必要があります。メトリクス値は、スケーラブルなターゲットを比例的にスケールするためにメトリクスデータを使用できるようにするため、スケーラブルなターゲットの容量に対して比例的に増減する必要があります。
+ `ALBRequestCountPerTarget` メトリクスを使用するには、`ResourceLabel` パラメータを指定して、メトリクスに関連付けられているターゲットグループを識別する必要があります。
+ メトリクスが CloudWatch に実数 0 の値を出力する場合 (`ALBRequestCountPerTarget` など)、Application Auto Scaling は、長期間アプリケーションへのトラフィックがない場合に 0 にスケールインできます。スケーラブルターゲットにリクエストがルーティングされないときにターゲットを 0 にスケールインするには、スケーラブルターゲットの最小容量が 0 に設定されている必要があります。
+ スケーリングポリシーで使用する新しいメトリクスを公開する代わりに、メトリクス数式を使用して既存のメトリクスを組み合わせることができます。詳細については、「[Metric Math を使用して、Application Auto Scaling のターゲット追跡スケーリングポリシーを作成する](application-auto-scaling-target-tracking-metric-math.md)」を参照してください。
+ 使用しているサービスがサービスのコンソールでカスタムメトリクスの指定をサポートするかどうかを確認するには、そのサービスのドキュメントを参照してください。
+ 使用率の変化に迅速に対応できるよう、1 分間隔で利用できるメトリクスを使用することをお勧めします。ターゲット追跡では、すべての事前定義済みメトリクスとカスタムメトリクスについて、1 分単位で集計されたメトリクスが評価されますが、基盤となるメトリクスではデータの発行頻度が低くなる可能性があります。たとえば、Amazon EC2 メトリクスはすべてデフォルトで 5 分間隔で送信されますが、1 分に設定できます (詳細モニタリングと呼ばれます)。この選択は個々のサービス次第です。ほとんどの場合、可能な限り短い間隔を使用しようとします。

## ターゲット値の定義
<a name="target-tracking-define-target-value"></a>

ターゲット追跡スケーリングポリシーを作成するときは、ターゲット値を指定する必要があります。ターゲット値は、アプリケーションの最適な平均使用率またはスループットを表します。優れたコスト効率でリソースを使用するには、予期しないトラフィックの増加に対して適切なバッファを使用し、ターゲット値をできる限り高く設定します。アプリケーションが通常のトラフィックフローに対して最適にスケールアウトされる場合、実際のメトリクス値は、ターゲット値以下である必要があります。

スケーリングポリシーが Application Load Balancer のターゲットごとのリクエスト数、ネットワーク I/O、またはその他のカウントメトリクスなどのスループットに基づいている場合、ターゲット値は、1 分間における、単一のエンティティ (Application Load Balancer のターゲットグループの単一ターゲットなど) からの最適な平均スループットを表します。

## クールダウン期間を定義する
<a name="target-tracking-cooldown"></a>

必要に応じて、ターゲット追跡スケーリングポリシーでクールダウン期間を定義できます。

クールダウン期間は、前回のスケーリングアクティビティが有効になるまでスケーリングポリシーが待機する時間を指定します。

クールダウン期間には次の 2 種類があります。
+ *スケールアウトクールダウン期間*では、スケールアウトが継続的に (ただし過剰になることなく) 行われます。スケーリングポリシーを使用して Application Auto Scaling が正常にスケールアウトすると、クールダウン時間の計算が開始されます。スケーリングポリシーは、より大きなスケールアウトがトリガーされるか、クールダウン期間が終了しない限り、必要な容量を再度増加させません。このスケールアウトクールダウン期間が有効な間は、スケールアウトアクティビティを開始することで追加された容量は、次のスケールアウトアクティビティに予定される容量の一部として繰り入れられます。
+ スケールインクールダウン期間では、スケールインを控え目に行ってアプリケーションの可用性を保護することを目的としているため、スケールインアクティビティはスケールインクールダウン期間が終了するまでブロックされます。ただし、スケールインクールダウン期間中に別のアラームがスケールアウトアクティビティをトリガーした場合、Application Auto Scaling scale によってターゲットが即座にスケールアウトされます。この場合、スケールインクールダウン期間は停止し、完了しません。

各クールダウン期間は秒単位で測定され、スケーリングポリシー関連のスケーリングアクティビティにのみ適用されます。クールダウン期間中、スケジュールされたアクションがスケジュールされた時間に開始されると、クールダウン期間の期限が切れるのを待たずにスケーリングアクティビティを即座にトリガーできます。

デフォルト値で開始し、値を後で微調整できます。例えば、ターゲット追跡スケーリングポリシーが短期間に発生する変更に対して積極的になりすぎないように、場合によってはクールダウン期間を延長する必要があります。

**デフォルト値**

Application Auto Scaling では、ElastiCache のデフォルト値は 600 で、次のスケーラブルターゲットのデフォルト値は 300 です。
+ WorkSpaces アプリケーションフリート
+ Aurora DB クラスター
+ ECS サービス
+ Neptune クラスター
+ SageMaker AI エンドポイントバリアント
+ SageMaker AI 推論コンポーネント
+ SageMaker AI Serverless プロビジョニングされた同時実行数
+ Spot Fleets
+ WorkSpaces のプール
+ カスタムリソース

他のすべてのスケーラブルターゲットのデフォルト値は 0 または null です。
+ Amazon Comprehend ドキュメントの分類とエンティティ認識のエンドポイント
+ DynamoDB テーブルとグローバルセカンダリインデックス
+ Amazon Keyspaces テーブル
+ Lambda プロビジョニング済み同時実行
+ Amazon MSK ブローカーストレージ

Application Auto Scaling がクールダウン期間を評価するとき、null 値はゼロ値と同じように扱われます。

null 値を含む任意のデフォルト値を更新して、独自のクールダウン期間を設定できます。

## 考慮事項
<a name="target-tracking-considerations"></a>

ターゲット追跡スケーリングポリシーを使用する場合は、次の考慮事項が適用されます。
+ ターゲット追跡スケーリングポリシーで使用される CloudWatch アラームを作成、編集、削除しないでください。Application Auto Scaling は、ターゲット追跡スケーリングポリシーに関連付けられている CloudWatch アラームを作成および管理し、不要になるとそれらを削除します。
+ メトリクスにデータポイントがない場合、CloudWatch アラームの状態は `INSUFFICIENT_DATA` に変化します。これが発生すると、Application Auto Scaling は、新しいデータポイントが見つかるまでスケーラブルなターゲットをスケールできません。詳細については、*Amazon CloudWatch ユーザーガイド*の「[CloudWatch アラームが欠落データを処理する方法の設定](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data)」を参照してください。
+ メトリクスが設計上まばらに報告される場合は、メトリクス数式が役立つことがあります。例えば、最新の値を使用するには、`FILL(m1,REPEAT)` という関数を使用します (`m1` がメトリクスです)。
+ ターゲット値と実際のメトリクスデータポイント間にギャップが発生する場合があります。これは、Application Auto Scaling が追加または削除する容量を判断するときに、その数を切り上げまたは切り捨てることによって、常に控えめに動作するためです。これにより、不十分な容量を追加したり、必要以上に容量を削除することを防ぎます。ただし、小容量のスケーラブルなターゲットの場合、実際のメトリクスデータポイントがターゲット値からかなり離れているように見えることがあります。

  例えば、CPU 使用率に 50 パーセントのターゲット値を設定し、Auto Scaling グループがそのターゲットを超過したとします。1.5 インスタンスを追加することで CPU 使用率が 50 パーセント近くに減少すると判断される場合があります。1.5 インスタンスを追加することはできないので、これを切り上げて、2 インスタンスを追加します。これにより、CPU 使用率は 50 パーセント未満の値に下がる可能性がありますが、アプリケーションをサポートする十分なリソースが確保されます。同様に、0.5 インスタンスを削除すると CPU 使用率が 50% を超えると判断した場合、スケールインが振動を引き起こさないと考えられるほどメトリクスが十分に低くなるまでスケールインしないことを選択します。

  容量が大きいスケーラブルなターゲットでは、容量を追加または削除することにより、ターゲット値と実際のメトリクスデータポイントの間のギャップが少なくなります。
+ ターゲットの追跡スケーリングポリシーでは、指定されたメトリクスがターゲット値を超えている場合、スケールアウトする必要があると見なされます。指定されたメトリクスがターゲット値を下回っている場合、ターゲットの追跡スケーリングポリシーを使用してスケールアウトすることはできません。

## 複数のスケーリングポリシー
<a name="target-tracking-multiple-scaling-policies"></a>

それぞれが異なるメトリクスを使用していれば、スケーラブルなターゲットに対して複数のターゲットの追跡スケーリングポリシーを設定できます。Application Auto Scaling の目的は常に可用性を優先することであるため、その動作は、スケールアウトまたはスケールインに対するターゲット追跡ポリシーの準備が整っているかどうかに応じて異なります。ターゲット追跡ポリシーのいずれかでスケールアウトする準備ができると、スケーラブルなターゲットがスケールアウトされますが、すべてのターゲット追跡ポリシー (スケールイン部分が有効) でスケールインする準備ができている場合のみスケールインされます。

複数のスケーリングポリシーが、スケーラブルターゲットに対してスケールアウトまたはスケールインする指示を同時に出す場合、Application Auto Scaling はスケールインとスケールアウトのどちらについても、最大の容量を提供するポリシーに基づいてスケールします。これにより、複数のシナリオに対応する柔軟性が高まり、ワークロードを処理するのに十分な容量が常に確保されます。

ターゲット追跡スケーリングポリシーのスケールイン部分を無効にして、スケールアウトで使用する方法とは別の方法をスケールインで使用できます。例えば、スケールアウトにはターゲットの追跡スケーリングポリシーを使用しながら、スケールインにはステップスケーリングポリシーを使用できます。

ただし、ターゲット追跡スケーリングポリシーをステップスケーリングポリシーとともに使用する場合、ポリシー間の競合によって望ましくない動作が生じる可能性があるため、注意することをお勧めします。例えば、ターゲット追跡ポリシーがスケールインする準備が整う前に、ステップスケーリングポリシーがスケールインアクティビティを開始した場合、スケールインアクティビティはブロックされません。スケールインアクティビティが完了した後で、ターゲット追跡ポリシーにより、スケーラブルなターゲットに再びスケールアウトするよう指示できます。

周期的な性質のワークロードの場合、スケジュールされたスケーリングを使用してスケジュールに従って容量の変更を自動化することもできます。スケジュールされたアクションごとに、新しい最小容量値と新しい最大容量値を定義できます。これらの値は、スケーリングポリシーの境界を形成します。スケジュールされたスケーリングとターゲットトラッキングスケーリングの組み合わせにより、容量がすぐに必要になったときに、使用率レベルの急激な増加による影響を軽減できます。

## スケーリングポリシーの作成、管理、および削除用によく使用されるコマンド
<a name="target-tracking-policy-commonly-used-commands"></a>

スケーリングポリシーの操作用によく使用されるコマンドには以下が含まれます。
+ [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) は、 AWS またはカスタムリソースをスケーラブルターゲット (Application Auto Scaling がスケーリングできるリソース) として登録し、スケーリングを停止して再開します。
+ [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 既存のスケーラブルターゲットのスケーリングポリシーを追加または変更します。
+  [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html) は、 AWS リージョンのスケーリングアクティビティに関する情報を返します。
+ [describe-scaling-policies](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-policies.html) AWS リージョン内のスケーリングポリシーに関する情報を返します。
+ [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html) スケーリングポリシーを削除します。

## 関連リソース
<a name="target-tracking-related-resources"></a>

Auto Scaling グループのターゲット追跡スケーリングポリシーの作成の詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「[Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシー](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-target-tracking.html)」を参照してください。

## 制限事項
<a name="target-tracking-limitations"></a>

以下は、ターゲット追跡スケーリングポリシーの使用時における制限事項です。
+ スケーラブルターゲットを Amazon EMR クラスターにすることはできません。Amazon EMR はターゲット追跡スケーリングポリシーをサポートしません。
+ Amazon MSK クラスターがスケーラブルターゲットである場合は、スケールインが無効化されており、有効にすることはできません。
+ `RegisterScalableTarget` または `PutScalingPolicy` API オペレーションを使用して AWS Auto Scaling スケーリングプランを更新することはできません。
+ スケーラブルリソースに対するターゲット追跡スケーリングポリシーを表示、追加、更新、削除するためのコンソールアクセスは、使用するリソースによって異なります。詳細については、「[AWS のサービス Application Auto Scaling で使用できる](integrated-services-list.md)」を参照してください。

# を使用して Application Auto Scaling のターゲット追跡スケーリングポリシーを作成する AWS CLI
<a name="create-target-tracking-policy-cli"></a>

この例では、 AWS CLI コマンドを使用して Amazon EC2 スポットフリートのターゲットラッキングポリシーを作成します。別のスケーラブルターゲットについては、`--service-namespace` でその名前空間、`--scalable-dimension` でそのスケーラブルディメンション、`--resource-id` でそのリソース ID を指定します。

を使用する場合 AWS CLI、コマンドはプロファイル用に AWS リージョン 設定された で実行されることに注意してください。別のリージョンでコマンドを実行する場合は、プロファイルのデフォルトのリージョンを変更するか、コマンドに `--region` パラメータを使用します。

**Topics**
+ [ステップ 1: スケーラブルなターゲットを登録する](#target-tracking-register-scalable-target)
+ [ステップ 2: ターゲット追跡スケーリングポリシーを作成する](#create-target-tracking-policy)
+ [ステップ 3: ターゲット追跡スケーリングポリシーを記述する](#describe-target-tracking-policy)

## ステップ 1: スケーラブルなターゲットを登録する
<a name="target-tracking-register-scalable-target"></a>

まだ登録していない場合は、スケーラブルターゲットを登録します。[register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) コマンドを使用して、ターゲットサービス内の特定のリソースをスケーラブルターゲットとして登録します。以下の例は、スポットフリートリクエストを Application Auto Scaling に登録します。Application Auto Scaling は、スポットフリート内のインスタンスの数を最小 2 インスタンス、および最大 10 インスタンスにスケールできます。各*ユーザー入力プレースホルダー*を独自の情報に置き換えます。

**Linux、macOS、または Unix**

```
aws application-autoscaling register-scalable-target --service-namespace ec2 \
  --scalable-dimension ec2:spot-fleet-request:TargetCapacity \
  --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
  --min-capacity 2 --max-capacity 10
```

**Windows**

```
aws application-autoscaling register-scalable-target --service-namespace ec2 ^
  --scalable-dimension ec2:spot-fleet-request:TargetCapacity ^
  --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE ^
  --min-capacity 2 --max-capacity 10
```

**Output**  
成功した場合、このコマンドはスケーラブルターゲットの ARN を返します。以下は出力の例です。

```
{
    "ScalableTargetARN": "arn:aws:application-autoscaling:region:account-id:scalable-target/1234abcd56ab78cd901ef1234567890ab123"
}
```

## ステップ 2: ターゲット追跡スケーリングポリシーを作成する
<a name="create-target-tracking-policy"></a>

ターゲット追跡スケーリングポリシーを作成するには、次の例を使用して開始できます。

**ターゲット追跡スケーリングポリシーを作成する**

1. 以下の `cat` コマンドを使用して、スケーリングポリシーのターゲット値と事前に定義されたメトリクスの仕様を、ホームディレクトリにある `config.json` という名前の JSON ファイルに保存します。平均 CPU 使用率を 50 パーセントに維持するターゲット追跡設定の例を次に示します。

   ```
   $ cat ~/config.json
   {
     "TargetValue": 50.0,
     "PredefinedMetricSpecification": 
       {
         "PredefinedMetricType": "EC2SpotFleetRequestAverageCPUUtilization"
       }
   }
   ```

   詳細については、*Application Auto Scaling API リファレンス*の「[PredefinedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PredefinedMetricSpecification.html)」を参照してください。

   または、CloudWatch でカスタマイズされたメトリクス仕様を作成し、各パラメータの値を追加することによって、スケーリング用のカスタムメトリクスを使用することもできます。指定されたメトリクスの平均使用率を 100 パーセントに維持するターゲット追跡設定の例を以下に示します。

   ```
   $ cat ~/config.json
   {
      "TargetValue": 100.0,
      "CustomizedMetricSpecification":{
         "MetricName": "MyUtilizationMetric",
         "Namespace": "MyNamespace",
         "Dimensions": [
            {
               "Name": "MyOptionalMetricDimensionName",
               "Value": "MyOptionalMetricDimensionValue"
            }
         ],
         "Statistic": "Average",
         "Unit": "Percent"
      }
   }
   ```

   詳細については、*Application Auto Scaling API リファレンス*の「[CustomizedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)」を参照してください。

1. 作成した `config.json` ファイルと共に以下の [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) コマンドを使用して、`cpu50-target-tracking-scaling-policy` という名前のスケーリングポリシーを作成します。

   **Linux、macOS、または Unix**

   ```
   aws application-autoscaling put-scaling-policy --service-namespace ec2 \
     --scalable-dimension ec2:spot-fleet-request:TargetCapacity \
     --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
     --policy-name cpu50-target-tracking-scaling-policy --policy-type TargetTrackingScaling \
     --target-tracking-scaling-policy-configuration file://config.json
   ```

   **Windows**

   ```
   aws application-autoscaling put-scaling-policy --service-namespace ec2 ^
     --scalable-dimension ec2:spot-fleet-request:TargetCapacity ^
     --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE ^
     --policy-name cpu50-target-tracking-scaling-policy --policy-type TargetTrackingScaling ^
     --target-tracking-scaling-policy-configuration file://config.json
   ```

**Output**  
成功した場合、このコマンドはユーザーに代わって作成された 2 つの CloudWatch アラームの ARN と名前を返します。以下は出力の例です。

   ```
   {
       "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:policy-id:resource/ec2/spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE:policyName/cpu50-target-tracking-scaling-policy",
       "Alarms": [
           {
               "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca",
               "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca"
           },
           {
               "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d",
               "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d"
           }
       ]
   }
   ```

## ステップ 3: ターゲット追跡スケーリングポリシーを記述する
<a name="describe-target-tracking-policy"></a>

以下の [describe-scaling-policies](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-policies.html) コマンドを使用して、指定したサービス名前空間に対するすべてのスケーリングポリシーを記述することができます。

```
aws application-autoscaling describe-scaling-policies --service-namespace ec2
```

結果をフィルタリングし、`--query` パラメータを使用してターゲット追跡スケーリングポリシーのみに制限することができます。`query` 用の構文の詳細については、*AWS Command Line Interface ユーザーガイド*の「[AWS CLIからのコマンド出力の制御](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html)」を参照してください。

**Linux、macOS、または Unix**

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

**Windows**

```
aws application-autoscaling describe-scaling-policies --service-namespace ec2 ^
  --query "ScalingPolicies[?PolicyType==`TargetTrackingScaling`]"
```

**Output**  
以下は出力の例です。

```
[
    {
        "PolicyARN": "PolicyARN",
        "TargetTrackingScalingPolicyConfiguration": {
            "PredefinedMetricSpecification": {
                "PredefinedMetricType": "EC2SpotFleetRequestAverageCPUUtilization"
            },
            "TargetValue": 50.0
        },
        "PolicyName": "cpu50-target-tracking-scaling-policy",
        "ScalableDimension": "ec2:spot-fleet-request:TargetCapacity",
        "ServiceNamespace": "ec2",
        "PolicyType": "TargetTrackingScaling",
        "ResourceId": "spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE",
        "Alarms": [
            {
                "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca",
                "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca"
            },
            {
                "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d",
                "AlarmName": "TargetTracking-spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d"
            }
        ],
        "CreationTime": 1515021724.807
    }
]
```

# を使用して Application Auto Scaling のターゲット追跡スケーリングポリシーを削除する AWS CLI
<a name="delete-target-tracking-policy"></a>

ターゲット追跡スケーリングポリシーが不要になったら、[delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html) コマンドを使用してポリシーを削除することができます。

次のコマンドは、指定したスポットフリートリクエストに対して指定したターゲット追跡スケーリングポリシーを削除します。これは、Application Auto Scaling がユーザーに代わって作成した CloudWatch アラームも削除します。

**Linux、macOS、または Unix**

```
aws application-autoscaling delete-scaling-policy --service-namespace ec2 \
  --scalable-dimension ec2:spot-fleet-request:TargetCapacity \
  --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
  --policy-name cpu50-target-tracking-scaling-policy
```

**Windows**

```
aws application-autoscaling delete-scaling-policy --service-namespace ec2 ^
  --scalable-dimension ec2:spot-fleet-request:TargetCapacity ^
  --resource-id spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE ^
  --policy-name cpu50-target-tracking-scaling-policy
```

# Metric Math を使用して、Application Auto Scaling のターゲット追跡スケーリングポリシーを作成する
<a name="application-auto-scaling-target-tracking-metric-math"></a>

メトリクス数学の使用により、複数の CloudWatch メトリクスをクエリし、数表現を使用して、メトリクスに基づく新しい時系列を作成できます。作成された時系列を CloudWatch コンソール内で視覚化でき、ダッシュボードに追加できます。メトリクス演算の詳細については、「*Amazon CloudWatch ユーザーガイド*」の「[CloudWatch メトリクスでの数式の使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)」を参照してください。

Metric Math の数式には、次の考慮事項が適用されます。
+ 利用可能な CloudWatch メトリクスをクエリできます。各メトリクスは、メトリクス名、名前空間、0 以上のディメンションの一意の組み合わせです。
+ 任意の算術演算子 (\$1 - \$1 / ^)、統計関数 (AVG や SUM など)、または CloudWatch がサポートするその他の関数を使用できます。
+ 数式の関係式では、メトリクスと他の数式の結果の両方を使用できます。
+ メトリクスの指定で使用される数式はすべて、最終的に単一の時系列を返す必要があります。
+ CloudWatch コンソールまたは CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) API を使用して、Metric Math の数式が有効であることを確認できます。

**Topics**
+ [例: タスクごとの Amazon SQS キューバックログ](#metric-math-sqs-queue-backlog)
+ [制限事項](#metric-math-limitations)

## 例: タスクごとの Amazon SQS キューバックログ
<a name="metric-math-sqs-queue-backlog"></a>

タスクごとの Amazon SQS キューバックログを計算するには、キューからの取得に使用できるメッセージの概数を取得し、その数を、サービスで実行されている Amazon ECS タスクの数で割ります。詳細については、 AWS コンピューティングブログの[「カスタムメトリクスを使用した Amazon Elastic Container Service (ECS) Auto Scaling](https://aws.amazon.com/blogs/containers/amazon-elastic-container-service-ecs-auto-scaling-using-custom-metrics/)」を参照してください。

この数式のロジックは次のとおりです。

 `sum of (number of messages in the queue)/(number of tasks that are currently in the RUNNING state)`

この場合、CloudWatch メトリクス情報は次のようになります。


| ID | CloudWatch メトリクス | 統計 | 間隔 | 
| --- | --- | --- | --- | 
| m1 | ApproximateNumberOfMessagesVisible | 合計 | 1 分 | 
| m2 | RunningTaskCount | 平均 | 1 分 | 

メトリクス数学 ID と表現は次のとおりです。


| ID | 表現 | 
| --- | --- | 
| e1 | (m1)/(m2) | 

このメトリクスのアーキテクチャを以下に図で示します。

![\[キューを使用する Application Auto Scaling アーキテクチャ図\]](http://docs.aws.amazon.com/ja_jp/autoscaling/application/userguide/images/sqs-custom-metric-diagram.png)


**この Metric Math を使用してターゲット追跡スケーリングポリシーを作成するには (AWS CLI)**

1. Metric Math の数式を、カスタマイズされたメトリクス仕様の一部として、`config.json` という名前の JSON ファイルに保存します。

   次の例を参考にして開始してください。各*ユーザー入力プレースホルダー*を独自の情報に置き換えます。

   ```
   {
       "CustomizedMetricSpecification": {
           "Metrics": [
               {
                   "Label": "Get the queue size (the number of messages waiting to be processed)",
                   "Id": "m1",
                   "MetricStat": {
                       "Metric": {
                           "MetricName": "ApproximateNumberOfMessagesVisible",
                           "Namespace": "AWS/SQS",
                           "Dimensions": [
                               {
                                   "Name": "QueueName",
                                   "Value": "my-queue"
                               }
                           ]
                       },
                       "Stat": "Sum"
                   },
                   "ReturnData": false
               },
               {
                   "Label": "Get the ECS running task count (the number of currently running tasks)",
                   "Id": "m2",
                   "MetricStat": {
                       "Metric": {
                           "MetricName": "RunningTaskCount",
                           "Namespace": "ECS/ContainerInsights",
                           "Dimensions": [
                               {
                                   "Name": "ClusterName",
                                   "Value": "my-cluster"
                               },
                               {
                                   "Name": "ServiceName",
                                   "Value": "my-service"
                               }
                           ]
                       },
                       "Stat": "Average"
                   },
                   "ReturnData": false
               },
               {
                   "Label": "Calculate the backlog per instance",
                   "Id": "e1",
                   "Expression": "m1 / m2",
                   "ReturnData": true
               }
           ]
       },
       "TargetValue": 100
   }
   ```

   詳細については、*Application Auto Scaling API Reference* の「[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)」を参照してください。
**注記**  
以下は、CloudWatch メトリクスのメトリクス名、名前空間、ディメンション、および統計を見つけるために役立つ追加のリソースです。  
 AWS サービスの利用可能なメトリクスの詳細については、「Amazon [AWS CloudWatch ユーザーガイド」の「CloudWatch メトリクスを発行するサービス](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html)」を参照してください。 *Amazon CloudWatch *
を使用して CloudWatch メトリクスの正確なメトリクス名、名前空間、ディメンション (該当する場合) を取得するには AWS CLI、[「list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html)」を参照してください。

1. このポリシーを作成するには、以下の例にあるように、JSON ファイルを入力として使用して [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) コマンドを実行します。

   ```
   aws application-autoscaling put-scaling-policy --policy-name sqs-backlog-target-tracking-scaling-policy \
     --service-namespace ecs --scalable-dimension ecs:service:DesiredCount --resource-id service/my-cluster/my-service \
     --policy-type TargetTrackingScaling --target-tracking-scaling-policy-configuration file://config.json
   ```

   成功した場合、このコマンドは、ユーザーに代わって作成したポリシーの Amazon リソースネーム (ARN) および 2 つの CloudWatch アラームの ARN を返します。

   ```
   {
       "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy: 8784a896-b2ba-47a1-b08c-27301cc499a1:resource/ecs/service/my-cluster/my-service:policyName/sqs-backlog-target-tracking-scaling-policy",
       "Alarms": [
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-service/my-cluster/my-service-AlarmHigh-9bc77b56-0571-4276-ba0f-d4178882e0a0",
               "AlarmName": "TargetTracking-service/my-cluster/my-service-AlarmHigh-9bc77b56-0571-4276-ba0f-d4178882e0a0"
           },
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-service/my-cluster/my-service-AlarmLow-9b6ad934-6d37-438e-9e05-02836ddcbdc4",
               "AlarmName": "TargetTracking-service/my-cluster/my-service-AlarmLow-9b6ad934-6d37-438e-9e05-02836ddcbdc4"
           }
       ]
   }
   ```
**注記**  
このコマンドがエラーをスローする場合は、 を AWS CLI ローカルで最新バージョンに更新していることを確認してください。

## 制限事項
<a name="metric-math-limitations"></a>
+ 最大リクエストサイズは 50 KB です。これは、ポリシー定義でメトリクス計算を使用した場合の [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) API リクエストの合計ペイロードサイズです。この制限を超えると、Application Auto Scaling はリクエストを拒否します。
+ ターゲット追跡スケーリングポリシーでメトリクス計算を使用する場合、次のサービスはサポートされません。
  + Amazon Keyspaces (Apache Cassandra 向け) 
  + DynamoDB
  + Amazon EMR
  + Amazon MSK
  + Amazon Neptune