🎯 ALB ターゲットグループ

レストランの厨房チームで理解する!トラフィック振り分けの完全ガイド

🍽️ レストランの厨房チームで例えると超わかりやすい!

ALB(Application Load Balancer)= レストランの案内係
ターゲットグループ = 厨房チーム

お客様(リクエスト)が来たら、案内係(ALB)が
適切な厨房チーム(ターゲットグループ)に注文を振り分けます。

和食チーム、洋食チーム、デザートチーム...
どのチームに注文を振り分けるか を決めるのがターゲットグループです✨

🏪 レストラン = AWS構成図

👥
お客様
ユーザーリクエスト
➡️
🧑‍💼
案内係
ALB
➡️
👨‍🍳
厨房チーム
ターゲットグループ
➡️
🍳
シェフたち
EC2/Lambda等

💡 ポイント:
案内係(ALB)は「和食が食べたい」というお客様を和食チームへ、
「パスタが食べたい」というお客様を洋食チームへ振り分けます。
各チーム(ターゲットグループ)には複数のシェフ(EC2等)がいて、
手が空いているシェフに順番に注文を回します!

🎪 3種類のターゲットタイプ

🖥️
Instance(インスタンス)
🍽️ レストランの例え
正社員シェフ
毎日出勤する固定メンバー。厨房の設備をフル活用できる。
EC2インスタンス をターゲットとして登録
インスタンスIDで指定(i-xxxxx)
Auto Scalingとの連携が簡単
同じVPC内のインスタンスのみ
⭐ 最も一般的
🌐
IP(IPアドレス)
🍽️ レストランの例え
外部委託シェフ
別の場所にいるシェフに住所(IP)を指定して配達依頼。
IPアドレス で直接指定
オンプレミスサーバーも対象可能
他のVPCのリソースにもルーティング
コンテナ(ECS/EKS)との相性◎
🔄 柔軟性が高い
Lambda
🍽️ レストランの例え
ゴーストキッチン
注文があった時だけ稼働。設備維持費ゼロの魔法の厨房!
Lambda関数 を直接呼び出し
サーバーレスでコスト最適化
1グループに1Lambda関数のみ
低頻度アクセスのAPIに最適
🚀 サーバーレス

🔄 リクエストの流れを図解

👥
ユーザー
⬇️
⚖️
ALB
リスナー(ポート80/443)
⬇️
ルールに基づいて振り分け
⬇️
🎯
ターゲットグループ
⬇️
ヘルシーなターゲットに分散
⬇️
🖥️
EC2 #1
🖥️
EC2 #2
🖥️
EC2 #3

💓 ヘルスチェック = シェフの体調確認

🍽️ レストランの例え:
店長が定期的に各シェフの体調を確認。
「元気ですか?」→「はい!」なら注文を回す。
体調不良なら休ませて、他のシェフに注文を回す。

これがALBの ヘルスチェック です!

🔗

ヘルスチェックパス

「どこに体調確認しに行くか」を指定。通常は専用のヘルスチェック用エンドポイントを用意します。
設定例
/health または /api/health
⏱️

インターバル

「何秒ごとに体調確認するか」。短すぎると負荷に、長すぎると障害検知が遅れます。
デフォルト
30秒(5〜300秒で設定可能)

正常しきい値

「何回連続で元気なら復帰OK」。2回連続で「元気!」と答えたら仕事に復帰。
デフォルト
5回(2〜10回で設定可能)

非正常しきい値

「何回連続で不調なら休ませるか」。2回連続で返事がなければ休養させる。
デフォルト
2回(2〜10回で設定可能)
📊

成功コード

「どの返事を元気とみなすか」。HTTPステータスコードで判断します。
デフォルト
200(200-299も可)

タイムアウト

「何秒待っても返事がなければ不調とみなすか」。応答が遅い場合のタイムアウト設定。
デフォルト
5秒(2〜120秒で設定可能)

🎲 ルーティングアルゴリズム = 注文の振り分け方

🔄

Round Robin(ラウンドロビン)

🍽️ レストランの例え
注文を順番に各シェフに回す。
1番目の注文→シェフA
2番目の注文→シェフB
3番目の注文→シェフC
4番目の注文→シェフA...

特徴: シンプルで均等に分散。デフォルト設定。

⚖️

Least Outstanding Requests

🍽️ レストランの例え
今一番手が空いているシェフに注文を回す。
シェフA: 注文3件処理中
シェフB: 注文1件処理中 ← ここへ!
シェフC: 注文2件処理中

特徴: 処理時間にばらつきがある場合に効果的。

Weighted Random

🍽️ レストランの例え
ベテランシェフに多く、新人シェフに少なく注文を回す。
シェフA(ベテラン): 50%
シェフB(中堅): 30%
シェフC(新人): 20%

特徴: サーバースペックに差がある場合に有効。

🍪 スティッキーセッション = 指名制度

👤
常連客の田中さん
➡️
👨‍🍳
いつも佐藤シェフが担当

💡 スティッキーセッションとは:
同じお客様は、必ず同じシェフ(サーバー)が担当する仕組み。
「田中さんの好みは佐藤シェフが一番わかってる」→ 毎回同じ担当に!

ショッピングカートやログイン状態の維持に必須の機能です。

🍪 Application Cookie(アプリケーションCookie)
アプリケーションが発行するCookieで紐付け。
例: ログインセッションIDなど、アプリ側で管理するCookieを使用。
向いているケース: 既存のセッション管理がある場合
⏰ Duration-based Cookie(期間ベースCookie)
ALBが自動でCookieを発行し、指定期間同じターゲットに送信。
例: 1時間、1日など期間を指定。
向いているケース: シンプルに実装したい場合

📊 ターゲットタイプ比較表

項目 Instance IP Lambda
対象リソース EC2インスタンス 任意のIPアドレス Lambda関数
指定方法 インスタンスID IPアドレス Lambda ARN
Auto Scaling連携 ✅ 簡単 ⚠️ 手動設定 ✅ 不要
オンプレミス対応 ❌ 不可 ✅ 可能 ❌ 不可
他VPCへのルーティング ❌ 不可 ✅ 可能 ❌ 不可
コンテナとの相性 △ 可能 ✅ 最適 ❌ 不可
サーバーレス ❌ 不可 ❌ 不可 ✅ 完全対応
推奨用途 一般的なWebアプリ ハイブリッド/コンテナ APIバックエンド

💼 ユースケース別:最適な設定は?

🛒

ECサイト

ショッピングカートの状態を維持しながら、高負荷に対応したい。
推奨設定
• ターゲットタイプ: Instance
• スティッキーセッション: 有効
• ヘルスチェックパス: /health
• Auto Scaling: 推奨
📱

モバイルアプリAPI

ステートレスなREST APIで、リクエスト数の変動が大きい。
推奨設定
• ターゲットタイプ: Lambda
• スティッキーセッション: 不要
• コスト: 使った分だけ
• スケーリング: 自動
🐳

マイクロサービス(ECS/EKS)

コンテナベースのマイクロサービスで、動的にポートが変わる。
推奨設定
• ターゲットタイプ: IP
• ルーティング: Least Outstanding
• ヘルスチェック: 短めのインターバル
• 登録解除遅延: 短め(30秒)
🏢

ハイブリッドクラウド

オンプレミスのサーバーとAWSを併用したい。
推奨設定
• ターゲットタイプ: IP
• オンプレミスIP: Direct Connect経由
• ヘルスチェック: 長めのタイムアウト
• フェイルオーバー: 設定推奨
💡 ターゲットグループ設定のベストプラクティス
1. ヘルスチェックは専用エンドポイントを作る:
/healthや/api/healthなど、軽量で高速に応答するエンドポイントを用意。DBアクセスなど重い処理は避ける。

2. 登録解除遅延(Deregistration Delay)を適切に設定:
デフォルト300秒は長すぎることも。処理中のリクエストが完了する時間を考慮して設定(30〜60秒が一般的)。

3. スローアウォーミング期間を活用:
新しいターゲットに徐々にトラフィックを増やす設定。急激な負荷を避けられる。

4. クロスゾーン負荷分散を有効に:
複数AZに均等にトラフィックを分散。一部AZの障害時も他AZで処理継続。

5. CloudWatchでターゲットの状態を監視:
HealthyHostCount、UnHealthyHostCountのアラームを設定。障害を早期発見!
AWS CLI でターゲットグループを作成する例
# ターゲットグループの作成
aws elbv2 create-target-group \
    --name my-app-targets \
    --protocol HTTP \
    --port 80 \
    --vpc-id vpc-12345678 \
    --target-type instance \
    --health-check-protocol HTTP \
    --health-check-path /health \
    --health-check-interval-seconds 30 \
    --healthy-threshold-count 2 \
    --unhealthy-threshold-count 2

# ターゲットの登録
aws elbv2 register-targets \
    --target-group-arn arn:aws:elasticloadbalancing:... \
    --targets Id=i-1234567890abcdef0 Id=i-0987654321fedcba0

# スティッキーセッションの有効化
aws elbv2 modify-target-group-attributes \
    --target-group-arn arn:aws:elasticloadbalancing:... \
    --attributes Key=stickiness.enabled,Value=true \
               Key=stickiness.type,Value=lb_cookie \
               Key=stickiness.lb_cookie.duration_seconds,Value=3600

🎓 まとめ

🍽️ レストラン = ALB構成

ターゲットグループは 「どのシェフチームに注文を回すか」 を決める仕組み!
適切な設定で、安定したサービス提供を実現しましょう✨

🖥️
Instance
EC2の標準構成
Auto Scalingと相性◎
🌐
IP
柔軟なルーティング
コンテナ・ハイブリッド向け
Lambda
サーバーレスAPI
コスト最適化
💓
ヘルスチェック
異常検知の要
軽量エンドポイント推奨
🍪
スティッキー
セッション維持
EC・ログインに必須

🎯 ターゲットグループのポイント:
用途に合ったターゲットタイプを選び、
ヘルスチェックで障害を早期発見、
スティッキーセッションでユーザー体験を向上させよう!🚀

Created by SSuzuki1063

AWS SAP Learning Resources