Amazon EC2 Auto Scaling の予測スケーリング - Amazon EC2 Auto Scaling

Amazon EC2 Auto Scaling の予測スケーリング

予測スケーリングを使用して、トラフィックフローの日次および週次のパターンに先立って Auto Scaling グループ内の EC2 インスタンスの数を増やします。

予測スケーリングは、次のような状況に適しています。

  • 通常の営業時間にはリソースの使用率が高く、夜間や週末はリソースの使用率が低いといったサイクルがあるトラフィック

  • バッチ処理、テスト、定期的なデータ分析など、オンとオフを繰り返すワークロードパターン

  • 初期化に時間がかかり、スケールアウトイベント中のアプリケーションのパフォーマンスにレイテンシーが顕著な影響を与えるアプリケーション

一般に、トラフィックが増加する規則的なパターンがあり、アプリケーションの初期化に長い時間がかかる場合は、予測スケーリングの使用を検討する必要があります。反応的な性質を持つ動的スケーリングのみを使用する場合と比較して、予測スケーリングを使用すると、予測される負荷に先立ってキャパシティーを起動することで、より迅速にスケーリングできます。予測スケーリングでは、キャパシティーを過剰にプロビジョニングする必要がないので、EC2 請求の費用を節約できる可能性もあります。

例えば、営業時間中の使用率が高く、夜間の使用量が少ないアプリケーションを考えてみましょう。各営業日の開始時に、予測スケーリングにより、トラフィックが最初に流入する前にキャパシティーを追加できます。これにより、使用率の低い期間から高い使用率の期間に移行するときに、アプリケーションの高可用性とパフォーマンスを維持するのに役立ちます。トラフィックの変化に動的スケーリングが反応するのを待つ必要はありません。また、アプリケーションの負荷パターンを確認し、スケジュールされたスケーリングを使用して適切なキャパシティーをスケジュールしようと時間を費やす必要はありません。

AWS Management Console、AWS CLI、またはいずれかの SDK を使用して、任意の Auto Scaling グループに予測スケーリングポリシーを追加します。

予測スケーリングの仕組み

予測スケーリングは、機械学習を使用して CloudWatch からの履歴データに基づいてキャパシティー要件を予測します。機械学習アルゴリズムは、使用可能な履歴データを使用して、履歴負荷パターンに最も適したキャパシティーを計算します。そして、新しいデータに基づいて継続的に学習して、将来の予測をより正確にします。

予測スケーリングを使用するには、まず、メトリクスとターゲット使用率のペアを使用してスケーリングポリシーを作成します。24 時間以上の履歴データがある場合は、ポリシーを作成した直後に予測の作成が開始されます。予測スケーリングは、過去 14 日間の CloudWatch メトリクスデータのパターンを検出して、次の 48 時間の時間ごとの予測を作成します。予測データは、最新の CloudWatch メトリクスデータに基づいて毎日更新されます。

予測スケーリングを予測のみモードに設定すると、予測スケーリングがキャパシティーのアクティブなスケーリングを開始する前に予測を評価できます。その後、Amazon EC2 Auto Scaling コンソールから CloudWatch の予測と最近のメトリクスデータをグラフ形式で表示できます。また、AWS CLI またはいずれかの SDK を使用して、予測データにアクセスすることもできます。

予測スケーリングでスケーリングを開始する準備ができたら、ポリシーを予測のみモードから予測とスケーリングモードに切り替えます。予測とスケーリングモードに切り替えた後、Auto Scaling グループが予測に基づいたスケーリングを開始します。

Amazon EC2 Auto Scaling は、予測を使用して、各時間の初めにインスタンス数をスケーリングします。

  • 実際のキャパシティーが予測キャパシティーより小さい場合、Amazon EC2 Auto Scaling は Auto Scaling グループをスケールアウトして、希望するキャパシティーと予測されたキャパシティーが等しくなるようにします。

  • 実際のキャパシティーが予測されたキャパシティーよりも大きい場合、Amazon EC2 Auto Scaling はキャパシティーをスケールインしません。

  • 予測キャパシティーが、設定した Auto Scaling グループの最小および最大キャパシティーの範囲外の場合、この設定が守られます。

ベストプラクティス

  • 予測スケーリングがワークロードに適しているかどうかを確認します。ワークロードは、曜日または時刻に固有の定期的な負荷パターンを示す場合に、予測スケーリングに適しています。これを確認するには、予測のみモードで予測スケーリングポリシーを設定します。

  • 予測スケーリングでアプリケーションをアクティブにスケーリングできるようにする前に、予測とその精度を評価します。予測スケーリングでは、予測を開始するには 24 時間以上の履歴データが必要です。ただし、履歴データが 2 週間あれば、予測がより効果的です。新しい Auto Scaling グループを作成し、古いグループを削除してアプリケーションを更新する場合、予測スケーリングが再び予測の生成を開始するには、新しい Auto Scaling グループに 24 時間の履歴負荷データが必要です。この場合、より正確な予測を得るのに数日かかる場合があります。

  • 予測のみモードで複数の予測スケーリングポリシーを作成して、さまざまなメトリクスの潜在的な影響をテストします。Auto Scaling グループごとに複数の予測スケーリングポリシーを作成できますが、アクティブなスケーリングに使用できるポリシーは 1 つだけです。

  • カスタムメトリクスペアを選択した場合、負荷メトリクスとスケーリングメトリクスの異なる組み合わせを定義できます。問題を回避するには、選択した負荷メトリクスがアプリケーションの全負荷を表していることを確認してください。

  • 動的スケーリングで予測スケーリングを使用します。動的スケーリングは、リソース使用率のリアルタイムの変化に応じてキャパシティーを自動的にスケーリングするために使用されます。予測スケーリングと組み合わせて使用すると、アプリケーションの需要曲線に密接に従うことができ、トラフィックが少ない時間帯にスケールインし、トラフィックが予想を上回る場合はスケールアウトできます。複数のスケーリングポリシーがアクティブな場合、各ポリシーによって希望するキャパシティーが個別に決定され、希望するキャパシティーはそれらの最大値に設定されます。例えば、ターゲット追跡スケーリングポリシーでターゲット使用率を維持するために 10 インスタンスが必要で、予測スケーリングポリシーでターゲット使用率を維持するために 8 つのインスタンスが必要である場合、グループの希望するキャパシティーは 10 に設定されます。

予測スケーリングポリシーを作成する (コンソール)

Amazon EC2 Auto Scaling コンソールを使用して、予測スケーリングポリシーの作成、表示、および削除を実行できます。

事前定義されたメトリクス (CPU、ネットワーク I/O、またはターゲットあたりの Application Load Balancer リクエスト数) を使用して予測スケーリングポリシーを作成するには、以下の手順を実行します。予測スケーリングポリシーを作成する最も簡単な方法は、事前定義されたメトリクスを使用することです。その代わりにカスタムメトリクスを使用する場合は、「コンソールで予測スケーリングポリシーを作成する (カスタムメトリクス)」を参照してください。

Auto Scaling グループが新しい場合に Amazon EC2 Auto Scaling がグループの予測を生成するには、そのグループが少なくとも 24 時間分のデータを提供する必要があります。

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

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

    ページの下部に分割されたペインが開きます。

  3. [Automatic scaling] (自動スケーリング) タブの [Scaling policies] (スケーリングポリシー) で、[Create predictive scaling policy] (予測スケーリングポリシーの作成) を選択します。

  4. ポリシーの名前を入力します。

  5. Amazon EC2 Auto Scaling にすぐにスケーリングを開始させるには、[Scale based on forecast] (予測に基づくスケーリング) をオンにします。

    ポリシーを予測のみモードにしておくには、[Scale based on forecast] (予測に基づくスケーリング) をオフのままにします。

  6. [Metrics] (メトリクス) で、オプションのリストからメトリクスを選択します。オプションには、[CPU][Network In] (ネットワーク入力)、[Network Out] (ネットワーク出力)、[Application Load Balancer request count] (Application Load Balancer リクエスト数)、および [Custom metric pair] (カスタムメトリクスペア) が含まれます。

    [Application Load Balancer request count per target] (ターゲットあたりの Application Load Balancer リクエスト数) を選択した場合、[Target group] (ターゲットグループ) のターゲットグループを選択します。[Application Load Balancer request count per target] (ターゲットあたりの Application Load Balancer リクエスト数) は、Application Load Balancer ターゲットグループを Auto Scaling グループにアタッチしている場合にのみサポートされます。

    [Custom metric pair] (カスタムメトリクスペア) を選択した場合、[Load metric] (負荷のメトリクス) と [Scaling metric] (スケーリングのメトリクス) のドロップダウンリストから個々のメトリクスを選択します。

  7. [Target utilization] (ターゲット使用率) に、Amazon EC2 Auto Scaling が維持する必要があるターゲット値を入力します。Amazon EC2 Auto Scaling は、平均使用率がターゲット使用率になるまで、または指定したインスタンスの最大数に達するまで、キャパシティーをスケールアウトします。

    スケーリングメトリクスが以下である場合... ターゲット使用率は以下の内容になります。
    CPU

    各インスタンスが使用する CPU の理想的な割合。

    ネットワーク入力

    各インスタンスが受信する理想的な 1 分あたりの平均バイト数。

    ネットワーク出力

    各インスタンスが送信する理想的な 1 分あたりの平均バイト数。

    ターゲットあたりの Application Load Balancer リクエスト数

    各インスタンスが受信する理想的な 1 分あたりの平均リクエスト数。

  8. (オプション) [Pre-launch instances] (インスタンスの事前起動) で、予測によって負荷の増加が必要とされる際、どれくらい前にインスタンスを起動しておくかを選択します。

  9. (オプション) [Max capacity behavior] (最大容量の動作) で、予測されたキャパシティーが定義された最大値を超える場合に、Amazon EC2 Auto Scaling がグループの最大容量を超えてスケールアウトできるようにするかどうかを選択します。この設定をオンにすると、トラフィックが最高になると予測される期間中にスケールアウトが実行されます。

  10. (オプション) [Buffer maximum capacity above the forecasted capacity] (予測キャパシティーを超える最大キャパシティーのバッファ) で、予測キャパシティーが最大キャパシティーに近づいたか、それを超えたときに使用する追加キャパシティーを選択します。この値は予測キャパシティーに対する割合 (%) として指定されます。たとえば、バッファが 10 の場合、バッファは 10% です。従って、予測キャパシティーが 50 で最大キャパシティーが 40 の場合、有効な最大キャパシティーは 55 です。

    これを 0 に設定すると、Amazon EC2 Auto Scaling は最大キャパシティーを超えてスケールすることはできても、予測キャパシティーまでとなり、それを超えることはできません。

  11. [Create predictive scaling policy] (予測スケーリングポリシーを作成) を選択します。

カスタムメトリクスを使用して予測スケーリングポリシーを作成するには、以下の手順を実行します。カスタムメトリクスには、CloudWatch が提供するその他メトリクス、またはユーザーが CloudWatch に発行するメトリクスを含めることができます。CPU、ネットワーク I/O、またはターゲットあたりの Application Load Balancer リクエスト数を使用するには、「コンソールで予測スケーリングポリシーを作成する (事前定義されたメトリクス)」を参照してください。

カスタムメトリクスを使用して予測スケーリングポリシーを作成するには、以下を実行する必要があります。

  • Amazon EC2 Auto Scaling が CloudWatch のメトリクスとやり取りできるようにする未処理のクエリを提供する必要があります。詳細については、「カスタムメトリクスを使用した高度な予測スケーリングポリシー設定」を参照してください。Amazon EC2 Auto Scaling が CloudWatch からメトリクスデータを抽出できることを確実にするため、各クエリがデータポイントを返していることを確認します。これは、CloudWatch コンソール、または CloudWatch GetMetricData API 操作を使用して確認します。

    注記

    Amazon EC2 Auto Scaling コンソールの JSON エディタには、サンプル JSON ペイロードが提供されています。これらの例では、AWS が提供するその他の CloudWatch メトリクス、またはユーザーが以前に CloudWatch に発行したメトリクスを追加するために必要なキーと値のペアを参照できます。これらを開始点として使用してから、必要に応じてカスタマイズすることができます。

  • メトリクス計算を使用する場合は、独自のシナリオに適した JSON を手動で構築する必要があります。詳細については、「Metric Math 式を使用する」を参照してください。ポリシーでメトリクス計算を使用する前に、メトリクス数式に基づくメトリクスクエリが有効であり、単一の時系列を返すことを確認してください。これは、CloudWatch コンソール、または CloudWatch GetMetricData API 操作を使用して確認します。

誤ったデータ (間違った Auto Scaling グループ名など) を提供することによってクエリでエラーが発生した場合、予測にはデータがありません。カスタムメトリクス問題のトラブルシューティングについては、「考慮事項とトラブルシューティング」を参照してください。

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

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

    ページの下部に分割されたペインが開きます。

  3. [Automatic scaling] (自動スケーリング) タブの [Scaling policies] (スケーリングポリシー) で、[Create predictive scaling policy] (予測スケーリングポリシーの作成) を選択します。

  4. ポリシーの名前を入力します。

  5. Amazon EC2 Auto Scaling にすぐにスケーリングを開始させるには、[Scale based on forecast] (予測に基づくスケーリング) をオンにします。

    ポリシーを予測のみモードにしておくには、[Scale based on forecast] (予測に基づくスケーリング) をオフのままにします。

  6. [Metrics] (メトリクス) では、[Custom metric pair] (カスタムメトリクスのペア) を選択します。

    1. [Load metric] (ロードメトリクス) では、[Custom CloudWatch metric] (カスタム CloudWatch メトリクス) を選択してカスタムメトリクスを使用します。ポリシーのロードメトリクス定義が含まれる JSON ペイロードを構築し、それを JSON エディタボックスに貼り付けて、ボックス内にすでに入力されているペイロードを置き換えます。

    2. [Scaling metric] (スケーリングメトリクス) では、[Custom CloudWatch metric] (カスタム CloudWatch メトリクス) を選択してカスタムメトリクスを使用します。ポリシーのスケーリングメトリクス定義が含まれる JSON ペイロードを構築し、それを JSON エディタボックスに貼り付けて、ボックス内にすでに入力されているペイロードを置き換えます。

    3. (オプション) カスタム容量メトリクスを追加するには、[Add custom capacity metric] (カスタム容量メトリクスを追加する) のチェックボックスをオンにします。ポリシーの容量メトリクス定義が含まれる JSON ペイロードを構築し、それを JSON エディタボックスに貼り付けて、ボックス内にすでに入力されているペイロードを置き換えます。

      このオプションを有効にする必要があるのは、容量メトリクスデータが複数の Auto Scaling グループにまたがる場合に容量の新しい時系列を作成するためのみです。この場合は、メトリクス計算を使用してデータを単一の時系列に集計する必要があります。

  7. [Target utilization] (ターゲット使用率) に、Amazon EC2 Auto Scaling が維持する必要があるターゲット値を入力します。Amazon EC2 Auto Scaling は、平均使用率がターゲット使用率になるまで、または指定したインスタンスの最大数に達するまで、キャパシティーをスケールアウトします。

  8. (オプション) [Pre-launch instances] (インスタンスの事前起動) で、予測によって負荷の増加が必要とされる際、どれくらい前にインスタンスを起動しておくかを選択します。

  9. (オプション) [Max capacity behavior] (最大容量の動作) で、予測されたキャパシティーが定義された最大値を超える場合に、Amazon EC2 Auto Scaling がグループの最大容量を超えてスケールアウトできるようにするかどうかを選択します。この設定をオンにすると、トラフィックが最高になると予測される期間中にスケールアウトが実行されます。

  10. (オプション) [Buffer maximum capacity above the forecasted capacity] (予測キャパシティーを超える最大キャパシティーのバッファ) で、予測キャパシティーが最大キャパシティーに近づいたか、それを超えたときに使用する追加キャパシティーを選択します。この値は予測キャパシティーに対する割合 (%) として指定されます。たとえば、バッファが 10 の場合、バッファは 10% です。従って、予測キャパシティーが 50 で最大キャパシティーが 40 の場合、有効な最大キャパシティーは 55 です。

    これを 0 に設定すると、Amazon EC2 Auto Scaling は最大キャパシティーを超えてスケールすることはできても、予測キャパシティーまでとなり、それを超えることはできません。

  11. [Create predictive scaling policy] (予測スケーリングポリシーを作成) を選択します。

予測スケーリングポリシーの作成 (AWS CLI)

次のように AWS CLI を使用して Auto Scaling グループの予測スケーリングポリシーを設定します。予測スケーリングポリシーに指定できる CloudWatch メトリクスの詳細については、「Amazon EC2 Auto Scaling API Reference」(Amazon EC2 Auto Scaling API リファレンス) の「PredictiveScalingMetricSpecification」を参照してください。

例 1: 予測を作成するが、スケーリングしない予測スケーリングポリシー

次のポリシー例では、予測スケーリングに CPU 使用率メトリクスを使用し、ターゲット使用率が 40 である完全なポリシー設定を示しています。使用するモードを明示的に指定しない限り、デフォルトで ForecastOnly モードが使用されます。この設定を config.json という名前のファイルに保存してください。

{ "MetricSpecifications": [ { "TargetValue": 40, "PredefinedMetricPairSpecification": { "PredefinedMetricType": "ASGCPUUtilization" } } ] }

コマンドラインからこのポリシーを作成するには、以下の例にあるように、設定ファイルが指定された put-scaling-policy コマンドを実行します。

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

成功した場合、このコマンドはポリシーの Amazon リソースネーム (ARN) を返します。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/cpu40-predictive-scaling-policy", "Alarms": [] }

例 2: 予測とスケーリングを行う予測スケーリングポリシー

Amazon EC2 Auto Scaling の予測およびスケーリングを許可するポリシーには、Mode プロパティを ForecastAndScale の値で追加します。次の例は、Application Load Balancer リクエスト数メトリクスを使用するポリシー設定を示しています。ターゲット使用率は 1000 で、予測スケーリングは ForecastAndScale モードに設定されています。

{ "MetricSpecifications": [ { "TargetValue": 1000, "PredefinedMetricPairSpecification": { "PredefinedMetricType": "ALBRequestCount", "ResourceLabel": "app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff" } } ], "Mode": "ForecastAndScale" }

このポリシーを作成するには、次の例に示すように、設定ファイルを指定して put-scaling-policy コマンドを実行します。

aws autoscaling put-scaling-policy --policy-name alb1000-predictive-scaling-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json

成功した場合、このコマンドはポリシーの Amazon リソースネーム (ARN) を返します。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:19556d63-7914-4997-8c81-d27ca5241386:autoScalingGroupName/my-asg:policyName/alb1000-predictive-scaling-policy", "Alarms": [] }

例 3: 最大キャパシティーを超えてスケーリングできる予測スケーリングポリシー

次の例は、通常よりも高い負荷を処理する必要がある場合に、グループの最大サイズ制限を超えてスケーリングできるポリシーを作成する方法を示しています。デフォルトでは、Amazon EC2 Auto Scaling は、定義した最大キャパシティーを超えて EC2 のキャパシティーをスケーリングしません。しかし、パフォーマンスや可用性の問題を回避するために、キャパシティーを少し増やしてスケーリングすると便利な場合があります。

キャパシティーがグループの最大サイズに達している、または非常に近いと予測されるときに、Amazon EC2 Auto Scaling が追加のキャパシティーをプロビジョニングする余地を提供するには、次の例に示すように、MaxCapacityBreachBehavior および MaxCapacityBuffer プロパティを指定します。MaxCapacityBreachBehavior に値 IncreaseMaxCapacity を指定する必要があります。グループに含めることができるインスタンスの最大数は、MaxCapacityBuffer の値によって異なります。

{ "MetricSpecifications": [ { "TargetValue": 70, "PredefinedMetricPairSpecification": { "PredefinedMetricType": "ASGCPUUtilization" } } ], "MaxCapacityBreachBehavior": "IncreaseMaxCapacity", "MaxCapacityBuffer": 10 }

この例では、10% のバッファ ("MaxCapacityBuffer": 10) を使用するようにポリシーが設定されています。したがって、予測キャパシティーが 50、最大キャパシティーが 40 の場合、有効な最大キャパシティーは 55 です。キャパシティーを最大キャパシティーを超えてスケーリングし、予測キャパシティーに等しくするが、予測キャパシティーを超えないようにするポリシーでは、バッファは 0 です ("MaxCapacityBuffer": 0)。

このポリシーを作成するには、次の例に示すように、設定ファイルを指定して put-scaling-policy コマンドを実行します。

aws autoscaling put-scaling-policy --policy-name cpu70-predictive-scaling-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json

成功した場合、このコマンドはポリシーの Amazon リソースネーム (ARN) を返します。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:d02ef525-8651-4314-bf14-888331ebd04f:autoScalingGroupName/my-asg:policyName/cpu70-predictive-scaling-policy", "Alarms": [] }

制約事項

  • 予測スケーリングでは、予測を生成する前に 24 時間のメトリクス履歴が必要です。

  • 予測スケーリングの中核的な前提は、Auto Scaling グループが同種構成であり、すべてのインスタンスの容量が同じであるということです。これがグループに当てはまらない場合、予測された容量が正確ではない可能性が生じます。このため、「混合型のインスタンスグループ」向けに予測スケーリングポリシーを作成するときは注意が必要です。容量が同じではない異なるタイプのインスタンスをプロビジョニングできるからです。以下は、予測された容量が不正確になる場合の例です。

    • 予測スケーリングポリシーが CPU 使用率に基づいているのに、各 Auto Scaling インスタンスの vCPU の数がインスタンスタイプに応じて異なる。

    • 予測スケーリングポリシーがネットワークインまたはネットワークアウトに基づいているのに、各 Auto Scaling インスタンスのネットワーク帯域幅のスループットがインスタンスタイプに応じて異なる。例えば、M5 と M5n インスタンスタイプは類似していますが、M5n インスタンスタイプの方が大幅に高いネットワークスループットを提供します。

サポートされるリージョン

Amazon EC2 Auto Scaling は、米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)、米国西部 (北カリフォルニア)、アフリカ (ケープタウン)、カナダ (中部)、欧州 (フランクフルト)、欧州 (アイルランド)、欧州 (ロンドン)、欧州 (ミラノ)、欧州 (パリ)、欧州 (ストックホルム)、アジアパシフィック (香港)、アジアパシフィック (ジャカルタ)、アジアパシフィック (ムンバイ)、アジアパシフィック (大阪)、アジアパシフィック (東京)、アジアパシフィック (シンガポール)、アジアパシフィック (ソウル)、アジアパシフィック (シドニー)、中東 (バーレーン)、南米 (サンパウロ)、中国 (北京)、中国 (寧夏)、および AWS GovCloud (米国西部) の各 AWS リージョンで予測スケーリングポリシーをサポートしています。