ターゲットグループとヘルスチェック
EC2 インスタンス、IP アドレス、Lambda 関数をターゲットとして登録し、ヘルスチェックのパス、しきい値、間隔を設定します。
「ターゲットグループとヘルスチェック」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
ターゲットグループとは
ターゲットグループは、ロードバランサーがリクエストをルーティングするターゲットの論理的な集合です。各ターゲットグループには、ターゲットタイプ、プロトコル/ポート、ヘルスチェックの設定があります。ロードバランサーは、ヘルスチェックに合格したターゲットグループ内の登録済みターゲットにリクエストを分散します。
ターゲットグループは、リスナーのルールを介してロードバランサーのリスナーに関連付けられます。1つのリスナーで、リクエストの属性に基づいて複数のターゲットグループへルーティングできます。これが、ALBにおけるパスベースおよびホストベースルーティングの中核となる仕組みです。
# Create a target group for an ALB
aws elbv2 create-target-group \
--name my-web-targets \
--protocol HTTP \
--port 80 \
--vpc-id vpc-12345678 \
--target-type instance \
--health-check-path /health \
--health-check-interval-seconds 30ターゲットタイプ:Instance、IP、Lambda
ターゲットグループでは、次の3種類のターゲットタイプをサポートしています。
- instance:インスタンスIDでEC2インスタンスへルーティングします。ロードバランサーは、指定されたポートでインスタンスのプライマリネットワークインターフェイスにトラフィックを送信します
- ip:プライベートIPアドレスへルーティングします。コンテナ(ECS/EKS)内のターゲット、VPN/Direct Connect経由で到達可能なオンプレミスサーバー、EC2インスタンスのセカンダリIPなどに適しています
- lambda:単一のLambda関数へルーティングします(ALBのみ)。ALBはHTTPリクエストをJSONイベントに変換し、関数を同期的に呼び出します
ECSでawsvpcネットワークモードを使用するタスク(各タスクが独自のIPを取得します)、EKS Pod、オンプレミスのターゲットを含むハイブリッドアーキテクチャでは、IPターゲットタイプが必要です。
ターゲットの登録
ターゲットは、ターゲットグループに手動(コンソールまたは CLI)または自動(Auto Scaling Group のアタッチ、または ECS サービスの設定)で登録します。手動で登録したターゲットは、明示的に登録解除するまでグループに残ります。
ASG の場合は、ASG をターゲットグループにアタッチします。すると、ASG が新しく起動したインスタンスを自動的に登録し、終了したインスタンスを登録解除します。この ASG との緊密な統合は、弾力的なコンピューティング層で標準的に使われるパターンです。新しいインスタンスは起動し、ヘルスチェックに合格するとすぐにトラフィックを受信し始めます。
# Register EC2 instances with a target group
aws elbv2 register-targets \
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-web-targets/abc123 \
--targets Id=i-1234567890abcdef0 Id=i-0987654321fedcba0
# Register IP targets (for containers/ECS awsvpc)
aws elbv2 register-targets \
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-ip-targets/def456 \
--targets Id=10.0.0.5,Port=8080 Id=10.0.0.6,Port=8080ヘルスチェックの設定
各ターゲットグループには、ロードバランサーがターゲットの正常性とトラフィック受信可否を判断するために使用するヘルスチェックが関連付けられています。ヘルスチェックは各ターゲットに定期的にリクエストを送信し、その応答を評価します。
- プロトコル: HTTP、HTTPS、または TCP(NLB の場合)
- パス: リクエストする URL パス(例:
/healthまたは/ping) - ポート: チェックするポート(デフォルトはターゲットグループのポート)
- 正常しきい値: 正常と判定するまでに必要な連続成功回数
- 異常しきい値: 異常と判定するまでに必要な連続失敗回数
- 間隔: ヘルスチェック間の秒数(5~300)
- タイムアウト: 応答を待つ秒数
ヘルスチェックの成功コード
HTTP/HTTPS ヘルスチェックでは、どの HTTP レスポンスコードをターゲットが正常であることを示すものとして扱うかを指定します。デフォルトは 200 ですが、200-299 のような範囲や、200,301,302 のようなカンマ区切りの値も設定できます。
ベストプラクティスは、アプリケーションに専用の/healthエンドポイントを作成し、重要な依存関係(データベース接続、キャッシュ、ダウンストリームサービス)がすべて利用可能な場合にのみ 200 を返すようにすることです。高コストな処理を実行したり、認証を必要としたりする場合は、ルート URL(/)をヘルスチェックのパスとして使用しないでください。
# Modify health check to accept 200-299
aws elbv2 modify-target-group \
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-web-targets/abc123 \
--health-check-path /health \
--matcher HttpCode=200-299 \
--healthy-threshold-count 2 \
--unhealthy-threshold-count 3 \
--health-check-interval-seconds 15ターゲットの状態: initial、healthy、unhealthy
ターゲットは登録後、次の状態を順に遷移します。
- initial: ELB が最初のヘルスチェックを実行中
- healthy: 必要な回数の連続ヘルスチェックに合格し、トラフィックを受信
- unhealthy: 必要な回数の連続ヘルスチェックに失敗し、振り分け対象から除外
- draining: 登録解除中。既存の接続は完了まで許可されるが、新しい接続は送信されない
- unused: グループに登録されているが、現在このグループへルーティングするリスナールールが存在しない
UnHealthyHostCount と HealthyHostCount の CloudWatch メトリクスを監視して、ターゲットフリートの問題を検知してください。
登録解除の遅延(コネクションドレイニング)
登録解除の遅延(以前はコネクションドレイニングと呼ばれていました)とは、ターゲットを最終的に登録解除する前に、既存の接続が完了するまで ELB が待機する時間です。デフォルトは300 秒(5 分)です。この期間中、登録解除中のターゲットには新しいリクエストは送信されませんが、処理中のリクエストは完了するまで許可されます。
デプロイを迅速に行う場合やオートスケーリングでインスタンスを終了する場合、アプリケーションがリクエストをすばやく処理できるなら、30~60 秒に短縮するとよいでしょう。ファイルアップロードや動画処理などの長時間実行される処理では、中断されずに完了できるだけの長さを維持してください。
# Reduce deregistration delay to 30 seconds
aws elbv2 modify-target-group-attributes \
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-web-targets/abc123 \
--attributes Key=deregistration_delay.timeout_seconds,Value=30負荷分散アルゴリズム
ターゲットグループでは、複数の負荷分散アルゴリズムを使用できます。
- ラウンドロビン(ALB のデフォルト): リクエストを順番に均等配分します。すべてのターゲットが同等の場合に適しています
- 未処理リクエスト数が最少(ALB): 処理中のリクエスト数が最も少ないターゲットに新しいリクエストを送信します。リクエストによって処理時間が異なるワークロードに適しています
- フローハッシュ(NLB): プロトコル、送信元/宛先 IP、送信元/宛先ポート、TCP シーケンス番号に基づいて分散します。TCP/UDP フロー内のすべてのパケットが同じターゲットに送られることを保証します
ユーザーからのすべてのリクエストを同じターゲットに到達させる必要があるセッションベースのアプリケーションでは、ラウンドロビンによる分散に頼るのではなく、スティッキーセッションを有効にしてください。
複数のターゲットグループと重み付けルーティング
1 つの ALB リスナールールでは、重み付けターゲットグループを使用して複数のターゲットグループにトラフィックを分散できます。たとえば、Route 53 の重み付けルーティングを使わずに、ブルーグリーンデプロイメントでトラフィックの 90% を安定版のターゲットグループへ、10% をカナリア用のターゲットグループへルーティングできます。
重み付けターゲットグループは、リスナールールのレベルで設定します。重みは相対値です。90/10 と設定すると、最初のグループに 90%、2 番目のグループに 10% が送信されます。これは複数の ALB 間で行う重み付けルーティングとは異なり、1 つの ALB リスナールール内で行われます。
ターゲットグループと ECS の統合
ALB の背後に ECS サービスをデプロイする場合、各 ECS タスクは ip target type を使用して ALB のターゲットグループに登録されます(awsvpc ネットワークモードの場合)。ECS サービスは登録と登録解除を自動的に管理します。新しいタスクはヘルスチェックに合格した後に登録され、停止するタスクは終了前に登録解除の遅延が適用されます。
各 ECS サービスでは特定のポートオーバーライドを指定して登録できます。これにより、複数の ECS サービスが、異なるターゲットグループとリスナールール(パスベースまたはホストベース)を通じて、1 つの ALB を共有できます。これはマイクロサービスでよく使われるパターンです。
NLB のヘルスチェック
NLB のヘルスチェックの動作は ALB と異なります。
- NLB は、リスナーのプロトコルに関係なく、TCP、HTTP、HTTPS のヘルスチェックプロトコルをサポートします
- NLB のヘルスチェックは、各 AZ にあるNLB の IP アドレスから送信されます。セキュリティグループで NLB のサブネット IP からのトラフィックを許可するか、NLB 自体のセキュリティグループを使用してください
- TCP ヘルスチェックでは、指定されたポートで TCP 接続を受け入れた場合、NLB はターゲットを正常とみなします
- ヘルスチェックに失敗した NLB ターゲットは AZ ごとに除外されます。ある AZ のターゲットがすべて異常になると、クロスゾーン LB が有効な場合、NLB は他の AZ の正常なターゲットにクロスゾーン負荷分散することがあります
クイックチェック
このレッスンで扱った AWS Solutions Architect(SAA-C03)の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、ターゲットグループには、instance、IP、または Lambda タイプの正常な登録済みターゲットが含まれること、ヘルスチェックはターゲットを定期的に検査し、異常なターゲットを振り分け対象から除外すること、そして登録解除の遅延により、処理中のリクエストを正常に完了させてからターゲットを削除できることを学びました。次は、ALB のリスナールールとパスベースルーティングについて説明します。
よくある質問
「ターゲットグループとヘルスチェック」レッスンは無料ですか?
はい。「ターゲットグループとヘルスチェック」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「ターゲットグループとヘルスチェック」で何を学びますか?
EC2 インスタンス、IP アドレス、Lambda 関数をターゲットとして登録し、ヘルスチェックのパス、しきい値、間隔を設定します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ターゲットグループとヘルスチェック」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ALB、NLB、GLB:使い分けのポイント
- ターゲットグループとヘルスチェック
- リスナールールとパスベースルーティング
- SSL 終端とスティッキーセッション