Amazon EC2 Auto Scaling のスケーリングクールダウン - Amazon EC2 Auto Scaling

Amazon EC2 Auto Scaling のスケーリングクールダウン

Auto Scaling グループは、インスタンスの起動または終了後、クールダウン期間が終了するのを待ってから、シンプルスケーリングポリシーによって開始される追加のスケーリングアクティビティを開始します。クールダウン期間の目的は、以前のアクティビティの効果を確認できるようになる前に、Auto Scaling グループが追加のインスタンスを起動または終了しないようにすることです。

重要

ベストプラクティスとして、シンプルスケーリングポリシーとスケーリングクールダウンを使用しないことをお勧めします。

ほとんどの場合、スケーリングパフォーマンスにより適しているのは、ターゲット追跡スケーリングポリシーまたはステップスケーリングポリシーです。スケーリングメトリクスの値が減少または増加するにつれて Auto Scaling グループのサイズを比例して変更するスケーリングポリシーの場合は、簡易スケーリングまたはステップスケーリングのいずれかでターゲットを追跡することをお勧めします。

例えば、CPU 使用率のシンプルスケーリングポリシーがインスタンスを 2 個起動することを推奨するとします。Amazon EC2 Auto Scaling はインスタンスを 2 個起動してから、クールダウン期間が終了するまでスケーリングアクティビティを一時停止します。シンプルスケーリングポリシーによって開始されたスケーリングアクティビティを再開できるのは、このクールダウン期間の終了後になります。CPU 使用率がアラーム上限しきい値を再度超過すると、Auto Scaling グループが再度スケールアウトし、クールダウン期間も再度有効になります。ただし、メトリクス値を低減させるためには 2 個のインスタンスで十分であった場合、グループは現行のサイズのままになります。

考慮事項

以下の考慮事項は、シンプルスケーリングポリシーとスケーリングクールダウンの使用時に適用されます。

  • ターゲット追跡ポリシーとステップスケーリングポリシーは、クールダウン期間の終了を待つことなく、ただちにスケールアウトアクティビティを開始できます。その代わり、Auto Scaling グループがインスタンスを起動するときは、常に個々のインスタンスにウォームアップ期間が設定されます。詳細については、「Auto Scaling グループに対するインスタンスのデフォルトウォームアップを設定する」を参照してください。

  • スケジュールされたアクションがスケジュールされた時刻に開始されるときも、クールダウン期間の終了を待つことなく、ただちにスケーリングアクティビティを開始できます。

  • インスタンスが異常になった場合、Amazon EC2 Auto Scaling はクールダウン期間の終了を待たずに異常なインスタンスを置き換えます。

  • 複数のインスタンスが起動または終了される場合は、最後のインスタンスの起動または終了が完了した時点でクールダウン期間 (デフォルトのクールダウンまたはスケーリングポリシー固有のクールダウン) が実施されます。

  • Auto Scaling グループを手動でスケールするときは、クールダウンの終了を待たないことがデフォルトになります。ただし、AWS CLI または SDK を使用して手動でスケールするときは、この動作を上書きして、デフォルトクールダウンを実施することができます。

  • デフォルトで、Elastic Load Balancing は登録解除 (Connection Draining) プロセスが完了するまで 300 秒間待機します。グループが Elastic Load Balancing ロードバランサーの背後にある場合は、クールダウン期間を開始する前に、終了されるインスタンスが登録解除されるのを待ちます。

追加の遅延を発生させるライフサイクルフック

ライフサイクルフックが呼び出される場合、クールダウン期間はライフサイクルアクションの完了後、またはタイムアウト期間の終了後に開始されます。例えば、インスタンス起動用のライフサイクルフックがある Auto Scaling グループについて考えてみましょう。アプリケーションで需要の増加が生じると、グループは容量を追加するためにインスタンスを起動します。ライフサイクルフックが存在することから、インスタンスは待機状態になり、シンプルスケーリングポリシーによるスケーリングアクティビティは一時停止されます。インスタンスが InService 状態になると、クールダウン期間が開始します。クールダウン期間が終了すると、シンプルスケーリングポリシーのアクティビティが再開されます。

Elastic Load Balancing が有効化されているときは、スケールインにおいて、終了されているインスタンスが Connection Draining (登録解除遅延) を終了するときにクールダウン期間が開始されます。フック期間の待機は行われません。つまり、シンプルスケーリングポリシーによるスケーリングアクティビティは、スケールインイベントの結果がグループの容量に反映され次第再開できることになります。これ以外の場合は、3 つのアクティビティ (Connection Draining、ライフサイクルフック、およびクールダウン期間) のすべてが完了するまで待機することになり、Auto Scaling グループがスケーリングを一時停止しなければならない時間が大幅に長くなります。

デフォルトのクールダウン期間を変更する

Amazon EC2 Auto Scaling コンソールで Auto Scaling グループを初めて作成するときにデフォルトクールダウンを設定することはできません。デフォルトで、このクールダウン期間は 300 秒 (5 分) に設定されています。これは、グループの作成後に必要に応じて更新できます。

デフォルトのクールダウン期間を変更する (コンソール)

Auto Scaling グループの作成後、[Details] (詳細) タブの [Advanced configurations] (高度な設定) で [Edit] (編集) を選択します。[Default cooldown] (デフォルトのクールダウン) で、インスタンスの起動時間やその他のアプリケーションニーズに基づいて、希望する時間を選択します。

デフォルトのクールダウン期間を変更する (AWS CLI)

以下のコマンドを使用して、新しい、または既存の Auto Scaling グループのデフォルトのクールダウンを変更します。デフォルトのクールダウンが定義されていない場合は、デフォルト値の 300 秒が使用されます。

デフォルトのクールダウンの値を確認するには、describe-auto-scaling-groups コマンドを使用します。

特定のシンプルスケーリングポリシーにクールダウン期間を設定する

デフォルトで、すべてのシンプルスケーリングポリシーは Auto Scaling グループに定義されているデフォルトのクールダウン期間を使用します。特定のシンプルスケーリングポリシーにクールダウン期間を設定するには、ポリシーを作成または更新するときに、オプションのクールダウンパラメータを使用します。ポリシーにクールダウン期間を指定すると、デフォルトのクールダウンが上書きされます。

スケーリングポリシー固有のクールダウン期間の一般的な用途の 1 つに、スケールインポリシーとの使用があります。このポリシーはインスタンスを削除するため、Amazon EC2 Auto Scaling が追加のインスタンスを削除するかどうかを判断するために必要な時間が減ります。インスタンスを終了するオペレーションは、インスタンスを起動するよりもはるかに高速です。したがって、デフォルトのクールダウン期間である 300 秒は長すぎます。この場合、スケールインポリシーの値をより短くしたスケーリングポリシー固有のクールダウン期間は、グループがより迅速にスケールインできるようにすることで、コストの削減に役立ちます。

コンソールでシンプルスケーリングポリシーを作成または更新するには、グループの作成後に [Automatic scaling] (自動スケーリング) タブを選択します。AWS CLI を使用してシンプルスケーリングポリシーを作成または更新するには、put-scaling-policy コマンドを使用します。詳細については、「ステップスケーリングポリシーおよび簡易スケーリングポリシー」を参照してください。