2
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?

[AWS] "Webサーバー負荷分散"やってみました(NLB→ALB→EC2)

Last updated at Posted at 2025-04-25

はじめに

業務でAWSにてインフラ構築をした際、大まかに以下のフローでWebサーバーの負荷分散を実施しました。今回はその経験をもとに、簡単なサンプル構成を作成してみました。

Network Load Balancer (NLB) → Application Load Balancer (ALB) → EC2 (Apache)

【進む前に!】
AWS上で複数台のWebサーバーが構築されており(別々のサブネット上)、それぞれにHTTPアクセスできる状態であることを前提に実施していきます。

【セキュリティグループの設定について】(2025/5/1追記)
本記事ではNLB, ALBのセキュリティグループに、VPCのデフォルトセキュリティグループを使用しています。混乱を招かないためにも、それぞれ別の新規セキュリティグループの使用をお勧めします。以下記事に詳細を記載しています。

おさらい

  • ALB:レイヤー7 (アプリケーション層)で動作するロードバランサー
    ※主な用途:HTTP/HTTPSトラフィックの負荷分散
  • NLB:レイヤー4 (トランスポート層)で動作するロードバランサー
    ※主な用途:TCP/UDP/TLSトラフィックの負荷分散

実施内容

  • ALB の作成
  • NLB の作成
  • 負荷分散試験

構成はこんな感じでいきます。

ロードバランサーの作成順序は、ALB → NLB としています。
※ALBからEC2へ正常にアクセスできるかを確認した後、NLBを作成します。

ALB作成

1. ターゲットグループの作成 (ALB用)

以下を設定し、ターゲットグループ(以下、ALB用ターゲットグループ)を作成します。

・ステップ1:「グループの詳細の指定」

ステップ1では中項目として「基本的な設定」、「ヘルスチェック」があります。

「基本的な設定」一覧
設定項目 設定値
ターゲットタイプの選択    インスタンス
ターゲットグループ名 ※任意のお名前
プロトコル/ ポート HTTP/ 80
IPアドレスタイプ IPv4
VPC ※対象EC2が存在するVPCを選択  
プロトコルバージョン HTTP1

参考).
設定画面はこんな感じです。
image.png

「ヘルスチェック」一覧
設定項目 設定値
ヘルスチェックプロトコル   インスタンス           
ヘルスチェックパス /

・ステップ2:「ターゲットを登録」

対象のEC2を選択し、「保留中として以下を含める」を押下してターゲットに登録します。

※EC2が停止している場合は、"使用可能なインスタンス"として表示されません。

ターゲットグループ.png

作成後のヘルスステータスは「unused」となります。
登録済みターゲット.png

2. ALBの作成

以下を設定し、ALBを作成します。
設定する中項目は以下の4項目です。

「基本的な設定」一覧
設定項目 設定値
ロードバランサ―名    ※任意のお名前   
スキーム     インターネット向け        
 
「ネットワークマッピング」一覧
設定項目 設定値
VPC  ※対象EC2が存在するVPCを選択
アベイラビリティーゾーンとサブネット※対象EC2が存在するサブネットを選択 
「セキュリティグループ」一覧
設定項目  設定値
セキュリティグループ   ※VPCのdefaultセキュリティグループ を選択 
「リスナーとルーティング」一覧
設定項目 設定値
プロトコル/ ポート HTTP/ 80
デフォルトアクション   ※ALB用ターゲットグループ を選択 

defaultセキュリティグループへ、HTTPアクセスを許可するインバウンドルールの追加を忘れずに!
・プロトコル:HTTP
・ソース:※接続元のグローバルipアドレス

【注意点!】(2025/4/28追記)
・ターゲットグループのヘルスチェック失敗事例
Unhealthy_TestTargetGroupForALB.png

EC2のセキュリティグループのインバウンドルールにて、インターネット(0.0.0.0/0)からのHTTPアクセスを許可していないとUnhealthyとなります。

3. 接続確認

ALBのDNS名でWebサーバーへアクセスできれば成功です。
ALB2.png

ページを更新すると、アクセスが2号機へ振られていることも確認できました。
ALB3.png

NLB作成

1. ターゲットグループの作成 (NLB用)

以下を設定し、ターゲットグループ(以下、NLB用ターゲットグループ)を作成します。
・ステップ1「グループの詳細の指定」

「基本的な設定」一覧
設定項目 設定値
ターゲットタイプの選択    ALB
ターゲットグループ名 ※任意のお名前
プロトコル/ ポート TCP/ 80
VPC ※対象EC2が存在するVPCを選択 
「ヘルスチェック」一覧
設定項目 設定値
ヘルスチェックプロトコル   HTTP             
ヘルスチェックパス /

・ステップ2「ターゲットを登録」
ALBの登録で、先ほど作成したALBを選択します。

image.png

2. NLBの作成

以下を設定し、NLBを作成します。
※ターゲットグループの選択以外は、基本的に同じです。
※NLBに割り振られるパブリックIPを、「自動割り振りのもの」 or 「固定IP」から選択する必要があります。(2025/4/28追記)

「基本的な設定」一覧
設定項目 設定値
ロードバランサ―名    ※任意のお名前
スキーム インターネット向け            
ロードバランサーのIPアドレスタイプ  IPv4
 
「ネットワークマッピング」一覧
設定項目 設定値
VPC ※対象EC2が存在するVPCを選択インスタンス
アベイラビリティーゾーンとサブネット※対象EC2が存在するサブネットを選択
「セキュリティグループ」一覧
設定項目 設定値
セキュリティグループ ※VPCのdefaultセキュリティグループ を選択 
「リスナーとルーティング」一覧
設定項目 設定値
プロトコル/ ポート HTTP/ 80
デフォルトアクション ※NLB用ターゲットグループ を選択     

NLB作成後、ALBへのTCP: 80転送が設定されていることが確認できます。
image.png

負荷分散試験

【進む前に!】
NLB、ALBのリソースマップで異常なターゲットマップが無いかを確認します。
※異常がある場合は、ターゲットの登録漏れや Webサーバーの状態を要確認!

・NLBのリソースマップ
image.png
・ALBのリソースマップ
TestALB_リソースマップ.png

NLBのDNS名でWebサーバーへアクセスできました!
NLB2.png

2号機への振り分けも成功です。
NLB3.png

お疲れ様でした。

2
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
2
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?