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になって焦った...」
そんな経験がある方、ぜひ一度覗いてみてください!
👉 公式サイトはこちら
👉 次回イベント申し込み