Amazon EC2 Auto Scaling (日本語)
ユーザーガイド

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

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

Amazon EC2 Auto Scaling がインスタンスを異常ありとマークすると、置き換えがスケジュールされます。インスタンスを置き換えない場合は、個々の Auto Scaling グループに対するヘルスチェックプロセスを停止できます。

インスタンスのヘルスステータス

Amazon EC2 Auto Scaling は、以下の 1 つ以上のチェックによりインスタンスのヘルスステータスを判断できます。

  • インスタンスを損なう可能性があるハードウェアとソフトウェアの問題を特定するために Amazon EC2 によって提供されるステータスチェック。これには、インスタンスステータスチェックとシステムステータスチェックの両方が含まれます。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「ステータスチェックのタイプ」を参照してください。

  • Elastic Load Balancing が提供するヘルスチェック。

  • カスタムヘルスチェック。

EC2 ステータスチェックは Amazon EC2 Auto Scaling に対するデフォルトのヘルスチェックであり、特別な設定は必要ありません。ただし、追加のチェックを指定することで、Auto Scaling グループによって実施されるデフォルトのヘルスチェックをカスタマイズできます。詳細については、「Auto Scaling グループへの Elastic Load Balancing ヘルスチェックの追加」および「カスタムヘルスチェック」を参照してください。

インスタンスのヘルスの確認

各インスタンスが完全に設定され、最初のヘルスチェックに合格すると、Amazon EC2 Auto Scaling によって正常であると見なされ、InService 状態へ移行します。Amazon EC2 Auto Scaling は、Auto Scaling グループのインスタンスのヘルスチェックを定期的に実行し、異常なインスタンスを識別します。

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

  • stopping

  • stopped

  • terminating

  • terminated

Auto Scaling グループにロードバランサーまたはターゲットグループをアタッチした場合、Elastic Load Balancing がそれらを OutOfService とレポートしたときにインスタンスを異常とマークするように、そのグループを設定できます。ロードバランサーに対して Connection Draining が有効になっている場合、Amazon EC2 Auto Scaling は実行中のリクエストが完了するか最大制限時間に達するかのどちらか早いほうまで待ってから、スケーリングイベントまたはヘルスチェック交換によってインスタンスを終了します。Elastic Load Balancing ヘルスチェックを使用するように Auto Scaling グループを設定した場合、Amazon EC2 Auto Scaling は EC2 ステータスチェックと Elastic Load Balancing ヘルスチェックの両方を調べて、インスタンスのヘルスステータスを判断します。詳細については、「Auto Scaling グループへの Elastic Load Balancing ヘルスチェックの追加」を参照してください。

カスタムヘルスチェックがある場合、ヘルスチェックから情報を Amazon EC2 Auto Scaling に送信し、Amazon EC2 Auto Scaling がその情報を使用するようにできます。たとえば、インスタンスが正常に機能していないと判断した場合は、インスタンスのヘルスステータスを Unhealthy に設定できます。Amazon EC2 Auto Scaling が次回インスタンスのヘルスチェックを行うときは、インスタンスが異常であると判断して代替インスタンスを起動します。

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

多くの場合、サービス状態になったばかりの Auto Scaling インスタンスは、ヘルスチェックに合格する前にウォームアップが必要です。Amazon EC2 Auto Scaling は、インスタンスのヘルスステータスをチェックする前に、ヘルスチェックの猶予期間が終了するまで待機します。Amazon EC2 ステータスチェックと Elastic Load Balancing ヘルスチェックは、ヘルスチェックの猶予期間が終了する前に完了することができます。ただし、Amazon EC2 Auto Scaling はヘルスチェックの猶予期間が終了するまで、それらに対応しません。インスタンスに十分なウォームアップ期間を設けるためには、アプリケーションで想定される開始期間に対応するようにヘルスチェックの猶予期間を設定します。ライフサイクルフックを追加した場合、ヘルスチェックの猶予期間が始まるのは、ライフサイクルフックアクションが完了してインスタンスが InService 状態になってからになります。

異常のあるインスタンスの置き換え

Amazon EC2 または Elastic Load Balancing のヘルスチェックでインスタンスが異常ありとマークされると、ほぼ即座に代わりのインスタンスがスケジュールされます。これが自動的に正常に回復することはありません。SetInstanceHealth アクション (または set-instance-health コマンド) を呼び出してインスタンスのヘルスステータスを正常に設定し直すことで、手動で介入できます。インスタンスが既に終了している場合は、エラーが発生します。インスタンスを正常でないとマークしてからその実際の終了までの間隔は短いため、インスタンスの正常性を正常に設定し直すために SetInstanceHealth アクション(または set-instance-health コマンド)を使用することは、多くの場合、停止されたグループに対してのみ有効です。詳細については、「スケーリングプロセスの中断と再開」を参照してください。

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

インスタンスを削除すると、関連付けられたすべての Elastic IP アドレスは関連付けを解除され、新しいインスタンスと自動的に関連付けられることはありません。これらの Elastic IP アドレスと新しいインスタンスの関連付けは、手動で行う必要があります。同様に、インスタンスが終了すると、アタッチされている EBS ボリュームはデタッチされます。これらの EBS ボリュームを新しいインスタンスに手動でアタッチする必要があります。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「Elastic IP アドレスの関連付け解除と別のインスタンスへの再関連付け」と「インスタンスへの Amazon EBS ボリュームのアタッチ」を参照してください。

カスタムヘルスチェック

独自のヘルスチェックシステムがある場合、システムから Amazon EC2 Auto Scaling にインスタンスの状態情報を直接送信できます。

指定したインスタンスのヘルスステータスを Unhealthy に設定するには、次の set-instance-health コマンドを使用します。

aws autoscaling set-instance-health --instance-id i-123abc45d --health-status Unhealthy

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

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

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

{ "AutoScalingGroups": [ { .... "Instances": [ { "InstanceId": "i-123abc45d", "AvailabilityZone": "us-west-2a", "HealthStatus": "Unhealthy", "LifecycleState": "Terminating", "LaunchConfigurationName": "my-lc" }, ... ] } ] }