Amazon EC2 Auto Scaling (日本語)
ユーザーガイド

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

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

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

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

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

使用率の変化に迅速に対応できるように、1 分間隔で Amazon EC2 インスタンスのメトリクスをスケーリングすることをお勧めします。5 分間隔でメトリクスをスケーリングすると、応答時間が低速になり、古いメトリクスデータに基づいてスケーリングすることになる可能性があります。デフォルトでは、Amazon EC2 インスタンスで基本モニタリングが有効になります。つまり、インスタンスのメトリクスデータは 5 分間隔で利用できます。詳細モニタリングを有効にして、1 分間隔でインスタンスのメトリクスデータを取得できます。詳細については、「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 グループは、同時に複数のスケーリングポリシーを有効にすることができます。詳細については、「複数のスケーリングポリシー」を参照してください。

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

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

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

  • ターゲット追跡スケーリングを Amazon EC2 以外のリソースに使用することもできます。詳細については、Application Auto Scaling ユーザーガイド の「ターゲット追跡スケーリングポリシー」を参照してください。

メトリクスの選択

Amazon EC2 コンソールを使用して、事前定義されたメトリクスに基づいてターゲット追跡スケーリングポリシーを適用できます。あるいは、Amazon EC2 Auto Scaling CLI または API を使用して、事前定義またはカスタマイズされたメトリクスに基づいてスケーリングポリシーを適用できます。以下の事前定義されたメトリクスを使用できます。

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

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

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

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

カスタマイズされたメトリクスを指定することで、他の使用可能な Amazon CloudWatch メトリクスを選択できます。

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

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

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

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

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

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

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

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

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

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

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

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

  4. [Create Auto Scaling Group] ページで、以下のいずれかの操作を実行します。

    • [既存の起動設定から Auto Scaling グループを作成する] を選択し、既存の起動設定を選択して、[次のステップ] を選択します。

    • 使用する起動設定がない場合は、[Create a new launch configuration] を選択し、表示される指示に従います。詳細については、「起動設定を作成する」を参照してください。

  5. [Configure Auto Scaling group details (Auto Scaling グループ詳細の設定)] ページで、以下を実行します。

    1. [Group name (グループ名)] に Auto Scaling グループの名前を入力します。

    2. [Group size] に Auto Scaling グループに必要な容量を入力します。

    3. VPC が必要なインスタンス(T2 のインスタンスなど)を起動設定で指定した場合、[Network] で VPC を選択する必要があります。AWS アカウントで EC2-Classic がサポートされており、インスタンスで VPC が不要な場合は、Launch into EC2-Classic または VPC のいずれかを選択できます。

    4. 前のステップで VPC を選択した場合、[Subnet] で 1 つ以上のサブネットを選択します。前のステップで EC2-Classic を選択した場合、[Availability Zone(s)] で 1 つ以上のアベイラビリティーゾーンを選択します。

    5. [Next: Configure scaling policies] を選択します。

  6. [Configure scaling policies] ページで、以下を実行します。

    1. [Use scaling policies to adjust the capacity of this group] を選択します。

    2. [Scale between] で始まる行を使用して、Auto Scaling グループの最小および最大サイズを指定します。たとえば、グループがすでに最大サイズに達している場合、スケールアウトするには新しい最大サイズを指定します。

    3. [Scale Group Size] で、スケーリングポリシーを指定します。オプションでポリシーの名前を指定し、[Metric type (メトリクスタイプ)] の値を選択します。

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

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

    6. [Disable scale-in] オプションをオンにして、スケールアウトポリシーのみが作成されるようにします。これにより、必要に応じて異なるタイプの別のスケールインポリシーを作成できます。

    7. [Review] を選択します。

    8. [Review] ページで、[Auto Scaling グループの作成] を選択します。

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

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

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

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

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

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

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

ステップ 1: Auto Scaling グループを作成する

起動設定 my-launch-config を使用して my-asg という名前の Auto Scaling グループを作成するには、create-auto-scaling-group コマンドを使用します。使用する起動設定がない場合は、作成できます。詳細については、「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: ターゲット追跡スケーリングポリシーを作成する

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

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

ターゲット追跡の設定ファイルの例を以下に示します。このファイルは config.json として保存する必要があります。

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

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

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

例: cpu40-target-tracking-scaling-policy

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

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