Auto Scaling グループのヘルスチェックについて - Amazon EC2 Auto Scaling

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Auto Scaling グループのヘルスチェックについて

このトピックでは、デフォルトのヘルスチェックタイプと使用可能なヘルスチェックタイプの概要と、その仕組みについて説明します。

ヘルスチェックタイプ

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

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

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

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

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

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

Elastic Load Balancing のヘルスチェック

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

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

VPC Lattice ヘルスチェック

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

このヘルスチェックタイプを実行するには、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 になっても、インスタンスは直ちに Unhealthy としてマークされません。

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

予定されているイベント

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 ヘルスチェックを有効にする方法については、「Elastic Load Balancing ロードバランサーを Auto Scaling グループにアタッチします。」を参照してください。

注記

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

VPC Lattice ヘルスチェック

デフォルトでは、Amazon EC2 Auto Scaling は、VPC Lattice ヘルスチェックの結果を無視します。オプションで、Auto Scaling グループに対して、これらのヘルスチェックを有効にすることができます。これらのヘルスチェックを有効化した後、VPC Lattice が登録されたインスタンスを Unhealthy として報告すると、Amazon EC2 Auto Scaling は、次回の定期ヘルスチェックでそのインスタンスを Unhealthy としてマークし、置き換えます。インスタンスを登録してからその状態をチェックする処理は、Elastic Load Balancing ヘルスチェックの仕組みと同じです。

Auto Scaling グループに対して VPC Lattice ヘルスチェックを有効にする方法については、「VPC Lattice ターゲットグループを Auto Scaling グループにアタッチする」を参照してください。

注記

グループに対して VPC Lattice ヘルスチェックを有効にすると、Amazon EC2 Auto Scaling は、VPC Lattice から異常として報告されたインスタンスを置き換えることができます。ただし、置き換えは、ターゲットグループが InService 状態になってから行われます。詳細については、「VPC Lattice ターゲットグループのアタッチメントステータスを確認する」を参照してください。

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

デフォルトでは、ヘルスチェックの交換では最初にインスタンスを終了する必要があるため、新しいインスタンスが起動するまで新しいリクエストが受け入れられない場合があります。

Amazon EC2 Auto Scaling は、いずれかのインスタンスがもう実行されていない (Unhealthyset-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 グループについて ReplaceUnhealthy プロセスと HealthCheck プロセスを停止することをお勧めします。詳細については、「Amazon EC2 Auto Scaling プロセスの一時停止と再開」を参照してください。

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

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

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

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

カスタムヘルスチェック

オプションで、Auto Scaling グループのインスタンスでカスタムヘルス検出タスクを実行し、タスクが失敗した場合にインスタンスのヘルスステータスを設定できます。Unhealthyこれは、カスタムヘルスチェック、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

デフォルトで、このコマンドはヘルスチェックの猶予期間を守りますが、--no-should-respect-grace-period オプションを含めることでこの動作を上書きし、猶予期間を守らないようにすることも可能です。

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", "InstanceType": "t2.micro", "HealthStatus": "Unhealthy", "LifecycleState": "Terminating" }, ... ] } ] }

関連リソース

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

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