Auto Scaling グループに対するインスタンスのデフォルトウォームアップを設定する
CloudWatch は、Auto Scaling インスタンス全体で CPU やネットワーク I/O などの使用状況データを収集し、集計します。これらのメトリクスを使用して、選択したメトリクスの値の増減に応じて Auto Scaling グループ内にあるインスタンスの数を調整するスケーリングポリシーを作成します。
デフォルトのインスタンスウォームアップでは、インスタンスが InService
状態になってから、集約されたメトリクスに使用状況データを提供するまでの待機時間を指定できます。これは、アプリケーショントラフィックの処理をまだ行っておらず、コンピューティングリソースの使用率が一時的に高くなっている可能性がある個々のインスタンスのメトリクスが、動的スケーリングに影響しないようにします。
インスタンスのデフォルトウォームアップは、デフォルトで設定および有効化されていません。ターゲットトラッキングとステップスケーリングポリシーのパフォーマンスを最適化するには、デフォルトのインスタンスウォームアップを有効にすることを強くお勧めします。
デフォルトのインスタンスのウォームアップは、スケーリングのパフォーマンスに影響するだけでなく、インスタンスの更新やインスタンスの最大存続期間などの機能でインスタンスを置き換えるのに必要となる全体的な時間にも影響します。
目次
パフォーマンスのスケーリングに関する考慮事項
ほとんどのアプリケーションでは、機能ごとに異なるウォームアップ時間を設けるよりも、1 つのデフォルトインスタンスのウォームアップ時間をすべての機能に適用するほうが便利です。例えば、デフォルトのインスタンスウォームアップを設定しない場合、インスタンスの更新機能はデフォルトのウォームアップ時間としてヘルスチェックの猶予期間を使用します。ターゲットトラッキングとステップスケーリングポリシーがある場合は、デフォルトのクールダウンに設定された値をデフォルトのウォームアップ時間として使用します。予測スケーリングポリシーがある場合、デフォルトのウォームアップ時間はありません。
インスタンスがウォームアップしている間、動的スケーリングポリシーは、ウォームアップしていないインスタンスのメトリクス値がポリシーのアラーム上限しきい値 (またはターゲット追跡スケーリングポリシーのターゲット利用率) より大きい場合にのみスケールアウトします。需要が高くなる場合は、アプリケーションの可用性を保護するためにスケールインを控えめに実行することがその目的になります。このブロックは、インスタンスのウォームアップが完了するまでスケールインして動的スケーリングを行います。
スケールアウト時には、ウォームアップ中のインスタンスがグループの現在のキャパシティーの一部として考慮され、グループに追加するインスタンス数が決定されます。したがって、複数のアラーム超過によってもステップ調整値の範囲は変わらず、1 つのスケーリングアクティビティという結果になります。その目的は、スケールアウトを継続的に (ただし過剰になることなく) 行うことです。詳細については、ステップスケーリングトピックの インスタンスのウォームアップ セクションを参照してください。
デフォルトのインスタンスウォームアップが有効になっていない場合、メトリクスを CloudWatch に送信して現在のキャパシティーにカウントするまでのインスタンスの待機時間は、インスタンスごとに異なります。その場合、実際に発生しているワークロードからは、予期せずスケーリングポリシーが実行される可能性があります。
例えば、オンとオフのワークロードパターンが繰り返されるアプリケーションを考えてみましょう。予測スケーリングポリシーを使用して、インスタンス数を増やすかどうかを繰り返し決定します。予測スケーリングポリシーにはデフォルトのウォームアップ時間がないため、インスタンスは集約されたメトリックスにすぐに貢献し始めます。これらのインスタンスの起動時のリソース使用量が多い場合、インスタンスを追加すると、集約されたメトリックスが急増する可能性があります。使用量が安定するまでにかかる時間によっては、これらの指標を使用する動的スケーリングポリシーに影響する可能性があります。動的スケーリングポリシーのアラーム上限しきい値を超えると、グループのサイズは再び大きくなります。新しいインスタンスがウォームアップしている間、スケールインアクティビティはブロックされます。
デフォルトのインスタンスのウォームアップ時間を選択する
デフォルトのインスタンスのウォームアップを設定する上で重要なのは、インスタンスが InService
の状態に達した後、初期化を終了し、リソースの消費が安定するまでに必要な時間を決定することです。インスタンスのウォームアップ時間を選択するときは、正当なトラフィックの使用状況データを収集しつつ、スタートアップ時の一時的な使用量の急増に関連するデータ収集を最小限に抑えるという最適なバランスを目指します。
Auto Scaling グループが Elastic Load Balancing ロードバランサーにアタッチされているとします。新しいインスタンスが起動を完了すると、InService
状態に入る前にロードバランサーに登録されます。インスタンスが InService
状態になった後も、リソースの消費は引き続き一時的に急増する場合があり、安定化する時間が必要です。例えば、大量のアセットをダウンロードしてキャッシュする必要があるアプリケーションサーバーのリソース消費が安定するまでにかかる時間は、ダウンロードする大量のアセットがない軽量のウェブサーバーよりも長くなります。インスタンスのウォームアップは、リソース消費の安定化に必要な遅延時間を提供します。
重要
どれだけの時間が必要かわからない場合は、まず 300 秒から始めて、アプリケーションに最適なスケーリングパフォーマンスが得られるまで徐々に減らしたり増やしたりすることができます。正しい設定を行うには、実験が必要な場合があります。あるいは、独自のウォームアップ時間 (EstimatedInstanceWarmup
) が設定されているスケーリングポリシーがある場合は、この値を使用して開始することもできます。詳細については、「事前に設定されたインスタンスのウォームアップ時間を含むスケーリングポリシーを検索する」を参照してください。
グループがライフサイクルフックを使用しているかどうかによっては、ウォームアップ時間を短くできる場合があります。
次の場合、 | THEN |
---|---|
Auto Scaling グループには、初期化が完了するまでインスタンスの稼働を遅らせるライフサイクルフックがあります。 | デフォルトのインスタンスウォームアップを短時間に設定できます。 |
Auto Scaling グループには、サービスを開始する前にインスタンスを初期化するライフサイクルフックはありません。 | デフォルトのインスタンスウォームアップには、インスタンスが初期化を完了するのに必要な時間を含めて、より長い時間を指定できます。 |
グループに対するインスタンスのデフォルトウォームアップを有効にする
インスタンスのデフォルトウォームアップは、Auto Scaling グループの作成時に有効化できます。既存のグループに対して有効化することも可能です。
デフォルトのインスタンスウォームアップ機能を有効にすると、以下の機能のウォームアップパラメータに値を指定する必要がなくなります
グループに対するインスタンスのデフォルトウォームアップを検証する
Auto Scaling グループに対するインスタンスのデフォルトウォームアップを検証する (AWS CLI)
describe 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":"cpu40-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":40.0,
"DisableScaleIn":false
},
"Enabled":true
},
... additional policies ...
]
以前に設定したスケーリングポリシーのインスタンスウォームアップをクリアする
デフォルトのインスタンスウォームアップを有効にしたら、まだウォームアップ時間が残っているスケーリングポリシーを更新して、以前に設定した値をクリアします。そうしないと、デフォルトのインスタンスウォームアップがオーバーライドされます。
スケーリングポリシーは、コンソール AWS CLI または AWS SDK を使用して更新できます。このセクションでは、コンソールの手順について説明します。AWS CLI または AWS SDK を使用する場合は、必ず既存のポリシー設定を保存し、EstimatedInstanceWarmup
プロパティは削除します。既存のスケーリングポリシーを更新すると、そのポリシーは、プログラムで PutScalingPolicy を呼び出すときに指定したものに置き換えられます。元の値は保持されません。
以前に設定したスケーリングポリシーのインスタンスウォームアップをクリアする
https://console.aws.amazon.com/ec2/
でAmazon EC2 コンソールを開き、ナビゲーションペインで [Auto Scaling グループ] を選択します。 -
Auto Scaling グループの横にあるチェックボックスを選択します。
ページの下部にスプリットペインが開きます。
-
[自動スケーリング] タブの [動的スケーリングポリシー] で、目的のポリシーを選択し、[アクション]、[編集] を選択します。
-
インスタンスが必要な場合は、インスタンスのウォームアップ値をクリアして、代わりにデフォルトのインスタンスウォームアップ値を使用してください。
-
[更新] を選択します。