Application Load Balancer (ALB) は、ヘルスチェックを使用してバックエンドサーバーを継続的に監視し、異常なサーバーへのトラフィックを自動的にルーティング対象から除外します。
ヘルスチェックは、デフォルトですべてのサーバーグループで有効になっており、サーバーグループごとに個別に設定できます。
仕組み
ALB は、各バックエンドサーバーに定期的にプローブリクエストを送信し、その応答を評価します。サーバーが正常と判断されるには、正常しきい値で指定された回数のチェックに連続して合格する必要があります。これにより、一時的なネットワークのジッターによる誤検出を防ぎます。
サーバーが異常しきい値で指定された回数を超えて連続してチェックに失敗すると、ALB はそのサーバーへの新しいリクエストのルーティングを停止し、正常なサーバーにリダイレクトします。サーバーが復旧すると、ALB は自動的にそのサーバーをルーティング対象に戻します。
ヘルスチェックでは、各プローブの完了直後に切断される短時間接続が使用されます。
フェイルオープン: サーバーグループ内のすべてのサーバーが同時にヘルスチェックに失敗した場合、ALB はトラフィックを完全にドロップするのではなく、スケジューリングアルゴリズムに基づいてすべてのサーバーにリクエストをルーティングし続けます。これにより、広範囲にわたる障害が発生した場合のサービス中断を抑制します。
重みが 0 のバックエンドサーバーは、ヘルスチェックの対象になりません。
ソース IP アドレス
ALB は、特定の IP アドレスからバックエンドサーバーにプローブを送信します。iptables ルール、サードパーティのセキュリティソフトウェア、または VPC ネットワーク ACL などで、これらのアドレスからのトラフィックを許可するようにサーバーを設定してください。これらの IP をブロックすると、ヘルスチェックプローブがサーバーに到達できなくなり、ALB はサーバーを異常と判断して、負荷分散ローテーションから除外します。
|
ALB インスタンスタイプ |
ソース IP 範囲 |
|
アップグレードされた ALB インスタンス |
vSwitch の CIDR ブロックからのプライベート IP アドレス (ローカル IP)。これらのアドレスは、インスタンス詳細ページで確認できます。 |
|
アップグレードされていない ALB インスタンス |
|
ヘルスチェックの作成
コンソール
-
ALB コンソールの[ヘルスチェック] ページに移動します。
-
対象リージョンを選択し、[ヘルスチェックの作成] をクリックします。
-
次のパラメーターを設定し、[作成] をクリックします。
基本設定
|
パラメーター |
説明 |
|
[ヘルスチェック名] |
このヘルスチェックテンプレートの名前。 |
|
[プロトコル] |
プローブプロトコル。詳細については、「プロトコル」をご参照ください。 |
|
[ヘルスチェックメソッド] |
プローブリクエストの HTTP メソッド。HTTP、HTTPS、gRPC にのみ適用されます。 |
|
[HTTP バージョン] |
HTTP1.0 または HTTP1.1。HTTP と HTTPS にのみ適用されます。 |
|
[ポート] |
プローブ対象のポート。空欄にすると、各バックエンドサーバーのポートが使用されます。有効値:1~65535。 |
|
[パス] |
プローブ対象の URL パス (例: |
|
[ドメイン名] |
プローブリクエストで送信される |
正常性の判定
|
パラメーター |
デフォルト |
有効値 |
説明 |
|
[ヘルスチェックステータスコード] |
|
「ヘルスチェックステータスコード」をご参照ください |
サーバーが正常であることを示す HTTP ステータスコード。HTTP、HTTPS、gRPC にのみ適用されます。 |
|
[ヘルスチェック応答タイムアウト] |
5 秒 |
1~300 秒 |
この時間内にサーバーが応答しない場合、チェックは失敗と見なされます。 |
|
[ヘルスチェック間隔] |
2 秒 |
1~50 秒 |
連続するチェック間の時間。間隔が長いほど、異常なサーバーの検出が遅くなります。 |
|
[正常しきい値] |
3 |
2~10 |
サーバーを正常と判断するために必要な連続成功チェック回数。 |
|
[異常しきい値] |
3 |
2~10 |
サーバーを異常と判断するために必要な連続失敗チェック回数。 |
タグとリソースグループ
|
パラメーター |
説明 |
|
[タグキー] / [タグ値] |
ヘルスチェックテンプレートのフィルタリングと管理に使用するキーと値のタグ。 |
|
[リソースグループ] |
このヘルスチェックが属するリソースグループ。 |
ヘルスチェックの作成後、サーバーグループを作成する際に[ヘルスチェック設定] セクションでそのテンプレートを選択します。
サーバーグループの作成時にヘルスチェックを設定し、[ヘルスチェック設定をテンプレートとして保存] を選択して設定をテンプレートとして保存することもできます。
API
-
CreateHealthCheckTemplate API を呼び出して、ヘルスチェックテンプレートを作成します。
-
ApplyHealthCheckTemplateToServerGroup API を呼び出して、サーバーグループに適用します。
プロトコル
ヘルスチェックメソッド (HTTP、HTTPS、gRPC)
|
メソッド |
デフォルト |
動作 |
|
HEAD |
HTTP、HTTPS |
ヘッダーのみをリクエストします。バックエンドが HEAD リクエストをサポートしていることを確認してください。サポートしていない場合は、GET を使用してください。 |
|
POST |
gRPC |
バックエンドが POST リクエストをサポートしていることを確認してください。サポートしていない場合は、GET を使用してください。 |
|
GET |
— |
8 KB を超える応答は切り捨てられますが、ヘルスチェックの結果には影響しません。 |
プロトコルの詳細
|
プロトコル |
メカニズム |
|
HTTP |
ALB は HEAD または GET リクエストを送信して、バックエンドサーバーアプリケーションが正常であることを確認します。 |
|
HTTPS |
ALB は HEAD または GET リクエストを送信して、バックエンドサーバーアプリケーションが正常であることを確認します。標準および WAF 拡張 ALB インスタンスでサポートされています。基本 ALB インスタンスではサポートされていません。 |
|
TCP |
ALB は SYN ハンドシェイクパケットを送信して、バックエンドサーバーのポートが利用可能であることを確認します。 |
|
gRPC |
ALB は POST または GET リクエストを送信して、バックエンドサーバーアプリケーションが正常であることを確認します。 |
ALB Extensible Edition は、HTTP と TCP のヘルスチェックプロトコルのみをサポートします。
ヘルスチェックステータスコード (HTTP、HTTPS、gRPC)
ALB は、プローブが設定されたステータスコードのいずれかを返した場合にのみ、サーバーを正常と判断します。
-
HTTP/HTTPS:
http_2xx、http_3xx、http_4xx、http_5xxから選択します。デフォルト:http_2xxとhttp_3xx。 -
gRPC: 有効なコードは 0~99 です。最大 20 個の値の範囲をカンマで区切って指定します。
ステータスコードリストに http_4xx または http_5xx を含めると、異常なサーバーの検出が遅れます。リストは http_2xx と http_3xx に限定し、 4XX または 5XX 応答を引き起こすバックエンドの問題を修正してください。
ヘルスチェックの変更
-
ヘルスチェックを無効にすると、ALB は異常なサーバーを検出できなくなります。サーバーがダウンした場合、トラフィックは正常なサーバーに自動的にリダイレクトされません。
-
ヘルスチェック間隔を長く設定すると、ALB が異常なバックエンドサーバーを検出するのに、より長い時間が必要になります。
コンソール
-
ALB コンソールの[ヘルスチェック] ページに移動します。
-
対象のヘルスチェックを見つけ、[操作] 列の [変更] をクリックします。
-
[ヘルスチェック設定の変更] ダイアログで設定を更新し、[保存] をクリックします。
サーバーグループページでヘルスチェックを編集することもできます。
API
UpdateHealthCheckTemplateAttribute API を呼び出して、ヘルスチェックテンプレートを更新します。
ヘルスチェックステータスの表示
ALB インスタンスにリスナーがあり、ヘルスチェックが有効になっている場合、[リスナー] タブでバックエンドサーバーのヘルスステータスを表示できます。リスナーのヘルスチェックステータスは、関連付けられているすべてのサーバーグループから集約されます。サーバーグループ内のいずれかのバックエンドサーバーが異常な場合、そのサーバーグループは異常と見なされます。リスナーに関連付けられているいずれかのサーバーグループが異常な場合、リスナーのヘルスチェックステータスは異常と表示されます。
コンソール
API
GetListenerHealthStatus API を呼び出して、リスナーのヘルスチェックステータスを照会します。
ヘルスチェックの削除
コンソール
-
ALB コンソールの[ヘルスチェック] ページに移動します。
-
対象のヘルスチェックを見つけ、[操作] 列の [削除] をクリックします。
-
削除を確認し、[OK] をクリックします。
API
DeleteHealthCheckTemplates API を呼び出して、ヘルスチェックテンプレートを削除します。
本番環境に適用
専用のヘルスチェックエンドポイントを作成します。 常に HTTP 200 を返す専用ルート (例:/health) を追加します。ビジネスロジックを含むパスの使用は避けてください。認証やリソースの欠落により 4XX が返され、誤った障害検知を引き起こす可能性があります。
ステータスコードを緩和するのではなく、バックエンドの問題を修正します。 ヘルスチェックが失敗した場合は、トラブルシューティングを行い、エンドポイントが 2XX または 3XX を返すように根本原因を修正します。問題を回避するために、許容されるステータスコードリストに 4XX や 5XX を追加しないでください。
環境に合わせてパラメーターを調整します。 ほとんどのシナリオでは、デフォルト設定で問題ありません。起動が遅いサービスの場合は、ヘルスチェック間隔 または [異常しきい値] を増やして、起動中のサーバーが時期尚早に異常とマークされるのを防ぎます。高レイテンシーのネットワークの場合は、ヘルスチェック応答タイムアウト を増やします。
curl を使用してヘルスチェックをシミュレートします。 トラブルシューティングを行う際は、次のコマンドを使用して ALB のプローブ動作を再現します。メソッド、ドメイン、IP、ポート、パスを実際の設定に合わせて置き換えてください:
curl -Iv -X HEAD --http1.0 -H "Host: your-domain.com" http://backend_ip:port/health_path
課金
ヘルスチェックに追加料金は発生しません。ALB の料金詳細については、「ALB 課金情報」をご参照ください。
クォータ
リージョンごとに最大 50 個のヘルスチェックテンプレートを作成できます。このクォータは増やすことはできません。