- 公開日
- 最終更新日
【ALB】ALBを構築してEC2へ負荷分散してみた
この記事を共有する
目次
はじめに
皆さんこんにちは!パーソル&サーバーワークスの榎本です。
さて、前回の記事ではRDS(以下、Relational Database Service)を構築し、Amazon EC2(以下、EC2)インスタンスからデータベースに接続する手順をお伝えしました。
今回はその構成をさらに発展させて、Application Load Balancer(以下、ALB)を構築し、複数のEC2インスタンスへの負荷分散を実現する手順をお伝えしたいと思います。
本記事の目的
- ALBを構築し、EC2インスタンスへの負荷分散を実現できるようになること
- セキュリティグループを適切に設定し、セキュアな構成を理解すること
前提
構築手順
ALB用セキュリティグループ作成
- AWSマネジメントコンソールにログインして、右上のリージョン選択箇所にて[東京]リージョンを選択する

- 左上の検索バーにて[EC2]を検索して開く

- 左のナビゲーションペインから[セキュリティグループ]を選択し、[セキュリティグループを作成]をクリックする

- 以下設定を入力する
- ・セキュリティグループ名:<名前>-yyyymmdd-alb-sg(以下例の場合、enomoto-20260128-alb-sg)
- ・説明:<名前>-yyyymmdd-alb-sg(以下例の場合、enomoto-20260128-alb-sg)
- ・VPC:<作成したVPCのIDを選択>(以下例の場合、enomoto-20251210-vpcのIDを選択)
- [ルールを追加]をクリックし、以下設定を入力して[セキュリティグループを作成]をクリックする
- ・タイプ:HTTP
- ・ソース:Anywhere-IPv4

- セキュリティグループが作成されたことを確認する

プロテクテッドサブネットEC2 セキュリティグループ設定変更
- 左のナビゲーションペインから[セキュリティグループ]を選択し、プロテクテッドサブネットEC2用セキュリティグループを選択する
- [インバウンドルール]タブを選択し、[インバウンドルールを編集]をクリックする

- [ルールを追加]をクリックして以下設定を入力し、[ルールを保存]をクリックする
- ・タイプ:HTTP
- ・ソース:ALB用セキュリティグループのIDを選択(以下例の場合、enomoto-20260128-alb-sg)

既存EC2インスタンス接続
- 左のナビゲーションペインから[インスタンス]を選択し、過去の記事で作成したプロテクテッドサブネット用EC2インスタンスにチェックを入れて[接続]をクリックする

- [セッションマネージャー]タブを選択し、[接続]をクリックする

Apacheインストール
- 以下画面が表示されたことを確認し、以下コマンドを実行してユーザーを変更する
sudo su - ec2-user
- 以下コマンドを実行してApacheをEC2にインストールする
sudo dnf update -y
sudo dnf install -y httpd

- 以下コマンドを実行してApacheの自動起動をONにして、Apacheを起動し、ステータスを確認する
sudo systemctl enable httpd
sudo systemctl start httpd
sudo systemctl status httpd

追加EC2インスタンス作成
AMI&プロテクテッドサブネット用EC2(2台目)作成
- 既存のEC2インスタンスからAMIを作成する。左のナビゲーションペインから[インスタンス]を選択し、既存のEC2インスタンスにチェックを入れて[アクション]-[イメージとテンプレート]-[イメージを作成]を選択する

- 以下設定を入力し、[イメージを作成]をクリックする
- ・イメージ名:<名前>-yyyymmdd-ami-protected(以下例の場合、enomoto-20260128-ami-protected)
- ・イメージの説明:<名前>-yyyymmdd-ami-protected(以下例の場合、enomoto-20260128-ami-protected)
- ・インスタンスを再起動:※チェックを外す
- ・タグ:イメージとスナップショットに対し一緒にタグを付けます

- 作成したAMIを選択し、[AMIからインスタンスを起動]をクリックする

- 以下設定を入力する
- ・名前:<名前>-yyyymmdd-ec2-protected-1c(以下例の場合、enomoto-20260128-ec2-protected-1c)

- ・インスタンスタイプ:t3.micro
- ・キーペア:<既存のキーペアを選択>(以下例の場合、enomoto-20260107-ec2-keypair)

- ・名前:<名前>-yyyymmdd-ec2-protected-1c(以下例の場合、enomoto-20260128-ec2-protected-1c)
- [ネットワーク設定]で[編集]をクリックし、以下設定を入力する
- ・VPC:<作成したVPCのIDを選択>(以下例の場合、enomoto-20251210-vpcのIDを選択)
- ・サブネット:<名前>-yyyymmdd-protected-subnet-1c(以下例の場合、enomoto-20251210-protected-subnet-1c)
- ・パブリックIPの自動割り当て:無効化
- ・ファイアウォール(セキュリティグループ):セキュリティグループを作成
- ・セキュリティグループ名:<名前>-yyyymmdd-ec2-protected-sg(以下例の場合、enomoto-20260126-ec2-protected-sg)
- ・説明:<名前>-yyyymmdd-ec2-protected-sg(以下例の場合、enomoto-20260126-ec2-protected-sg)

- [高度な詳細]をクリックして展開し、以下設定を入力し、[インスタンスを起動]をクリックする
- ・IAMインスタンスプロフィール:<作成したIAMロール>(以下例の場合、enomoto-20260107-iam-role-ec2ssh)

- ・IAMインスタンスプロフィール:<作成したIAMロール>(以下例の場合、enomoto-20260107-iam-role-ec2ssh)
- 「成功」と表示されていることを確認し、[すべてのインスタンスを表示]をクリックする

追加EC2インスタンスHTMLファイル作成
- 作成したEC2インスタンスにチェックを入れて[接続]をクリックする

- [セッションマネージャー]タブを選択し、[接続]をクリックする

- 以下コマンドを実行して識別用のHTMLファイルを作成する
sudo tee /var/www/html/index.html > /dev/null << 'EOF' <!DOCTYPE html> <html> <head> <title>Server 2 - ALB Test</title> </head> <body> <h1>Hello from Server 2!</h1> <p>This is the second EC2 instance behind ALB.</p> <p>Instance ID: $(curl -s http://169.254.169.254/latest/meta-data/instance-id)</p> </body> </html> EOF

既存EC2インスタンスHTMLファイル作成
- 既存のEC2インスタンスにセッションマネージャーで接続し、以下コマンドを実行して識別用のHTMLファイルを作成する


sudo su - ec2-user
sudo tee /var/www/html/index.html > /dev/null << 'EOF' <!DOCTYPE html> <html> <head> <title>Server 1 - ALB Test</title> </head> <body> <h1>Hello from Server 1!</h1> <p>This is the first EC2 instance behind ALB.</p> <p>Instance ID: $(curl -s http://169.254.169.254/latest/meta-data/instance-id)</p> </body> </html> EOF

ターゲットグループ作成
- 左のナビゲーションペインから[ターゲットグループ]を選択し、[ターゲットグループの作成]をクリックする

- 以下設定を入力し、[次へ]をクリックする
- ・ターゲットタイプ:インスタンス
- ・ターゲットグループ名:<名前>-yyyymmdd-alb-tg(以下例の場合、enomoto-20260128-alb-tg)
- ・VPC:<作成したVPCのIDを選択>(以下例の場合、enomoto-20251210-vpcのIDを選択)


- 作成した2つのEC2インスタンスにチェックを入れ、[保留中として以下を含める]をクリックし、[次へ]をクリックする

- [ターゲットグループの作成]をクリックする

- もし以下ポップアップが表示された場合は[次へ]をクリックする

- ターゲットグループが作成されたことを確認する

Application Load Balancer作成
- 左のナビゲーションペインから[ロードバランサー]を選択し、[ロードバランサーの作成]をクリックする

- [Application Load Balancer]で[作成]をクリックする

- [基本的な設定]セクションで以下設定を入力する
- ・ロードバランサー名:<名前>-yyyymmdd-alb(以下例の場合、enomoto-20260128-alb)
- ・スキーム:インターネット向け
- ・IPアドレスタイプ:IPv4

- [ネットワークマッピング]セクションで以下設定を入力する
- ・VPC:<作成したVPCのIDを選択>(以下例の場合、enomoto-20251210-vpcのIDを選択)
- ・マッピング:ap-northeast-1aにチェックし、<名前>-yyyymmdd-public-subnet-1a(以下例の場合、enomoto-20251210-public-subnet-1a)を選択
- ・マッピング:ap-northeast-1cにチェックし、<名前>-yyyymmdd-public-subnet-1c(以下例の場合、enomoto-20251210-public-subnet-1c)を選択
- [セキュリティグループ]セクションで以下設定を入力する
- ・セキュリティグループ:<作成したALB用セキュリティグループを選択>(以下例の場合、enomoto-20260128-alb-sg)
- ・既存のdefaultセキュリティグループは×をクリックして削除する

- [リスナーとルーティング]セクションで以下設定を入力する
- ・デフォルトアクション:ターゲットグループへ転送
- ・<作成したターゲットグループを選択>(以下例の場合、enomoto-20260128-tg)

- [ロードバランサーの作成]をクリックする

- 「ロードバランサーを正常に作成しました」と表示されたことを確認する

- ロードバランサーの状態が「アクティブ」になり、リソースマップのターゲットが「正常」になったことを確認し、DNS名をコピーする

ターゲットグループヘルスチェック確認
- 左のナビゲーションペインから[ターゲットグループ]を選択し、作成したターゲットグループをクリックする
- [ターゲット]タブを選択し、両方のインスタンスのヘルスステータスが「Healthy」になっていることを確認する

負荷分散動作確認
- ブラウザを開き、ALBのDNS名にアクセスする

- ページをリロードして、異なるサーバーからのレスポンスが表示されることを確認する

まとめ
今回の記事にてALBを構築し、複数のEC2インスタンスへの負荷分散を実現することができました!
ALBを使用することで、トラフィックを複数のインスタンスに分散し、可用性とスケーラビリティを向上させることができます。
今回までの記事でAWSの基礎的なサービス(VPC、EC2、NATゲートウェイ、RDS、ALB)の構築手順をお伝えできました。
Web三層構造の基本的なアーキテクチャになりますので、ぜひ何度もご覧いただけますと幸いです!
今回もお付き合いいただきありがとうございました!
この記事は私が書きました
榎本 将希
記事一覧2024,2025 Japan All AWS Certifications Engineers サッカー観戦とサウナが好きです! 機械学習とAIを勉強中です!