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

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

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

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

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

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

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

アプリケーションのニーズに応じて、ターゲット追跡を使用するときにこれらのよく使用されるスケーリングメトリクスのうちの 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 または SDK を使用する必要があります。

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

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

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

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

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

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

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

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

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

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

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

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

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

スケールアウト時、グループの現在の容量の一部としてウォームアップ中のインスタンスは対象にしません。そのため、メトリクスは起動時に高いリソース使用率の影響を受けません。これにより、必要以上の数のインスタンスが追加されることがなくなります。

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

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

ターゲット追跡スケーリングポリシーの作成 (コンソール)

Auto Scaling グループを作成するときに、または Auto Scaling グループの作成後に、ターゲット追跡スケーリングポリシーを設定できます。

ターゲット追跡スケーリングポリシーを使用する Auto Scaling グループを作成するには

  1. の「Amazon EC2 Auto Scaling コンソール」を開きます。https://console.aws.amazon.com/ec2autoscaling/

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

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

  4. []グループサイズで、最小容量と最大容量を更新してスケーリングする範囲を指定します。これら 2 つの設定により、Auto Scaling グループは動的にスケーリングできます。Amazon EC2 Auto Scaling は、最小容量と最大容量で指定された値の範囲でグループをスケーリングします。

  5. []スケーリングポリシー] で、[ターゲット追跡スケーリングポリシー

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

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

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

      [] を選択した場合ターゲットあたりのApplication Load Balancer のリクエスト数[] で、ターゲットグループを選択します。ターゲットグループ

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

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

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

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

既存の Auto Scaling グループのターゲット追跡スケーリングポリシーを作成するには

  1. の「Amazon EC2 Auto Scaling コンソール」を開きます。https://console.aws.amazon.com/ec2autoscaling/

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

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

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

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

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

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

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

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

      [] を選択した場合ターゲットあたりのApplication Load Balancer のリクエスト数[] で、ターゲットグループを選択します。ターゲットグループ

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

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

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

  6. [Create] を選択します。

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

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

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

を使用するにはcreate-auto-scaling-groupという名前の Auto Scaling グループを作成するにはmy-asg起動設定の使用my-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" } }

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

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

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

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

例: cpu40-target-tracking-scaling-policy

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

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 つの CloudWatch アラームの ARN と名前を返します。

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