Auto Scaling インスタンスのヘルスチェック - Amazon EC2 Auto Scaling

Auto Scaling インスタンスのヘルスチェック

Auto Scaling インスタンスのヘルスステータスは、正常または異常のどちらかを示します。Auto Scaling グループ内のすべてのインスタンスは正常な状態でスタートします。インスタンスに異常があるという通知を Amazon EC2 Auto Scaling が受け取らない限り、インスタンスは正常であると見なされます。この通知は、Amazon EC2、Elastic Load Balancing、またはカスタムヘルスチェックなどのソースから送られる可能性があります。Amazon EC2 Auto Scaling が異常なインスタンスを検出すると、そのインスタンスを終了して新しいインスタンスを起動します。

ヘルスチェックタイプ

Amazon EC2 Auto Scaling は、以下のヘルスチェックの 1 つ、または複数を使用することで、インスタンスのヘルスステータスを判別できます。

ヘルスチェックタイプ チェックする事柄

Amazon EC2 ステータスチェックと予定されているイベント

  • インスタンスが実行中であることをチェックします。

  • ハードウェアまたはソフトウェアの根本的な問題で、インスタンスの機能を損なう可能性があるものをチェックします。

これは、Auto Scaling グループに対するデフォルトのヘルスチェックタイプです。

Elastic Load Balancing のヘルスチェック

  • ロードバランサーがインスタンスを正常として報告しているかどうかをチェックして、インスタンスがリクエストを処理できることを確認します。

このヘルスチェックタイプを実行するには、Auto Scaling グループに対してこのタイプを有効にする必要があります。

カスタムヘルスチェック

  • カスタムヘルスチェックに従って、インスタンスのヘルス問題を示す可能性のあるその他の問題をチェックします。

Amazon EC2 ヘルスチェック

インスタンスが起動されると、インスタンスは Auto Scaling グループにアタッチされ、InService 状態になります。Auto Scaling グループ内のインスタンスの異なるライフサイクル状態に関する詳細については、「Amazon EC2 Auto Scaling インスタンスのライフサイクル」を参照してください。

Amazon EC2 Auto Scaling は、Auto Scaling グループ内のすべてのインスタンスのヘルスステータスを定期的にチェックすることで、それらが実行中で良好な状態であることを確認します。

ステータスチェック

Amazon EC2 Auto Scaling は、Amazon EC2 インスタンスのステータスチェックとシステムステータスチェックの結果を使用して、インスタンスのヘルスステータスを判断します。インスタンスが running 以外の Amazon EC2 状態である場合、またはステータスチェックのステータスが impaired になった場合、Amazon EC2 Auto Scaling はインスタンスを異常であると見なし、そのインスタンスを置き換えます。これには、インスタンスが以下のいずれかの状態にある場合が含まれます。

  • stopping

  • stopped

  • shutting-down

  • terminated

Amazon EC2 ステータスチェックに特別な設定は必要なく、常に有効になっています。詳細については、「Amazon EC2 Linux インスタンス用 ユーザーガイド」の「ステータスチェックのタイプ」を参照してください。

重要

Amazon EC2 Auto Scaling は、何のアクションも実行せずにステータスチェックを不合格にすることがあります。ステータスチェックが不合格になると、Amazon EC2 Auto Scaling は AWS が問題を解決するまで数分待機します。ステータスチェックのステータスが impaired になっても、インスタンスはただちに異常としてマークされません。

ただし、インスタンスが running 状態ではなくなったことを Amazon EC2 Auto Scaling が検出すると、この状況は即時不合格として扱われます。この場合、インスタンスは直ちに異常としてマークされ、置き換えられます。

予定されているイベント

Amazon EC2 は、インスタンスのイベントを、特定のタイムスタンプ後に実行されるようにスケジュールすることがあります。詳細については、「Amazon EC2 Linux インスタンス用ユーザーガイド」の「インスタンスの予定されたイベント」を参照してください。

インスタンスのいずれかが予定されているイベントの影響を受ける場合、Amazon EC2 Auto Scaling は、そのインスタンスを異常と見なして置き換えます。インスタンスの終了は、タイムスタンプで指定された日付と時刻に到達するまで開始されません。

Elastic Load Balancing のヘルスチェック

Auto Scaling グループに対して Elastic Load Balancing ヘルスチェックを有効にすると、Amazon EC2 Auto Scaling はこれらのヘルスチェックの結果を使用して、インスタンスのヘルスステータスを判断することができます。

Auto Scaling グループに対して Elastic Load Balancing ヘルスチェックを有効にする前に、以下を行う必要があります。

  • Elastic Load Balancing ロードバランサーをセットアップし、ロードバランサーがインスタンスの正常性を判断するために使用するヘルスチェックを設定する。

  • Auto Scaling グループにロードバランサーをアタッチする。

上記のアクションを完了したら、以下が行われます。

  • Amazon EC2 Auto Scaling が、Auto Scaling グループ内のインスタンスをロードバランサーに登録します。

  • インスタンスの登録が終了すると、インスタンスは InService 状態になり、ロードバランサーで使用できるようになります。

デフォルトで、Amazon EC2 Auto Scaling は Elastic Load Balancing ヘルスチェックの結果を無視しますが、これらのヘルスチェックは Auto Scaling グループに対して有効にすることができます。これらのヘルスチェックを有効化し、Elastic Load Balancing が登録されたインスタンスを unhealthy として報告すると、Amazon EC2 Auto Scaling は、次回の定期ヘルスチェックでそのインスタンスを unhealthy としてマークし、置き換えます。

ロードバランサーに対して Connection Draining が有効になっている場合、Amazon EC2 Auto Scaling は、処理中のリクエストが完了するまで、または最大タイムアウト時間が終了するまで待機してから、異常なインスタンスを終了します。

Auto Scaling グループに対して Elastic Load Balancing ヘルスチェックを有効にする方法の詳細については、「Auto Scaling グループに Elastic Load Balancing ヘルスチェックを追加する」を参照してください。

注記

グループに対して Elastic Load Balancing ヘルスチェックを有効にすると、Amazon EC2 Auto Scaling は異常として報告されたインスタンスを終了して置き換えることができますが、これらはロードバランサーが InService 状態になるまで行われません。詳細については、「ロードバランサーのアタッチメントステータスについて」を参照してください。

カスタムヘルス検出タスク

Auto Scaling グループ内のインスタンスに対してカスタムヘルス検出タスクを実行して、タスクが失敗する場合はインスタンスのヘルスステータスを異常として設定したい場合もあります。これは、カスタムヘルスチェック、Amazon EC2 ステータスチェック、および Elastic Load Balancing ヘルスチェック (有効になっている場合) の組み合わせを使用することで、ヘルスチェックを拡張します。

インスタンスのヘルス情報は、AWS CLI または SDK を使用して Amazon EC2 Auto Scaling に直接送信することができます。次の例は、AWS CLI を使用してインスタンスのヘルス状態を設定し、インスタンスのヘルス状態を確認する方法を示しています。

次の set-instance-health コマンドを使用して、指定されたインスタンスのヘルス状態を Unhealthy に設定します。

aws autoscaling set-instance-health --instance-id i-1234567890abcdef0 --health-status Unhealthy

次の describe-auto-scaling-groups コマンドを使用して、インスタンスの状態が Unhealthy であることを確認します。

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

次に示すのは、インスタンスのヘルスステータスが Unhealthy であり、インスタンスが終了中であることを示す応答の例です。

{ "AutoScalingGroups": [ { .... "Instances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-1234567890abcdef0" }, "InstanceId": "i-1234567890abcdef0", "HealthStatus": "Unhealthy", "LifecycleState": "Terminating" }, ... ] } ] }

異常なインスタンスの置き換え

Amazon EC2 Auto Scaling が InService インスタンスを異常であると判断すると、インスタンスが終了されると同時に、新しい代替インスタンスが起動されます。新しいインスタンスは、Auto Scaling グループの現在の設定、およびそれに関連する起動テンプレートまたは起動設定を使用して起動します。

Amazon EC2 Auto Scaling により、異常があるインスタンスを終了する新しいスケーリングアクティビティが作成され、異常があるインスタンスが終了されます。インスタンスの終了中、別のスケーリングアクティビティが新しいインスタンスを起動します。

ヘルスチェックの失敗の理由を表示するには (コンソール)

  1. https://console.aws.amazon.com/ec2/ でAmazon EC2 コンソールを開き、ナビゲーションペインで [Auto Scaling グループ] を選択します。

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

    [Auto Scaling groups] (Auto Scaling グループ) ページの下部にスプリットペインが開きます。

  3. [Activity (アクティビティ)] タブの [Activity history (アクティビティ履歴)] の下の [Status (ステータス)] 列に、Auto Scaling グループがインスタンスを正常に起動したか、終了したかが表示されます。

    正常でないインスタンスを終了した場合、原因列には、終了の日時、およびヘルスチェックが失敗した理由が表示されます。例えば、At 2022-05-14T20:11:53Z an instance was taken out of service in response to an ELB system health check failure です。

Amazon EC2 Auto Scaling によってダウンタイムが最小限に抑えられる仕組み

ヘルスチェックの置き換えでは、最初にインスタンスが終了される必要があります。そのため、新しいインスタンスが起動するまでは、新しいリクエストが受け入れられない可能性があります。

Amazon EC2 Auto Scaling は、どのインスタンスも実行されていないこと、または set-instance-health コマンドで異常とマークされたことを認識すると、それらを直ちに置き換えます。ただし、他のインスタンスが異常である場合、Amazon EC2 Auto Scaling は不合格状態からの回復に以下のアプローチを使用します。このアプローチは、一時的な問題、または誤設定されたヘルスチェックが原因で発生する可能性があるダウンタイムを最小限に抑えます。

  • スケーリングアクティビティが進行中で、Auto Scaling グループの容量が希望容量を 10% 以上下回っている場合、Amazon EC2 Auto Scaling は、進行中のスケーリングアクティビティの終了を待ってから、異常なインスタンスを置き換えます。

  • スケールアウト時、Amazon EC2 Auto Scaling はインスタンスが最初のヘルスチェックに合格するのを待ちます。また、デフォルトのインスタンスウォームアップが完了するのを待って、新しいインスタンスの準備が整っていることも確実にします。

  • インスタンスがウォームアップを完了し、グループの容量が希望容量の 90% を超えると、Amazon EC2 Auto Scaling は以下のように異常なインスタンスを置き換えます。

    • Amazon EC2 Auto Scaling が一度に置き換えるインスタンスはグループの希望容量の最大 10% のみで、異常なインスタンスのすべてが置き換えられるまで続行されます。

    • インスタンスを置き換えるときは、新しいインスタンスが最初のヘルスチェックに合格するのを待ちます。また、デフォルトのインスタンスウォームアップが完了するのも待ち、完了後に続行します。

注記

Auto Scaling グループのサイズが、結果として得られる 10% の値が 1 未満になるほど 小さい場合、Amazon EC2 Auto Scaling は異常なインスタンスを一度に 1 つずつ置き換えます。これは、グループのダウンタイムの原因になる可能性があります。

また、Auto Scaling グループ内のすべてのインスタンスが異常であると Elastic Load Balancing ヘルスチェックが報告し、ロードバランサーが InService 状態である場合、Amazon EC2 Auto Scaling は一度に異常としてマークするインスタンス数を減らすことがあります。そうすることで、他のシナリオに適用される 10% よりも、一度に置き換えられるインスタンスの数を大幅に削減することができます。これは、Amazon EC2 Auto Scaling がグループ全体を自動的に終了することなく、問題に対処する時間を提供します。

ヘルスチェックの考慮事項

このセクションでは、Amazon EC2 Auto Scaling ヘルスチェックに関する考慮事項について説明します。

  • 終了処理中のインスタンス、または起動中のインスタンスで何かを実行する必要がある場合は、ライフサイクルフックを使用することができます。これらのフックを使用すると、Amazon EC2 Auto Scaling がインスタンスを起動または終了する時点で、カスタムアクションを実行できます。詳細については、「Amazon EC2 Auto Scaling のライフサイクルフック」を参照してください。

  • 新しいインスタンスが、ヘルスチェックの失敗が原因で終了されることなく、リクエストの受け入れを開始する準備を整えるために十分な時間を提供するには、以下のいずれかまたは両方を実行します。

    • ライフサイクルフックをグループに追加します。これは、ライフサイクルフックの最後にサービスに配置されるインスタンスが完全に設定されていることを確認するのに役立ちます。詳細については、「Amazon EC2 Auto Scaling のライフサイクルフック」を参照してください。

    • アプリケーションの予想されるスタートアップ時間に合わせて、グループのヘルスチェック猶予期間を設定します。詳細については、「ヘルスチェックの猶予期間」セクションを参照してください。

  • ヘルスチェックの猶予期間中、Amazon EC2 Auto Scaling が running 状態ではなくなったインスタンスを検出すると、そのインスタンスは異常としてマークされ、置き換えられます。例えば、インスタンスを停止するときに発生する可能性があります。Amazon EC2 Auto Scaling が InService インスタンスを停止するには、2 通りのオプションがあります。インスタンスはスタンバイ状態にするか、グループからデタッチすることができます。

  • Amazon EC2 Auto Scaling は、そのヘルスチェックから Amazon EC2 ステータスチェックと予定されているイベントを削除する方法を提供しません。インスタンスが置き換えられないようにしたい場合は、個々の Auto Scaling グループについて ReplaceUnhealthy プロセスと HealthCheck プロセスを停止することをお勧めします。詳細については、「Auto Scaling グループのプロセスを中断して再開する」を参照してください。

  • 異常なインスタンスのヘルスステータスを手動で正常に戻すには、set-instance-health コマンドを使用してみることができます。エラーが発生する場合、その原因はインスタンスが既に終了中であるためだと考えられます。一般に、set-instance-health コマンドを使用してインスタンスのヘルスステータスを正常に戻すことが役に立つのは、ReplaceUnhealthy プロセスまたは Terminate プロセスが中断されている場合のみです。

  • Amazon EC2 Auto Scaling は、Standby 状態のインスタンスに対してヘルスチェックを実行しません。詳細については、「Auto Scaling グループからインスタンスを一時的に削除する」を参照してください。

  • インスタンスを削除すると、関連付けられたすべての Elastic IP アドレスは関連付けを解除され、新しいインスタンスと自動的に関連付けられることはありません。これらの Elastic IP アドレスと新しいインスタンスは、手動で関連付けるか、ライフサイクルフックベースのソリューションを使用して自動的に関連付ける必要があります。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドelastic IP アドレスを参照してください。

  • 同様に、インスタンスが終了されると、それにアタッチされている EBS ボリュームがデタッチ (または、ボリュームの DeleteOnTermination 属性に応じて削除) されます。これらの EBS ボリュームは、新しいインスタンスに手動でアタッチするか、ライフサイクルフックベースのソリューションを使用して自動的にアタッチする必要があります。詳細については、Amazon EC2 Linux インスタンス用ユーザーガイドの「インスタンスへの Amazon EBS ボリュームのアタッチ」を参照してください。

ヘルスチェックの猶予期間

Auto Scaling グループの HealthCheckGracePeriod パラメータを使用すると、Amazon EC2 Auto Scaling が、トラフィックを処理する準備ができていない新しく起動されたインスタンスを、異常なインスタンスと区別するのに役立ちます。この猶予期間は、Amazon EC2 Auto Scaling が InService インスタンスの初期化が終了するのを待たずにそれらを異常としてマークし、終了しないようにすることができます。

デフォルトでは、AWS Management Console から Auto Scaling グループを作成するときのヘルスチェックの猶予期間は、300 秒です。AWS CLI または SDK を使用して Auto Scaling グループを作成するときのデフォルト値は、0 秒です。

ヘルスチェックの猶予期間値は、アプリケーションが必要とする最大起動時間以上の値に設定します。起動時間は、インスタンスの起動時に開始され、トラフィックを受信できようになったときに終了します。ライフサイクルフックを追加する場合は、ヘルスチェックの猶予期間の値を減らすことができます。ライフサイクルフックが呼び出されるときは、ライフサイクルフックアクションが完了し、インスタンスが InService 状態になるまで猶予期間が開始されません。

AWS CLI または SDK を使用してインスタンスのヘルスステータスを異常として設定するとき、デフォルトでは、猶予期間が終了するまで処理が待機されます。ただし、この動作を上書きして、猶予期間を無効にすることも可能です。

ヘルスチェックの猶予期間を設定するには (コンソール)

Auto Scaling グループを作成するときは、[Configure advanced options] (詳細オプションを設定する) ページにある [Health checks] (ヘルスチェック) の [Health check grace period] (ヘルスチェックの猶予期間) に、アプリケーションが必要とする起動時間を選択します。

既存のグループのヘルスチェックの猶予期間を変更するには (コンソール)

  1. Amazon EC2 Auto Scaling コンソール (https://console.aws.amazon.com/ec2autoscaling) を開き、Auto Scaling グループを作成した AWS リージョン を選択します。

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

    [Auto Scaling groups] (Auto Scaling グループ) ページの下部にスプリットペインが開きます。

  3. [Details] (詳細) タブで、[Health checks] (ヘルスチェック)、[Edit] (編集) の順に選択します。

  4. [Health check grace period] (ヘルスチェックの猶予期間) で、アプリケーションが必要とする起動時間を選択します。

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

追加情報

ヘルスチェックのトラブルシューティングについては、「Amazon EC2 Auto Scaling をトラブルシューティングする: ヘルスチェック」を参照してください。ヘルスチェックが失敗した場合は、このトピックでトラブルシューティング手順を確認してください。このトピックは、Auto Scaling グループで何が問題だったのかを理解し、その修正方法のヒント得るのに役立ちます。

Amazon EC2 Auto Scaling は、Amazon EC2、Amazon EBS、またはカスタムヘルスチェックを使用してウォームプールで起動したインスタンスのヘルスもモニタリングします。詳細については、「ヘルスチェックのステータスとヘルスチェックの失敗理由を表示する」を参照してください。