実務で、サーバーの可用性と拡張性を考慮したインフラ構築を行ったので、その備忘録です。今回はAWSのALB(Application Load Balancer)を使用してサーバーの負荷分散を行っていきます。
はじめに
▼環境・準備するもの
- AWSアカウント
- Windows PC
- Windows Powershell
ロードバランサーとは?
小規模などのアプリケーション開発などでは、一つのアプリケーションに対して一つのサーバーを構築して運用を行っていくことが多いと思います。しかし、サーバーに何かしらの障害が発生したときにダウンタイムが発生し、サービスが停止してしまうことがあります。そこでロードバランサーを使用して負荷分散を行うことで、一つのサーバーに障害が起きたとしても、すべてのリクエストをもう一つのサーバーに振り分けることができるので、ダウンタイムが発生することなくサービスを運用することができます。また、リアルタイム性が求められるチャットシステムなどでは、高いトラフィックが多々発生します。そういった際に、リクエストをロードバランサーを通して各サーバーへ振り分けることで、一つのサーバーへリクエストが集中するといったことが妨げられるようになります。さらにサーバーの死活状態を監視し、いずれかのサーバーに障害が発生した場合には、そのサーバーへの振り分けを停止する機能もあります。
環境を準備する流れ
- 2つのEC2インスタンスを作成する
- EC2インスタンスのセキュリティグループを追加する
- Nginxをインストールし、セキュリティグループの設定
ステップ1: EC2インスタンスを作成する
▼ステップ1
AWSコンソールにログインをし、EC2サービスを選択します
選択できたら、インスタンスを起動
ボタンをクリックしてください
▼ステップ2
インスタンスを作成していきます。それぞれ下記と同じように入力、選択してください。
- 名前:loadbalancer1
- アプリケーションおよび OS イメージ : Amazon Linux
- Amazonマシンイメージ : Amazon Linux 2023 AMI
次にインスタンスタイプを選んでいきます。
- インスタンスタイプ : t2.micro
- キーペアログイン : 新しいキーペアの作成
次に、キーペアを作成していきます。作成したキーペアは自動でloadbalancer
という名前でダウンロードされます。
今後使うので、なくさないように気を付けましょう。
下記と同じように選択できたら、キーペア作成
ボタンを押します
- キーペア : loadbalancer
- キーペアタイプ : ED25519
- ファイル形式 : .pem
次にネットワーク設定を行います。ネットワーク設定の編集ボタンを押してください。
最初にサブネットを割り当てます。
ap-northeast-1がプロダウンで表示されない場合は、違うものでも大丈夫です。
サブネットはもう一つのインスタンスのサブネットと同じにならないように注意してください。
- サブネット : ap-northeast-1a
次に、セキュリティの設定を行います。セキュリティグループ名は、loadbalancer-securityとしてください。まず、インバウンドセキュリティの設定を行います。
セキュリティグループで、SSHポート(22)とHTTPポート(80)のインバウンドトラフィックを許可します。送信元IPは0.0.0.0/0(すべてのIPアドレス)に設定します。これにより、SSHでのサーバー接続とWebブラウザからのHTTPアクセスが可能になります。
すべて設定が終わったら、右側にあるインスタンス起動
ボタンをクリックします
▼ステップ3
インスタンスが正常に起動しているか、以下の手順で確認します:
- EC2ダッシュボードのインスタンス画面を開く
- 作成したインスタンスの状態を確認する
- インスタンスの状態が「実行中」になっている
- ステータスチェックが「2/2 のチェックに合格しました」になっている
※起動完了まで数分かかる場合があります
以上でインスタンスを一つ作成することができました。
ロードバランサーを使用して負荷分散を行うのに、2つ以上インスタンスが必要なので、もう一つも同じ手順で作成してください。
サブネットは、1台目とは異なるものを選択してください。
(例:1台目がパブリックサブネット1aなら、2台目はパブリックサブネット1cを選択)
ステップ2: Nginxをインストールする
作成した2つのインスタンスにNginxをインストールしていきます。
以下の手順で両方のインスタンスにインストールを行ってください。
1.ログイン
EC2インスタンスにログインする方法はこちらをご覧ください
2: Nginxをインストール
Nginxをインストールする方法はこちらをご覧ください
3: 動作確認
- 各インスタンスのパブリックIPアドレスをブラウザに入力してアクセス
- 以下のような Nginx のデフォルトページが表示されることを確認
ステップ3: ロードバランサーの設定
ロードバランサーの設定を行っていきます。
以下の手順で進めていきます。
-
ALB用のセキュリティグループの作成
- ALBが使用する専用のセキュリティグループを設定
- インターネットからのHTTPトラフィックを受け付けるよう設定
-
ターゲットグループの作成
- 負荷分散の対象となるEC2インスタンスをグループ化
- ヘルスチェックの条件も設定
-
ロードバランサーの設定
- 作成したセキュリティグループとターゲットグループを使用してALBを設定
▼ステップ1: ALB用のセキュリティグループの作成
EC2の左側の一覧から「セキュリティグループ」を選択し、「セキュリティグループを作成」ボタンをクリックします。
- セキュリティグループ名 : loadbalancer-alb
- 説明 : Security group for ALB
次にインバンドルールの設定を行います。
HTTPポート(80)のインバウンドトラフィックを許可します。
インバウンドグループの設定ができたら、一番下にスクロールをし、右下にある「セキュリティグループを作成」ボタンをクリックします。
これでALB用のセキュリティグループを作成することができました。
続いて、EC2用で作成したセキュリティグループのインバウンドグループを変更します。
現在の設定では、インバウンドルールの送信元が0.0.0.0/0(すべてのIPアドレス)となっているため、誰でも直接EC2インスタンスにアクセスできる状態です。負荷分散の構成では、
ALBを経由したアクセスのみを許可すれば十分なので、送信元をALBのセキュリティグループに変更します。
まず、セキュリティグループ一覧から、先ほど作成した loadbalancer-securityを選択し、「インバウンドルール」のタブを選択します。選択できたら、「インバウンドのルールを編集」ボタンをクリックします。
編集画面で、HTTPルールのソースを変更します:
- 既存のHTTPルール(0.0.0.0/0)を一度削除します
- 新しいHTTPルールを追加し、以下のように設定:
- タイプ:HTTP
- ポート:80
- ソース:カスタムを選択し、「sg」と入力
- 表示されたALB用のセキュリティグループを選択
- 「ルールを保存」ボタンをクリックして完了
▼ステップ2: ターゲットグループの作成
EC2の左側の一覧から、ターゲットグループを選択し、右上の「ターゲットグループの作成」ボタンをクリックします。下記と同じように設定できたら、一番下までスクロールし、「次へ」ボタンをクリックします。
- ターゲットタイプ : インスタンス
- ターゲットグループ名 : loadbalancer-target
- プロトコル : HTTP
- IPアドレスタイプ: IPv4
次に、インスタンスを以下の手順で設定:
- 先程作成した2つのインスタンスを選択
- 「保留中として以下を含める」をクリック
- ターゲットに追加されてることを確認
- 「ターゲットグループの作成」ボタンをクリック
▼ステップ3: ロードバランサーの設定
EC2の左側の一覧から、ロードバランサーを選択し、右上の「ロードバランサーの作成」ボタンをクリックします。
- ロードバランサーのタイプ: Application Load Balancer
- ロードバランサー名 : test
- スキーム : インターネット向け
- ロードバランサーの IP アドレスタイプ : IPv4
- アベイラビリティーゾーン : ap-northeast-1a, ap-northeast-1c(インスタンス作成する際に選択したサブネット)
- セキュリティグループ : loadbalancer-alb(ALB用で作成したセキュリティグループ)
- デフォルトアクション : loadbalancer-target(作成したターゲットグループ)
上記のように設定ができたら、一番下までスクロールをし、「ロードバランサーの作成」ボタンをクリックします。
▼ステップ3: 動作確認
ロードバランサー一覧に戻り、作成したロードバランサーを選択します。
ステータスを確認し、「アクティブ」になるまで待ちます。
「アクティブ」になっていることを確認出来たら、以下の手順でアクセスを確認します:
- ロードバランサーのDNS名をコピー
- 説明タブに表示されている「DNS名」をコピー
- Webブラウザを開き、コピーしたDNS名を貼り付けてアクセス
- Nginxのデフォルトページが表示されることを確認
この画面が表示されれば、ロードバランサーが正常に動作し、EC2インスタンスにトラフィックが分散されていることを確認できます。
※DNS名の反映には数分かかる場合があります
また、試しに一つのインスタンスが停止してもサイトにアクセスできることを確認しておきましょう。
- ヘルスチェックで2つのインスタンスが「healthy]になっていることを確認
- ひとつのEC2インスタンスを停止させる
- 再度サイトにアクセスする
- アクセスできることを確認
おわりに
今回はAWS Application Load Balancer (ALB) を使用した負荷分散の構築方法を紹介しました。
この構成のメリット:
- 複数のEC2インスタンス間でトラフィックを分散
- サーバーの冗長化によりサービスの可用性が向上
- 1台のサーバーがダウンしても、サービスを継続して提供可能
実際のプロダクション環境では、以下のような発展的な設定も検討することをお勧めします:
- Auto Scalingによる自動スケーリング
- SSL/TLS証明書の設定
- より詳細なヘルスチェックの設定
これからもAWSのさまざまな機能について学び、情報発信を続けていきたいと思います。
最後までご覧いただき、ありがとうございました!