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

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

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

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

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

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

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

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

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

インスタンスがウォームアップしている間、動的スケーリングポリシーは、ウォームアップしていないインスタンスのメトリクス値がポリシーのアラーム上限しきい値 (またはターゲット追跡スケーリングポリシーのターゲット利用率) より大きい場合にのみスケールアウトします。需要が高くなる場合は、アプリケーションの可用性を保護するためにスケールインを控えめに実行することがその目的になります。このブロックは、インスタンスのウォームアップが完了するまでスケールインして動的スケーリングを行います。

スケールアウト時には、ウォームアップ中のインスタンスがグループの現在のキャパシティーの一部として考慮され、グループに追加するインスタンス数が決定されます。したがって、複数のアラーム超過によってもステップ調整値の範囲は変わらず、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. [Default instance warmup] (インスタンスのデフォルトウォームアップ) で、アプリケーションに必要なウォームアップ時間を選択します。

  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 に対して独自のウォームアップ時間を持つポリシーがあるかどうかを確認するには、 AWS CLI を使用して以下の describe-policies コマンドを実行します。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 SDKsを使用して AWS CLIスケーリングポリシーを更新できます。このセクションでは、コンソールの手順について説明します。 AWS CLI または AWS SDKsを使用する場合は、既存のポリシー設定を保持し、 EstimatedInstanceWarmupプロパティを削除してください。既存のスケーリングポリシーを更新すると、ポリシーはプログラムで を呼び出すときに指定したポリシーに置き換えられますPutScalingPolicy。元の値は保持されません。

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

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

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

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

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

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