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

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

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

利用可能なヘルスチェック

Amazon EC2 Auto Scaling は、以下の 1 つまたは複数の手段でインスタンスのヘルスステータスを判別できます。

ヘルスチェックタイプ チェックの内容

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

インスタンスが実行中であり、インスタンスを損なう可能性がある潜在的なハードウェアまたはソフトウェア問題がないことを確認します。Auto Scaling グループに対するデフォルトのヘルスチェックは、Amazon EC2 ステータスチェックと予定されているイベントのみです。

Elastic Load Balancing のヘルスチェック

ロードバランサーによってインスタンスが正常であると報告されているかどうかをチェックし、インスタンスがリクエストを処理できることを確認します。チェックが行われるのは、Auto Scaling グループに対してこれらのヘルスチェックが有効化されている場合のみです。

カスタムヘルスチェック

カスタムヘルスチェックに沿って、インスタンスヘルス問題を示すその他の問題がないことを確認します。

インスタンスヘルス検出

インスタンスが起動されると、インスタンスは 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 Auto Scaling はそのインスタンスを異常と見なし、ほぼ即時的にインスタンスを置き換えます。これは、予定された時刻を待たずに行われます。詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「予定されたイベントのタイプ」を参照してください。

Elastic Load Balancing のヘルスチェック

Amazon EC2 Auto Scaling ヘルスチェックでは、インスタンスのヘルスステータスを判断するために Elastic Load Balancing ヘルスチェックの結果を使用することもできます。Elastic Load Balancing ロードバランサーを Auto Scaling グループにアタッチすると、Amazon EC2 Auto Scaling がインスタンスをロードバランサーに登録します。インスタンスの登録が終了すると、インスタンスは InService 状態になり、ロードバランサーで使用できるようになります。

Elastic Load Balancing ヘルスチェックはデフォルトで無効になっています。これらのヘルスチェックを有効化し、Elastic Load Balancing が登録済みインスタンスを unhealthy として報告すると、Amazon EC2 Auto Scaling は次回の定期的なヘルスチェックでそのインスタンスを異常としてマークし、置き換えます。ロードバランサーに対して Connection Draining (登録遅延) が有効になっている場合、Amazon EC2 Auto Scaling は、処理中のリクエストが完了するまで、または最大タイムアウト時間が終了するまで (いずれか早い方) 待機してから、異常なインスタンスを終了します。

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

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

場合によっては、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-123abc45d --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-050555ad16a3f9c7f" }, "InstanceId": "i-123abc45d", "HealthStatus": "Unhealthy", "LifecycleState": "Terminating" }, ... ] } ] }

異常なインスタンスを置き換える

InService のインスタンスが異常であると Amazon EC2 Auto Scaling が判断すると、そのインスタンスはほぼ即時的に終了されます。これが自動的に正常に回復することはありません。set-instance-health コマンドを呼び出すことにより手動で介入して、インスタンスのヘルスステータスを正常に戻すことができます。インスタンスが既に終了している場合は、エラーが発生します。

インスタンスを異常とマークしてからその実際の終了までの間隔は短いため、インスタンスのヘルスステータスを正常に戻すために set-instance-health コマンドを使用することは、多くの場合、ReplaceUnhealthy プロセスが一時停止されている場合にのみ有効です。詳細については、「Auto Scaling グループのプロセスを中断して再開する」を参照してください。

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

Auto Scaling グループの [Activity] (アクティビティ) タブを表示すると、アクティビティ履歴にこれらのアクティビティがリストされているのがわかります。詳細については、「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 グループのプロセスを中断して再開する」を参照してください。

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

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

  • 同様に、インスタンスが終了されると、それにアタッチされている EBS ボリュームがデタッチ (または、ボリュームの DeleteOnTermination 属性に応じて削除) されます。これらの EBS ボリュームは、新しいインスタンスに手動でアタッチするか、ライフサイクルフックベースのソリューションを使用して自動的にアタッチする必要があります。詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンスへの 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. [詳細] タブで、[ヘルスチェック]、[編集] の順に選択します。

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

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

追加情報

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

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