Auto Scaling グループに対するインスタンスのデフォルトウォームアップを設定する - Amazon EC2 Auto Scaling

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

Auto Scaling グループに対するインスタンスのデフォルトウォームアップを設定する

CloudWatch は、Auto Scaling インスタンス全体で CPU やネットワーク I/O などの使用状況データを収集して集計します。これらのメトリクスを使用して、選択したメトリクスの値の増減に応じて Auto Scaling グループ内にあるインスタンスの数を調整するスケーリングポリシーを作成します。

インスタンスが待機InService状態になってから、使用状況データを集約されたメトリクスに提供するまでの時間を指定できます。この指定された時間は、デフォルトのインスタンスウォームアップ と呼ばれます。これにより、アプリケーショントラフィックをまだ処理しておらず、コンピューティングリソースの使用率が一時的に高まっている可能性のある個々のインスタンスのメトリクスによる動的スケーリングの影響を受けなくなります。

ターゲット追跡ポリシーとステップスケーリングポリシーのパフォーマンスを最適化するには、デフォルトのインスタンスウォームアップを有効にして設定することを強くお勧めします。デフォルトでは有効または設定されていません。

デフォルトのインスタンスウォームアップを有効にするときは、Auto Scaling グループがインスタンスメンテナンスポリシーを使用するように設定されている場合、またはインスタンスの更新を使用してインスタンスを置き換える場合、初期化が完了する前にインスタンスが最小の正常な割合にカウントされないようにできます。

パフォーマンスのスケーリングに関する考慮事項

ほとんどのアプリケーションでは、機能ごとに異なるウォームアップ時間ではなく、すべての機能に適用されるデフォルトのインスタンスウォームアップ時間を 1 つ持つと便利です。例えば、デフォルトのインスタンスウォームアップを設定しない場合、インスタンスの更新機能はヘルスチェックの猶予期間をデフォルトのウォームアップ時間として使用します。ターゲット追跡ポリシーとステップスケーリングポリシーがある場合は、デフォルトのクールダウンに設定された値をデフォルトのウォームアップ時間として使用します。予測スケーリングポリシーがある場合、デフォルトのウォームアップ時間はありません。

インスタンスのウォームアップ中、動的スケーリングポリシーは、ウォームアップしていないインスタンスのメトリクス値がポリシーのアラーム上限しきい値 (またはターゲット追跡スケーリングポリシーのターゲット使用率) より大きい場合にのみスケールアウトします。需要が減少すると、動的スケーリングはアプリケーションの可用性を保護するためにより保守的になります。これにより、新しいインスタンスのウォームアップが完了するまで、動的スケーリングのスケールインアクティビティがブロックされます。

スケールアウト中、Amazon EC2 Auto Scaling は、グループに追加するインスタンスの数を決定するときに、ウォームアップ中のインスタンスをグループの容量の一部として考慮します。したがって、同様の容量を追加する必要がある複数のアラーム違反が発生すると、1 つのスケーリングアクティビティが発生します。その目的は、過剰にスケールアウトすることなく、継続的にスケールアウトすることです。

デフォルトのインスタンスウォームアップが有効になっていない場合、メトリクスを に送信 CloudWatch して現在の容量にカウントするまでのインスタンスの待機時間は、インスタンスごとに異なります。したがって、スケーリングポリシーが、実際に発生しているワークロードと比較して、予測不能に実行される可能性があります。

例えば、反復的な on-and-off ワークロードパターンを持つアプリケーションを考えてみましょう。予測スケーリングポリシーを使用して、インスタンス数を増やすかどうかを繰り返し決定します。予測スケーリングポリシーにはデフォルトのウォームアップ時間がないため、インスタンスは集約されたメトリクスにすぐに寄与し始めます。これらのインスタンスの起動時のリソース使用量が多い場合、インスタンスを追加すると、集約されたメトリックスが急増する可能性があります。使用量が安定するまでにかかる時間によっては、これらの指標を使用する動的スケーリングポリシーに影響する可能性があります。動的スケーリングポリシーのアラーム上限しきい値を超えると、グループのサイズは再び大きくなります。新しいインスタンスがウォームアップしている間、スケールインアクティビティはブロックされます。

デフォルトのインスタンスウォームアップ時間を選択する

デフォルトのインスタンスのウォームアップを設定する上で重要なのは、インスタンスが InService の状態に達した後、初期化を終了し、リソースの消費が安定するまでに必要な時間を決定することです。インスタンスのウォームアップ時間を選択するときは、正当なトラフィックの使用状況データの収集と、起動時の一時的な使用量の急増に関連するデータ収集の最小化の間で最適なバランスを取るようにしてください。

Auto Scaling グループが Elastic Load Balancing ロードバランサーにアタッチされているとします。新しいインスタンスが起動を完了すると、InService 状態に入る前にロードバランサーに登録されます。インスタンスが InService 状態になった後も、リソースの消費は引き続き一時的に急増する場合があり、安定化する時間が必要です。例えば、大量のアセットをダウンロードしてキャッシュする必要があるアプリケーションサーバーのリソース消費が安定するまでにかかる時間は、ダウンロードする大量のアセットがない軽量のウェブサーバーよりも長くなります。インスタンスのウォームアップは、リソース消費の安定化に必要な遅延時間を提供します。

重要

ウォームアップ時間に必要な時間がわからない場合は、300 秒から始めることができます。次に、アプリケーションに最適なスケーリングパフォーマンスが得られるまで、徐々に減らすか、増やします。正しく処理するには、これを数回実行する必要がある場合があります。または、独自のウォームアップ時間 (EstimatedInstanceWarmup) を持つスケーリングポリシーがある場合は、この値を使用して開始できます。詳細については、「以前にインスタンスのウォームアップ時間を設定してスケーリングポリシーを検索する」を参照してください。

起動時に実行する設定タスクまたはスクリプトがあるユースケースでは、ライフサイクルフックの使用を検討してください。ライフサイクルフックは、新しいインスタンスが初期化が完了するまで稼働を停止する可能性があります。ライフサイクルフックは特に、完了に時間がかかるブートストラップスクリプトがある場合に便利です。ライフサイクルフックを追加すると、デフォルトのインスタンスウォームアップの値を減らすことができます。ライフサイクルフック使用の詳細については、「Amazon EC2 Auto Scaling のライフサイクルフック」を参照してください。

グループに対するインスタンスのデフォルトウォームアップを有効にする

インスタンスのデフォルトウォームアップは、Auto Scaling グループの作成時に有効化できます。既存のグループに対して有効化することも可能です。

デフォルトのインスタンスウォームアップ機能を有効にすると、次の機能のウォームアップパラメータの値を指定する必要がなくなります。

Console
新しいグループに対してインスタンスのデフォルトウォームアップを有効にする (コンソール)

Auto Scaling グループを作成するときに、[Configure advanced options] (詳細オプションを設定) ページの [Additional settings] (追加設定)で、[Enable default instance warmup] (インスタンスのデフォルトウォームアップを有効にする) オプションを選択します。アプリケーションに必要なウォームアップ時間を選択します。

AWS CLI
新しいグループに対してインスタンスのデフォルトウォームアップを有効にする (AWS CLI)

Auto Scaling グループに対してインスタンスのデフォルトウォームアップを有効にするには、--default-instance-warmup オプションを追加して、0 から 3600 までの値 (秒単位) を指定します。-1 の値は、有効化後にこの設定をオフにします。

以下の create-auto-scaling-group コマンドは、my-asg という名前の Auto Scaling グループを作成し、120 秒の値でインスタンスのデフォルトウォームアップを有効にします。

aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --default-instance-warmup 120 ...
ヒント

このコマンドでエラーが発生した場合は、 を AWS CLI ローカルで最新バージョンに更新していることを確認してください。

Console
既存のグループに対してインスタンスのデフォルトウォームアップを有効にする (コンソール)
  1. https://console.aws.amazon.com/ec2/ でAmazon EC2 コンソールを開き、ナビゲーションペインで [Auto Scaling グループ] を選択します。

  2. 画面の上部のナビゲーションバーで、Auto Scaling グループを作した AWS リージョン を選択します。

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

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

  4. [詳細] タブで、[高度な設定]、[編集] の順に選択します。

  5. デフォルトのインスタンスウォームアップ で、アプリケーションに必要なウォームアップ時間を選択します。

  6. [更新] を選択します。

AWS CLI
既存のグループに対してインスタンスのデフォルトウォームアップを有効にする (AWS CLI)

以下の例は、update-auto-scaling-group コマンドを使用して、my-asg という名前の既存の Auto Scaling グループに対し、120 秒の値でインスタンスのデフォルトウォームアップを有効にします。

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --default-instance-warmup 120
ヒント

このコマンドでエラーが発生した場合は、 を AWS CLI ローカルで最新バージョンに更新していることを確認してください。

グループに対するインスタンスのデフォルトウォームアップを検証する

Auto Scaling グループに対するインスタンスのデフォルトウォームアップを検証する (AWS CLI)

次の describe-auto-scaling-groups コマンドを使用します。my-asg を Auto Scaling グループの名前に置き換えます。

aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

以下に、応答の例を示します。

{ "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "AutoScalingGroupARN": "arn", ... "DefaultInstanceWarmup": 120 } ] }

以前にインスタンスのウォームアップ時間を設定してスケーリングポリシーを検索する

に独自のウォームアップ時間を持つポリシーがあるかどうかを特定するにはEstimatedInstanceWarmup、 を使用して次の describe-policies コマンドを実行します AWS CLI。my-asg を Auto Scaling グループの名前に置き換えます。

aws autoscaling describe-policies --auto-scaling-group-name my-asg --query 'ScalingPolicies[?EstimatedInstanceWarmup!=`null`]'

以下は出力例です。

[ { "AutoScalingGroupName":"my-asg", "PolicyName":"cpu50-target-tracking-scaling-policy", "PolicyARN":"arn", "PolicyType":"TargetTrackingScaling", "StepAdjustments":[], "EstimatedInstanceWarmup":120, "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" }], "TargetTrackingConfiguration":{ "PredefinedMetricSpecification":{ "PredefinedMetricType":"ASGAverageCPUUtilization" }, "TargetValue":50.0, "DisableScaleIn":false }, "Enabled":true }, ... additional policies ... ]

以前に設定したスケーリングポリシーのインスタンスウォームアップをクリアする

インスタンスのデフォルトウォームアップを有効にした後、まだウォームアップ時間があるスケーリングポリシーを更新して、以前に設定した値をクリアします。そうしないと、デフォルトのインスタンスウォームアップがオーバーライドされます。

スケーリングポリシーは、コンソール、 AWS CLI、または AWS SDKsを使用して更新できます。このセクションでは、コンソールの手順について説明します。 AWS CLI または AWS SDKsを使用する場合は、既存のポリシー設定を保持し、 EstimatedInstanceWarmupプロパティを削除してください。既存のスケーリングポリシーを更新すると、ポリシーは、プログラムでポリシー を呼び出すときに指定したポリシーに置き換えられますPutScaling。元の値は保持されません。

以前に設定したスケーリングポリシーのインスタンスウォームアップをクリアする
  1. https://console.aws.amazon.com/ec2/ でAmazon EC2 コンソールを開き、ナビゲーションペインで [Auto Scaling グループ] を選択します。

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

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

  3. [自動スケーリング] タブの [動的スケーリングポリシー] で、目的のポリシーを選択し、[アクション]、[編集] を選択します。

  4. インスタンスウォームアップ では、代わりにデフォルトのインスタンスウォームアップ値を使用するには、インスタンスウォームアップ値をクリアします。

  5. [更新] を選択します。