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 バージョン] |
HTTP 1.0 または HTTP 1.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 リクエストを送信して、バックエンドサーバーのアプリケーションが正常であることを確認します。Standard Edition および WAF 強化版の ALB インスタンスでサポートされています。Basic 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 件のヘルスチェックテンプレートを作成できます。このクォータは増やせません。