スケールイン中に終了する Auto Scaling インスタンスを制御する
Amazon EC2 Auto Scaling は、終了ポリシーを使用して、スケールインイベント中に最初に終了するインスタンスを決定します。終了ポリシーは、終了するインスタンスを選択するときに Amazon EC2 Auto Scaling で使用される終了基準を定義します。
Auto Scaling グループはデフォルトの終了ポリシーを使用しますが、オプションとして、独自の終了条件に合わせて独自の終了ポリシーを選択または作成することも可能です。これにより、特定のアプリケーションのニーズに基づいてインスタンスを確実に終了させることができます。
Amazon EC2 Auto Scaling により、インスタンスのスケールイン保護も提供されます。この機能を有効にすると、スケールインイベント中にインスタンスが終了するのを防ぎます。インスタンスのスケールイン保護は、Auto Scaling グループを作成する際に有効にできます。また、実行中のインスタンスの設定を変更することもできます。既存の Auto Scaling グループでインスタンスのスケールイン保護を有効にすると、それ以降に起動したすべての新しいインスタンスでは、インスタンスのスケールイン保護が有効になります。
注記
インスタンスのスケールイン保護は、例えば、Amazon EC2 コンソールまたは AWS CLI を使用したインスタンスを手動で終了する場合など、人為的なエラーが発生してもインスタンスが終了しないことを保証するものではありません。インスタンスが誤って終了されないように保護するために、Amazon EC2 終了保護を使用します。ただし、終了保護とインスタンスのスケールイン保護が有効になっている場合でも、ヘルスチェックでインスタンスが異常であると判断された場合、またはグループ自体が誤って削除された場合、インスタンスストレージに保存されたデータが失われる可能性があります。あらゆる環境と同様に、ベスト・プラクティスは、データのバックアップを頻繁に行うこと、またはビジネス継続性要件に適している場合にいつでもバックアップすることです。
目次
終了ポリシーの使用のシナリオ
以下のセクションでは、Amazon EC2 Auto Scaling が終了ポリシーを使用するシナリオについて説明します。
スケールインイベント
スケールインイベントは、グループの現在のキャパシティーよりも低い Auto Scaling グループ の希望するキャパシティーの新しい値がある場合にも発生します。
スケールインイベントは、次のシナリオで発生します。
-
動的スケーリングポリシーを使用し、メトリクス値の変更の結果としてグループのサイズが小さくなる場合
-
スケジュールされたスケーリングを使用し、スケジュールされたアクションの結果としてグループのサイズが小さくなる場合
-
手動でグループのサイズを縮小します。
次に、スケールインイベントがある場合に終了ポリシーを使用する方法の例を示します。
-
この例の Auto Scaling グループには、1 つのインスタンスタイプ、2 つのアベイラビリティーゾーン、2 つのインスタンスの希望するキャパシティーがあるとします。また、リソース使用率の増減時にインスタンスを追加および削除する、動的スケーリングポリシーもあります。このグループの 2 つのインスタンスは、次の図に示すように 2 つのアベイラビリティーゾーンに分散されます。
-
Auto Scaling グループがスケールアウトすると、Amazon EC2 Auto Scaling が新しいインスタンスを起動します。Auto Scaling グループには、次の図に示すように、2 つのアベイラビリティーゾーンに分散された 3 つのインスタンスがあります。
-
Auto Scaling グループがスケールインすると、Amazon EC2 Auto Scaling はインスタンスのいずれかを終了します。
-
グループに特定の終了ポリシーが割り当てられていない場合、Amazon EC2 Auto Scaling はデフォルトの終了ポリシーを使用します。2 つのインスタンスを含むアベイラビリティーゾーンを選択し、最も古い起動テンプレートまたは起動設定から起動されたインスタンスを終了します。インスタンスが同じテンプレートまたは起動設定から起動されている場合、Amazon EC2 Auto Scaling は次の課金時間に最も近いインスタンスを選択して終了します。
インスタンスの更新
Auto Scaling グループのインスタンスを更新するには、インスタンスの更新を開始します。インスタンスの更新中、Amazon EC2 Auto Scaling はグループのインスタンスを終了し、終了したインスタンスの置換インスタンスを起動します。Auto Scaling グループの終了ポリシーは、どのインスタンスを最初に置き換えるかを制御します。
アベイラビリティーゾーンの再調整
Amazon EC2 Auto Scaling は、Auto Scaling グループに対して有効になっているアベイラビリティーゾーン全体でキャパシティーを均等に分散させます。これにより、アベイラビリティーゾーンの停止による影響を軽減できます。アベイラビリティーゾーン間でのキャパシティーの分散のバランスが崩れた場合、Amazon EC2 Auto Scaling は、有効なアベイラビリティーゾーン内でインスタンスが最も少ないインスタンスを起動し、他の場所でインスタンスを終了することによって、Auto Scaling グループを再分散します。終了ポリシーは、最初に終了を優先するインスタンスを制御します。
アベイラビリティーゾーン間でのインスタンスの分散のバランスが崩れる原因はいくつかあります。
- インスタンスの削除
-
Auto Scaling グループからインスタンスをデタッチ、スタンドバイにインスタンスを置くか、インスタンスを明示的に終了して希望するキャパシティーを減らし、代替インスタンスが起動しないようにすると、グループのバランスが崩れる可能性があります。この場合、 Amazon EC2 Auto Scaling は、アベイラビリティーゾーン間のバランスを再度取って不均衡を補います。
- 最初に指定したアベイラビリティーゾーンとは異なるアベイラビリティーゾーンの使用
-
Auto Scaling グループを拡張して追加のアベイラビリティーゾーンを含めるか、使用するアベイラビリティーゾーンを変更した場合、Amazon EC2 Auto Scaling は新しいアベイラビリティーゾーンでインスタンスを起動し、他のゾーンでインスタンスを終了します。これにより、インスタンスがアベイラビリティーゾーンに均等に広がります。
- 可用性の停止
-
可用性の停止はまれにしか発生しません。ただし、1 つのアベイラビリティーゾーンが使用できなくなってから回復すると、Auto Scaling グループでアベイラビリティーゾーン間で不均衡になる可能性があります。Amazon EC2 Auto Scaling はグループを徐々に再分散しようとしますが、再分散すると他のゾーンのインスタンスが終了する可能性があります。
例えば、1 つのインスタンスタイプ、2 つのアベイラビリティーゾーン、2 つのインスタンスの希望するキャパシティーのある Auto Scaling グループがあるとします。1 つのアベイラビリティーゾーンで障害が発生した場合、Amazon EC2 Auto Scaling は正常なアベイラビリティーゾーンで新しいインスタンスを自動的に起動し、異常のあるアベイラビリティーゾーン内のインスタンスを置き換えます。異常なアベイラビリティーゾーンが正常な状態にその後戻ると、Amazon EC2 Auto Scaling はこのゾーンで新しいインスタンスを自動的に起動し、影響を受けないゾーンのインスタンスを終了します。
注記
分散バランスを再調整する場合、Amazon EC2 Auto Scaling は再調整によってアプリケーションのパフォーマンスや可用性が低下しないように、古いインスタンスを終了する前に新しいインスタンスを起動します。
Amazon EC2 Auto Scaling は、古いインスタンスを終了する前に新しいインスタンスの起動を試みるため、指定した最大キャパシティーまたはそれに近い状態になると、再分散アクティビティの処理が遅くなったり、完全に停止する可能性があります。この問題を回避するため、再分散アクティビティの間、グループに対して指定されている最大キャパシティーが一時的に 10% のマージン(または 1 インスタンスのマージンのどちらか大きい方)で増えます。このマージンは、グループが最大キャパシティーに達しているか、それに近い状態であり、ユーザーがゾーンの再設定をリクエストしたため、またはゾーンの可用性の問題を補正するために、グループの再分散が必要な場合にのみ追加されます。この追加キャパシティーは、グループの再分散に要する時間にわたってのみ提供されます。