0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

5分でわかるロードバランサー設定の基本【AWS ALB/ELB初心者向け】

0
Last updated at Posted at 2026-02-21

5分でわかるロードバランサー設定の基本【AWS ALB/ELB初心者向け】

はじめに

こんにちは!ハンズオンラボ運営メンバーのわたるです。

インフラエンジニア10年目(監視オペレーター2年→運用保守1年→設計構築7年)として、
数々のロードバランサー構築に携わってきました。

でも、最初は全然分かりませんでした...

初めてALBを設定したとき、こんな失敗をしました:

  • ターゲットグループの設定を忘れて通信不可に
  • ヘルスチェックのパス間違いで全インスタンスがUnhealthyに
  • セキュリティグループ設定ミスでALB経由でアクセス不可に
  • SSL証明書設定で証明書チェーンを忘れてエラー
  • リスナールールの優先順位を理解せず意図しないルーティング

こんな経験から、**「初心者が陥りがちな設定ミス」**を熟知しています。

この記事では、私の失敗経験をもとに、5つの基本設定項目5つのよくある設定ミスを解説します。
この記事を読めば、ロードバランサー設定の9割はカバーできるはずです!


ロードバランサーって何?

ロードバランサー(Load Balancer)は、トラフィックを複数のサーバーに分散する装置です。

身近な例で理解する

レストランで例えると分かりやすいです:

お客さん(ユーザー) 
    ↓
受付係(ロードバランサー)  ← 空いている席に案内
    ↓
テーブル1, 2, 3...(サーバー)

受付係が「今、テーブル2が空いているので、そちらへどうぞ」と案内するように、
ロードバランサーは「今、サーバー2の負荷が低いので、そちらへリクエストを送る」と振り分けます。

AWSのロードバランサー3種類

タイプ 正式名称 特徴 用途
ALB Application Load Balancer HTTP/HTTPS通信に特化
パスベースルーティング可能
Webアプリケーション
マイクロサービス
NLB Network Load Balancer TCP/UDP通信に対応
超低レイテンシ(100万リクエスト/秒)
ゲームサーバー
IoTシステム
CLB Classic Load Balancer 旧世代(2009年リリース)
新規構築では非推奨
レガシーシステム
(移行推奨)

初心者の方へ: 基本的にはALBを選べばOKです。
この記事でもALBを中心に解説します。


ALB設定の5つの基本項目

ALBを構築する際、必ず設定する5つの項目を押さえましょう。

1. ロードバランサー本体の設定

設定項目

  • 名前: ALBの識別名(例: prod-web-alb)
  • スキーム:
    • internet-facing: インターネットからアクセス可能
    • internal: VPC内部からのみアクセス可能
  • IPアドレスタイプ:
    • IPv4: 通常はこれを選択
    • Dualstack(IPv4+IPv6): IPv6も必要な場合

AWS CLI例

aws elbv2 create-load-balancer \
  --name prod-web-alb \
  --subnets subnet-12345678 subnet-87654321 \
  --security-groups sg-0123456789abcdef0 \
  --scheme internet-facing \
  --type application \
  --ip-address-type ipv4

オプション詳細:

オプション 効果
--name ロードバランサーの名前を指定
--subnets ALBを配置するサブネット(複数AZ推奨)
--security-groups ALBに適用するセキュリティグループ
--scheme internet-facing(外部公開) or internal(内部)
--type application(ALB), network(NLB), gateway(GWLB)
--ip-address-type ipv4 or dualstack(IPv4+IPv6)

2. ターゲットグループの設定

ターゲットグループ = 振り分け先のサーバー群

設定項目

  • ターゲットタイプ:
    • instance: EC2インスタンス
    • ip: IPアドレス(ECSタスク等)
    • lambda: Lambda関数
  • プロトコル/ポート: HTTP:80, HTTPS:443等
  • ヘルスチェック設定(後述)

AWS CLI例

aws elbv2 create-target-group \
  --name prod-web-tg \
  --protocol HTTP \
  --port 80 \
  --vpc-id vpc-12345678 \
  --health-check-protocol HTTP \
  --health-check-path /health \
  --health-check-interval-seconds 30 \
  --health-check-timeout-seconds 5 \
  --healthy-threshold-count 2 \
  --unhealthy-threshold-count 3

オプション詳細:

オプション 効果
--name ターゲットグループの名前
--protocol 通信プロトコル(HTTP/HTTPS/TCP等)
--port 転送先ポート番号
--vpc-id ターゲットグループが属するVPC
--health-check-protocol ヘルスチェックに使用するプロトコル
--health-check-path ヘルスチェック対象のパス
--health-check-interval-seconds ヘルスチェック間隔(秒)
--health-check-timeout-seconds ヘルスチェックのタイムアウト(秒)
--healthy-threshold-count 正常と判断する連続成功回数
--unhealthy-threshold-count 異常と判断する連続失敗回数

3. リスナーの設定

リスナー = ALBがリクエストを受け付けるポート

設定項目

  • プロトコル: HTTP, HTTPS
  • ポート: 80, 443
  • デフォルトアクション: どのターゲットグループに転送するか

AWS CLI例

aws elbv2 create-listener \
  --load-balancer-arn arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/prod-web-alb/1234567890abcdef \
  --protocol HTTP \
  --port 80 \
  --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:targetgroup/prod-web-tg/1234567890abcdef

オプション詳細:

オプション 効果
--load-balancer-arn リスナーを紐付けるALBのARN
--protocol リスナーが受け付けるプロトコル
--port リスナーが受け付けるポート番号
--default-actions デフォルトのアクション(転送/リダイレクト/固定応答)
Type=forward ターゲットグループへ転送
TargetGroupArn 転送先ターゲットグループのARN

4. セキュリティグループの設定

よくある失敗: セキュリティグループの設定ミスでアクセス不可に!

正しい設定例

ALB用セキュリティグループ:

# インバウンドルール
HTTP  (80)   0.0.0.0/0  ← インターネットからのアクセスを許可
HTTPS (443)  0.0.0.0/0  ← インターネットからのアクセスを許可

# アウトバウンドルール
HTTP  (80)   [EC2のセキュリティグループID]  ← EC2への転送を許可

EC2用セキュリティグループ:

# インバウンドルール
HTTP  (80)   [ALBのセキュリティグループID]  ← ALBからのみ受け付け

# アウトバウンドルール
ALL   0.0.0.0/0  ← 外部APIアクセス等のため

ポイント: EC2は「ALBからのみ」アクセスを許可することでセキュリティ向上!


5. ヘルスチェックの設定

ヘルスチェック = サーバーが正常かどうかの確認

設定項目(再掲)

  • パス: /health, /, /api/health
  • 間隔: 30秒(デフォルト)
  • タイムアウト: 5秒(デフォルト)
  • 正常しきい値: 2回連続成功で正常
  • 異常しきい値: 3回連続失敗で異常

ヘルスチェックの仕組み

ALB → HTTP GET /health → EC2
         ↓
     200 OK?
         ↓
    YES → Healthy(正常)
    NO  → Unhealthy(異常) → トラフィック振り分けなし

よくある失敗:

  • /healthエンドポイントが存在しない → 全インスタンスUnhealthy
  • ❌ Apacheが起動していない → 全インスタンスUnhealthy
  • ❌ セキュリティグループでALBからのアクセスをブロック → 全インスタンスUnhealthy

初心者が陥りがちな設定ミス5選

私自身が失敗した経験から、初心者が必ずつまずく5つのミスを紹介します。

ミス1: ターゲットグループを設定し忘れ

症状: ALBを作成したのに通信できない

原因: リスナーにターゲットグループを紐付けていない

解決策:

# リスナーの確認
aws elbv2 describe-listeners --load-balancer-arn [ALB ARN]

# ターゲットグループの紐付け
aws elbv2 modify-listener \
  --listener-arn [リスナーARN] \
  --default-actions Type=forward,TargetGroupArn=[ターゲットグループARN]

ミス2: ヘルスチェックパスの間違い

症状: 全インスタンスがUnhealthyになる

原因:

  • ヘルスチェックパス/healthが存在しない
  • Apache/Nginxが起動していない

解決策:

# EC2にSSHでログイン
ssh ec2-user@[EC2のIPアドレス]

# Apache起動確認
sudo systemctl status httpd

# ヘルスチェック用ファイル作成
echo "OK" | sudo tee /var/www/html/health

確認コマンド:

curl http://localhost/health
# → "OK"が返ればOK

ミス3: セキュリティグループの設定ミス

症状: ALB経由でアクセスできない

原因: EC2のセキュリティグループでALBからのアクセスを許可していない

解決策:

# EC2のセキュリティグループにルール追加
aws ec2 authorize-security-group-ingress \
  --group-id [EC2のSG ID] \
  --protocol tcp \
  --port 80 \
  --source-group [ALBのSG ID]

オプション詳細:

オプション 効果
--group-id ルールを追加するセキュリティグループID
--protocol プロトコル(tcp/udp/icmp/-1=all)
--port ポート番号
--source-group アクセス元のセキュリティグループID

ミス4: SSL証明書の証明書チェーン忘れ

症状: HTTPSアクセス時にブラウザで証明書エラー

原因: 中間証明書を含めていない

解決策:

# ACM(AWS Certificate Manager)で証明書をインポート
aws acm import-certificate \
  --certificate fileb://cert.pem \
  --certificate-chain fileb://chain.pem \
  --private-key fileb://private-key.pem

証明書ファイル構成:

  • cert.pem: サーバー証明書
  • chain.pem: 中間証明書 ← これを忘れがち!
  • private-key.pem: 秘密鍵

ミス5: リスナールールの優先順位を理解していない

症状: 意図しないルーティングが発生

原因: リスナールールは**優先順位の低い順(数字が小さい順)**に評価される

:

優先度1: パス=/admin/* → 管理者用ターゲットグループ
優先度2: パス=/*      → 一般ユーザー用ターゲットグループ

間違った設定:

優先度1: パス=/*      ← すべてマッチしてしまう!
優先度2: パス=/admin/* ← ここに到達しない!

解決策: 具体的なパスほど優先度を高く(数字を小さく)する


ALB構築の全体フロー(図解)

テキストで通信フローを図解します:

[ユーザー] 
   ↓ HTTPリクエスト
   ↓
[インターネット]
   ↓
[ALB](ポート80/443でリクエスト受付)
   ↓ セキュリティグループ通過
   ↓
[リスナー](ポート80→ターゲットグループへ転送判定)
   ↓
[ターゲットグループ]
   ↓ ヘルスチェック確認
   ↓
[Healthy なEC2インスタンス]にリクエスト転送
   ↓
[EC2](Apache/Nginxで処理)
   ↓
[レスポンス返却]
   ↓
[ALB]経由でユーザーへ

ポイント:

  • ALBとEC2の間にセキュリティグループ設定が2箇所ある
  • ヘルスチェックがUnhealthyだとトラフィックが振り分けられない

まとめ: ロードバランサー設定のポイント

この記事で伝えたかったことをまとめます:

1. ロードバランサーは「5つの設定項目」を押さえれば基本は完璧

  • ALB本体の設定
  • ターゲットグループの設定
  • リスナーの設定
  • セキュリティグループの設定
  • ヘルスチェックの設定

この5つを順番に設定すれば、基本構成は完成します!

2. 初心者が陥りがちな設定ミスを知っていれば9割回避できる

  • ターゲットグループを設定し忘れ
  • ヘルスチェックパスの間違い
  • セキュリティグループの設定ミス
  • SSL証明書の証明書チェーン忘れ
  • リスナールールの優先順位ミス

これらは誰もが一度は通る道です。
事前に知っていれば、余計なトラブルを避けられます!


隔週でエンジニアもくもく会、実践型ハンズオンを開催中!

私たちハンズオンラボでは、インフラエンジニアのための
もくもく会、実践型ハンズオンを定期開催しています。

完全ハンズオン形式で実機を触れる
現役インフラエンジニア(10年目)が伴走

「管理画面を開いたけど何から設定すればいいか分からない...」
「ヘルスチェックで全インスタンスがUnhealthyになって焦った...」

そんな経験がある方、ぜひ一度覗いてみてください!

👉 公式サイトはこちら
👉 次回イベント申し込み

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?