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

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

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

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

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

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

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

複数のターゲット追跡スケーリングポリシー

スケーリングパフォーマンスを最適化するために複数のターゲット追跡スケーリングポリシーを同時に使用できますが、それぞれが異なるメトリクスを使用する必要があります。例えば、使用率とスループットは互いに影響し合う可能性があります。これは、これらのメトリクスのいずれかが変更されるたびに、通常、他のメトリクスも影響を受けることを意味します。このため、複数のメトリクスを使用することで、Auto Scaling グループの負荷に関する追加情報が提供され、グループに追加するキャパシティを判断する際の意思決定が容易になります。

Amazon EC2 Auto Scaling の目的は常に可用性を優先することであるため、その動作は、ターゲット追跡ポリシーでスケールアウトまたはスケールインの準備ができているかによって異なります。ターゲット追跡ポリシーのいずれかでスケールアウトする準備ができると、Auto Scaling グループがスケールアウトされますが、すべてのターゲット追跡ポリシー (スケールイン部分が有効) でスケールインする準備ができている場合にのみスケールインされます。

メトリクスを選択する

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

事前定義されたメトリクスタイプでターゲット追跡スケーリングポリシーを作成する場合、次の事前定義済みメトリクスのリストからメトリクスを選択します。

  • ASGAverageCPUUtilization - Auto Scaling グループの平均 CPU 使用率。

  • ASGAverageNetworkIn - すべてのネットワークインターフェイスで単一のインスタンスが受信した平均バイト数。

  • ASGAverageNetworkOut - すべてのネットワークインターフェイスで単一のインスタンスから送信された平均バイト数。

  • ALBRequestCountPerTarget - ターゲットあたりの Application Load Balancer の平均リクエスト数。

重要

ターゲットごとの CPU 使用率、ネットワーク I/O、および Application Load Balancer リクエスト数のメトリクスに関するその他の貴重な情報は、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンスに使用可能な CloudWatch メトリクスのリスト」トピックと、CloudWatch Application Load Balancer 用ユーザーガイドの「Application Load Balancer トピックのメトリクス」にそれぞれ記載されています。 Amazon EC2

カスタム CloudWatch メトリクスを指定 CloudWatch することで、利用可能な他のメトリクスまたは で独自のメトリクスを選択できます。カスタマイズされたメトリクス仕様でターゲット追跡ポリシーを作成するには、 AWS CLI または SDK を使用する必要があります。を使用してターゲット追跡スケーリングポリシーのカスタマイズされたメトリクス仕様を指定する例については AWS CLI、「」を参照してくださいAWS Command Line Interface (AWS CLI) のスケーリングポリシーの例

メトリクスを選択するときは、以下の点に注意してください。

  • 使用状況の変化に応じてより迅速にスケールできるように、1 分間隔で利用可能なメトリクスのみを使用することをお勧めします。ターゲット追跡では、すべての事前定義済みメトリクスとカスタムメトリクスについて 1 分単位で集計されたメトリクスが評価されますが、基礎となるメトリクスによっては、データが公開される頻度は低くなる可能性があります。たとえば、Amazon EC2 メトリクスはすべてデフォルトで 5 分間隔で送信されますが、1 分に設定できます (詳細モニタリングと呼ばれます)。この選択は個々のサービス次第です。ほとんどのサービスは、可能な限り短い間隔を使用しようとします。詳細モニタリングを有効にする方法については、「Auto Scaling インスタンスのモニタリングを設定する」を参照してください。

  • カスタムメトリクスにはターゲット追跡に使用できないものもあります。メトリクスは、有効な使用率メトリクスで、インスタンスの使用頻度を示す必要があります。メトリクス値は Auto Scaling グループのインスタンス数に比例して増減する必要があります。それにより、メトリクスデータを使用して比例的にインスタンス数をスケールアウトまたはスケールインできます。例えば、CPUUtilization Auto Scaling グループの負荷がインスタンス間で分散されている場合、Auto Scaling グループの CPU 使用率 (メトリクスディメンション AutoScalingGroupName を持つ Amazon EC2 メトリクス ) は有効です。

  • 以下のメトリクスはターゲットの追跡では機能しません。

    • Auto Scaling グループの前にあるロードバランサーが受信したリクエスト数 (つまり、Elastic Load Balancing メトリクスRequestCount)。ロードバランサーによって受信されたリクエストの数は、Auto Scaling グループの使用率に基づいて変化しません。

    • ロードバランサーのリクエストのレイテンシー (Elastic Load Balancing メトリクスLatency)。リクエストのレイテンシーは、使用率の増加により増える場合がありますが、必ずしも比例して変化するわけではありません。

    • CloudWatch Amazon SQS キューメトリクスApproximateNumberOfMessagesVisible。キュー内のメッセージ数は、キューからのメッセージを処理する Auto Scaling グループのサイズに比例して変わらない可能性があるためです。ただし、Auto Scaling グループの EC2 インスタンスごとにキュー内のメッセージの数を測定するカスタムメトリクスは機能します。詳しくは、「Amazon SQS に基づくスケーリング」を参照してください。

  • ALBRequestCountPerTarget メトリクスを使用するには、ResourceLabel パラメータを指定して、メトリクスに関連付けられているロードバランサーターゲットグループを識別する必要があります。を使用してターゲット追跡スケーリングポリシーの ResourceLabelパラメータを指定する例については AWS CLI、「」を参照してくださいAWS Command Line Interface (AWS CLI) のスケーリングポリシーの例

  • メトリクスが に実数 0 の値を出力する場合 CloudWatch (例: ALBRequestCountPerTarget)、Auto Scaling グループは、アプリケーションへのトラフィックが一定期間存在しない場合に 0 にスケールインできます。Auto Scaling グループにリクエストがルーティングされないときに Auto Scaling グループを 0 にスケールインするには、グループの最小キャパシティを 0 に設定する必要があります。

  • スケーリングポリシーで使用する新しいメトリクスを公開する代わりに、メトリクス数式を使用して既存のメトリクスを組み合わせることができます。詳細については、「Metric Math を使用する、Amazon EC2 Auto Scaling のターゲット追跡スケーリングポリシーを作成する」を参照してください。

ターゲット値の定義

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

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

インスタンスのウォームアップ時間の定義

オプションで、新しく起動されたインスタンスのウォームアップ時間を秒単位で指定できます。指定されたウォームアップ期間が終了するまで、インスタンスは Auto Scaling グループの集約された EC2 インスタンスメトリクスにカウントされません。

インスタンスのウォームアップ期間中、スケーリングポリシーは、ウォームアップしていないインスタンスからのメトリクス値がポリシーのターゲット使用率を超える場合にのみスケールアウトします。

グループが再度スケールアウトする場合、まだウォームアップ中のインスタンスは、次のスケールアウトアクティビティの希望キャパシティーの一部として計上されます。その目的は、スケールアウトを継続的に (ただし過剰になることなく) 行うことです。

スケールアウトアクティビティの進行中は、インスタンスがウォームアップを終了するまで、スケーリングポリシーによって開始されたすべてのスケールインアクティビティがブロックされます。インスタンスのウォームアップが完了し、スケールインイベントが発生した場合、現在終了中のインスタンスは、新しい必要キャパシティーを計算する際にグループの現在のキャパシティーにカウントされます。したがって、Auto Scaling グループから必要以上の数のインスタンスが削除されることがなくなります。

デフォルト値

値が設定されていない場合、スケーリングポリシーは、グループに定義されたデフォルトのインスタンスウォームアップの値であるデフォルト値を使用します。インスタンスのデフォルトウォームアップが null の場合、デフォルトクールダウン の値にフォールバックします。ウォームアップ時間が変更されたときにすべてのスケーリングポリシーを簡単に更新できるように、デフォルトのインスタンスウォームアップを使用することをお勧めします。

考慮事項

ターゲット追跡スケーリングポリシーを使用する場合は、次の考慮事項が適用されます。

  • ターゲット追跡スケーリングポリシーで使用される CloudWatch アラームを作成、編集、削除しないでください。Amazon EC2 Auto Scaling は、ターゲット追跡スケーリングポリシーに関連付けられているアラームを作成および管理 CloudWatchし、不要になったら削除します。

  • ターゲット追跡スケーリングポリシーは、トラフィック減少時に徐々にスケールインすることにより、トラフィックレベルが変動する期間中の可用性を優先します。ワークロードの終了時に Auto Scaling グループを迅速にスケールインするには、ポリシーのスケールイン部分を無効にします。これにより、使用率が低い場合に、ニーズに最適なスケールイン方法を使用できる柔軟性を得られます。スケールインができる限り迅速に行われるようにするには、クールダウン期間が追加されないように、シンプルなスケーリングポリシーを使用しないことをお勧めします。

  • メトリクスにデータポイントがない場合、 CloudWatch アラームの状態は に変わりますINSUFFICIENT_DATA。この状態になると、Amazon EC2 Auto Scaling は、新しいデータポイントが見つかるまでグループをスケールできなくなります。

  • メトリクスが設計上まばらに報告される場合は、メトリクス数式が役立つことがあります。例えば、最新の値を使用するには、FILL(m1,REPEAT) という関数を使用します (m1 がメトリクスです)。

  • ターゲット値と実際のメトリクスデータポイント間にギャップが発生する場合があります。これは、追加または削除するインスタンス数を決定するときに、その数を切り上げまたは切り捨てて常に控えめに動作するためです。これにより、不十分な数のインスタンスを追加したり、インスタンスを過剰に削除したりすることがなくなります。ただし、インスタンス数が少ない、より小さな Auto Scaling グループでは、グループの使用率はターゲット値からかなり離れているように見える場合があります。例えば、CPU 使用率に 50 パーセントのターゲット値を設定し、Auto Scaling グループがそのターゲットを超過した場合です。1.5 インスタンスを追加することで CPU 使用率が 50 パーセント近くに減少すると判断される場合があります。1.5 インスタンスを追加することはできないので、これを切り上げて、2 インスタンスを追加します。これにより、CPU 使用率は 50 パーセント未満の値に下がる可能性がありますが、アプリケーションをサポートする十分なリソースが確保されます。同様に、1.5 インスタンスを削除することで CPU 使用率が 50 パーセントを超えると判断した場合、1 インスタンスのみを削除します。

    より多くのインスタンスのある大規模な Auto Scaling グループの場合、使用率はより多くのインスタンス間で分散されます。その場合、インスタンスの追加または削除により、ターゲット値と実際のメトリクスデータポイントとの差が小さくなります。

  • ターゲットの追跡スケーリングポリシーでは、指定されたメトリクスがターゲット値を超えている場合、Auto Scaling グループをスケールアウトする必要があるとみなされます。指定されたメトリクスがターゲット値を下回っている場合、ターゲット追跡スケーリングポリシーを使用して Auto Scaling グループをスケールアウトすることはできません。

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

Auto Scaling グループのターゲット追跡スケーリングポリシーを作成するには、次のいずれかの方法を使用します。

開始する前に、(Amazon EC2 メトリクスのデフォルトが 5 分間隔であることを踏まえて) 希望するメトリクスが 1 分間隔で利用可能であることを確認してください。

Console
新しい Auto Scaling グループのターゲット追跡スケーリングポリシーを作成するには
  1. https://console.aws.amazon.com/ec2/ でAmazon EC2 コンソールを開き、ナビゲーションペインで [Auto Scaling グループ] を選択します。

  2. [Auto Scaling グループの作成] を選択します。

  3. ステップ 1、2、および 3 で、必要に応じてオプションを選択し、「ステップ 4: グループサイズとスケーリングポリシーを設定する」に進みます。

  4. スケーリングで、最小希望容量最大希望容量を更新して、スケーリングする範囲を指定します。これら 2 つの設定により、Auto Scaling グループは動的にスケーリングできます。詳細については、「Auto Scaling グループのスケーリング制限を設定する」を参照してください。

  5. 自動スケーリング で、ターゲット追跡スケーリングポリシー を選択します。

  6. ポリシーを定義するには、以下の作業を行います。

    1. ポリシーの名前を指定します。

    2. [Metric type (メトリクスタイプ)] でメトリクスを選択します。

      [Application Load Balancer request count per target (ターゲットあたりのApplication Load Balancer リクエスト数)] を選択し、[Target group (ターゲットグループ)] のターゲットグループを選択します。

    3. メトリクスの [Target value] を指定します。

    4. (オプション) インスタンスのウォームアップ では、必要に応じてインスタンスのウォームアップ値を更新します。

    5. (オプション) [Disable scale in to create only a scale-out policy (スケールインを無効にしてスケールアウトポリシーのみを作成する)] を選択します。これにより、必要に応じて異なるタイプの別のスケールインポリシーを作成できます。

  7. Auto Scaling グループの作成に進みます。スケーリングポリシーは、Auto Scaling グループの作成後に作成されます。

既存の Auto Scaling グループにターゲット追跡スケーリングポリシーを作成するには
  1. https://console.aws.amazon.com/ec2/ でAmazon EC2 コンソールを開き、ナビゲーションペインで [Auto Scaling グループ] を選択します。

  2. Auto Scaling グループの横にあるチェックボックスを選択します。

    ページの下部にスプリットペインが開きます。

  3. スケーリング制限が適切に設定されていることを確認します。例えば、グループの希望するキャパシティーがすでに最大値に達している場合は、スケールアウトするために新しい最大値を指定する必要があります。詳細については、「Auto Scaling グループのスケーリング制限を設定する」を参照してください。

  4. [Automatic scaling] (オートスケーリング) タブの [Dynamic scaling policies] (動的スケーリングポリシー) で、[Create dynamic scaling] (動的スケーリングポリシーの作成) を選択します。

  5. ポリシーを定義するには、以下の作業を行います。

    1. [ポリシータイプ] で、[ターゲット追跡スケーリング] のデフォルト設定を維持します。

    2. ポリシーの名前を指定します。

    3. [Metric type (メトリクスタイプ)] でメトリクスを選択します。選択できるメトリクスタイプは 1 つだけです。複数のメトリクスを使用するには、複数のポリシーを作成します。

      [Application Load Balancer request count per target (ターゲットあたりのApplication Load Balancer リクエスト数)] を選択し、[Target group (ターゲットグループ)] のターゲットグループを選択します。

    4. メトリクスの [Target value] を指定します。

    5. (オプション) インスタンスのウォームアップ では、必要に応じてインスタンスのウォームアップ値を更新します。

    6. (オプション) [Disable scale in to create only a scale-out policy (スケールインを無効にしてスケールアウトポリシーのみを作成する)] を選択します。これにより、必要に応じて異なるタイプの別のスケールインポリシーを作成できます。

  6. [作成] を選択します。

AWS CLI

ターゲット追跡スケーリングポリシーを作成するには、次の例を参考にして使用を開始してください。各ユーザー入力プレースホルダーを独自の情報に置き換えます。

注記

その他の例については、「AWS Command Line Interface (AWS CLI) のスケーリングポリシーの例」を参照してください。

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

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

    詳細については、「Amazon EC2 Auto Scaling API リファレンスPredefinedMetricSpecification」の「」を参照してください。

  2. put-scaling-policy コマンドと、前のステップで作成した config.json ファイルを使用して、スケーリングポリシーを作成します。

    aws autoscaling put-scaling-policy --policy-name cpu50-target-tracking-scaling-policy \ --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \ --target-tracking-configuration file://config.json

    成功すると、このコマンドはユーザーに代わって作成された 2 つの CloudWatch アラームの ARNs と名前を返します。

    { "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-asg:policyName/cpu50-target-tracking-scaling-policy", "Alarms": [ { "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e", "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e" }, { "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2", "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2" } ] }