のターゲット追跡スケーリングポリシーAmazon EC2 Auto Scaling - Amazon EC2 Auto Scaling (日本語)

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

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

ターゲット追跡スケーリングポリシーでは、スケーリングメトリクスを選択してターゲット値を設定します。Amazon EC2 Auto Scaling はスケーリングポリシーをトリガーする CloudWatch アラームを作成および管理し、メトリクスとターゲット値に基づいてスケーリング調整値を計算します。スケーリングポリシーは、指定されたターゲット値、またはそれに近い値にメトリクスを維持するため、必要に応じて容量を追加または削除します。ターゲット追跡スケーリングポリシーは、メトリクスをターゲット値に近い値に維持することに加えて、変化するロードパターンによるメトリクスの変化に適応します。

たとえば、ターゲット追跡スケーリングを使用して以下のことが可能です。

  • ターゲットの追跡スケーリングポリシーを設定して、Auto Scaling グループの平均集計 CPU 使用率を 40 パーセントに維持する。

  • Application Load Balancer ターゲットグループのターゲットごとのリクエスト数を、Auto Scaling グループに対して 1000 に維持するように追跡スケーリングポリシーを設定する。

アプリケーションのニーズに応じて、ターゲット追跡を使用するときにこれらのよく使用されるスケーリングメトリクスのうちの 1 つが最適に機能することや、これらのメトリクスの組み合わせまたは別のメトリクスがニーズに合っていることがわかります。

Considerations

Auto Scaling グループのターゲット追跡スケーリングポリシーを作成する前に、ターゲット追跡スケーリングポリシーの特性と動作を理解しておく必要があります。

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

  • ターゲット値と実際のメトリクスデータポイント間にギャップが発生する場合があります。これは、追加または削除するインスタンス数を決定するときに、その数を切り上げまたは切り捨てて常に控えめに動作するためです。これにより、不十分な数のインスタンスを追加したり、インスタンスを過剰に削除したりすることがなくなります。ただし、インスタンス数が少ない、より小さな 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 グループに対して複数のターゲット追跡スケーリングポリシーを設定できます。Amazon EC2 Auto Scaling の目的は常に可用性を優先することであるため、その動作は、ターゲット追跡ポリシーでスケールアウトまたはスケールインの準備ができているかによって異なります。ターゲット追跡ポリシーのいずれかでスケールアウトする準備ができると、Auto Scaling グループがスケールアウトされますが、すべてのターゲット追跡ポリシー (スケールイン部分が有効) でスケールインする準備ができている場合にのみスケールインされます。詳細については、「複数のスケーリングポリシー」を参照してください。

  • ターゲット追跡スケーリングポリシーのスケールイン部分を無効にすることもできます。この機能により、別の方法を使用して Auto Scaling グループをスケールインできる柔軟性が得られます。たとえば、スケールアウトにはターゲット追跡スケーリングポリシーを使用しながら、別のスケーリングポリシータイプを使用してスケールインできます。

  • ターゲット追跡スケーリングポリシー用に設定された CloudWatch アラームを編集または削除しないでください。ターゲット追跡スケーリングポリシーに関連付けられた CloudWatch アラームは AWS によって管理されており、不要になると自動的に削除されます。

メトリクスの選択

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

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

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

  • ASGAverageNetworkIn—Auto Scaling グループがすべてのネットワークインターフェイスで受信したバイトの平均数。

  • ASGAverageNetworkOut—Auto Scaling グループがすべてのネットワークインターフェイスで送信したバイトの平均数。

  • ALBRequestCountPerTarget—Application Load Balancer ターゲットグループ内のターゲットごとに完了したリクエスト数。

カスタマイズされたメトリクスを指定することで、他の使用可能な Amazon CloudWatch メトリクスまたは CloudWatch の独自のメトリクスを選択できます。カスタマイズされたメトリクスでターゲット追跡ポリシーを作成するには、AWS CLI または AWS SDK を使用する必要があります。

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

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

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

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

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

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

  • 指定されたメトリクスに十分なデータがない場合、ALBRequestCountPerTarget メトリクスを使用しない限り、ターゲット追跡スケーリングポリシーによって Auto Scaling グループはスケールインされません。これは、ALBRequestCountPerTarget メトリクスから関連データのない期間にゼロが発行され、ターゲット追跡ポリシーでは、低い使用率の傾向と見なすためのメトリクスデータが必要なためです。ターゲットグループにリクエストがルーティングされないときに Auto Scaling グループを 0 インスタンスにスケールインするには、グループの最小容量を 0 に設定する必要があります。

  • ALBRequestCountPerTarget メトリクスを使用するには、ResourceLabel パラメータを指定して、メトリクスに関連付けられているターゲットグループを識別する必要があります。

メトリクスのモニタリングAmazon EC2

メトリクス値の変化に迅速に対応できるように、1 分間隔でメトリクスをスケーリングすることをお勧めします。5 分間隔でメトリクスをスケーリングすると、応答時間が低速になり、古いメトリクスデータに基づいてスケーリングすることになる可能性があります。

Amazon EC2 メトリクスのこのレベルのデータを取得するには、詳細モニタリングを明示的に有効にする必要があります。デフォルトでは、Amazon EC2 インスタンスで基本モニタリングが有効になります。つまり、インスタンスのメトリクスデータは 5 分間隔で利用できます。詳細については、「Auto Scaling インスタンスのモニタリングの設定」を参照してください。

インスタンスのウォームアップ

ターゲット追跡スケーリングポリシーを作成するときに、新しく起動されたインスタンスのウォームアップにかかる秒数を指定できます。その指定されたウォームアップ期間が終了するまで、インスタンスは Auto Scaling グループの集合メトリクスの対象になりません。

スケールアウト時、グループの現在の容量の一部としてウォームアップ中のインスタンスは対象にしません。これにより、必要以上の数のインスタンスが追加されることがなくなります。

スケールイン時、グループの現在の容量の一部として終了中のインスタンスを対象にします。したがって、Auto Scaling グループから必要以上の数のインスタンスが削除されることがなくなります。

スケールアウトアクティビティの進行中、スケールインアクティビティを開始することはできません。

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

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

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインの [AUTO SCALING] で、[Auto Scaling グループ] を選択します。

  3. Auto Scaling グループの横にあるチェックボックスをオンにします。

    [Auto Scaling グループ] ページの下部に分割ペインが開き、選択したグループに関する情報が表示されます。

  4. 最小および最大サイズの制限が適切に設定されていることを確認します。たとえば、グループがすでに最大サイズになっている場合は、スケールアウトするために新しい最大値を指定します。Amazon EC2 Auto Scaling は、最小容量より下回ったり、最大容量より上回ったりすることはありません。グループを更新するには、[詳細] タブで、最小容量と最大容量の現在の設定を変更します。

  5. [Automatic scaling (自動スケーリング)] タブの [Scaling policies (スケーリングポリシー)] で、[Add policy (ポリシーの追加)] を選択します。

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

    1. [Policy type (ポリシータイプ)] では、デフォルトの [Target tracking scaling (ターゲット追跡スケーリング)] のままにします。

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

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

    4. [ターゲットグループ] で、Auto Scaling グループのロードバランサー設定で指定したターゲットグループを選択します。このステップを完了する必要があるのは、Application Load Balancer のターゲットあたりのリクエスト数に基づくメトリクスタイプを選択した場合のみです。

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

    6. (オプション) [Instances need (インスタンスのニーズ)] にインスタンスのウォームアップ値を指定します。これにより、新しく起動されたインスタンスが CloudWatch メトリクスに反映されるまでの時間を制御できます。

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

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

ターゲットの追跡スケーリングポリシーを作成する (AWS CLI)

以下のように AWS CLI を使用して Auto Scaling グループのターゲット追跡スケーリングポリシーを設定します。

ステップ 1: Auto Scaling グループの作成

起動設定 を使用して create-auto-scaling-group という名前の グループを作成するには、Auto Scalingmy-asgmy-launch-config コマンドを使用します。 使用する起動設定がない場合は、create-launch-configuration を呼び出すことで作成できます。

aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg \ --launch-configuration-name my-launch-config \ --vpc-zone-identifier "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" \ --max-size 5 --min-size 1

ステップ 2: ターゲットの追跡スケーリングポリシーの作成

Auto Scaling グループを作成したら、アプリケーションの負荷が変化したときにグループ内で実行中の EC2 インスタンスの数を動的に増減するように Amazon EC2 Auto Scaling に指示する、ターゲット追跡スケーリングポリシーを作成できます。

例: ターゲットの追跡設定ファイル

平均 CPU 使用率を 40 パーセントに維持するターゲット追跡設定の例を次に示します。この設定を config.json という名前のファイルに保存してください。

{ "TargetValue": 40.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ASGAverageCPUUtilization" } }

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

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

{ "TargetValue":40.0, "CustomizedMetricSpecification":{ "MetricName":"MyUtilizationMetric", "Namespace":"MyNamespace", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName", "Value":"MyOptionalMetricDimensionValue" } ], "Statistic":"Average", "Unit":"Percent" } }

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

例: cpu40-target-tracking-scaling-policy

グループの平均 CPU 使用率を 40 パーセントに維持する、 という名前のスケーリングポリシーを作成するには、前に作成した put-scaling-policy ファイルと共に、config.jsoncpu40-target-tracking-scaling-policy コマンドを使用します。Auto Scaling

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

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

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