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

Application Load Balancer入門:AWS ALBで複数EC2インスタンスを負荷分散する手順

Posted at

はじめに

この記事では、AWSのEC2インスタンスを起動し、Application Load Balancer (ALB)を設定する手順について説明します。

ALBを使用することで、複数のEC2インスタンスにトラフィックを分散させ、可用性を高めることができます。

また、ヘルスチェック機能を利用することで、インスタンスの稼働状況を監視し、異常時には自動的にトラフィックを切り替えることが可能です。

この記事を通じて、基礎的な知識を整理し、忘れがちな自分への備忘録として記録を残していきます。

知識整理

今回のアーキテクチャを実装する上で、以下の知識が必要です。

EC2 (Elastic Compute Cloud):
AWSが提供する仮想サーバー。必要に応じてスケールアウト/スケールインが可能。

ALB (Application Load Balancer):
トラフィックを複数のEC2インスタンスに分散するためのサービス。HTTP/HTTPSプロトコルに基づくリクエストのルーティングを行う。

ヘルスチェック: ALBがターゲットとなるEC2インスタンスの稼働状況を定期的に確認する機能。正常なインスタンスにのみトラフィックを送ることができる。

EC2インスタンスの起動とALBの設定手順

EC2インスタンスの起動

EC2サービスに移動し、インスタンスを起動します。

使用するAmazon Machine Image (AMI) は、お好みのLinux系AMI(例: Amazon Linux 2)を選択し、インスタンスタイプはt2.microなど、無料利用枠を考慮して選びます。

スクリーンショット 2024-10-26 13.42.54.png

ネットワーク設定では、作成したVPCを選択し、サブネットにはパブリックサブネットを選びます。また、セキュリティグループは、事前に設定したものを選択してください。

また、セキュリティグループは、事前に設定したセキュリティグループを選択してください。

セキュリティグループのインバウンドルールで「HTTP(80):0.0.0.0/0」を許可する必要があります。

この設定で、EC2インスタンスを2台起動します。

スクリーンショット 2024-10-26 13.46.14.png

Apacheのインストール

各EC2インスタンスにSSHで接続し、以下のコマンドを実行してApacheをインストールします。

sudo yum update -y
sudo yum install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd

サーバーのパブリックIPアドレスにアクセスし、デフォルトのApacheテストページが表示されればインストールは正常に完了しています。

スクリーンショット 2024-10-26 13.48.28.png

ヘルスチェック用のコンテンツ作成

ヘルスチェックのパスが「/」の場合、ロードバランサーはEC2インスタンス上のWebサーバーのルートディレクトリ(トップページ)を参照します。

デフォルトでは/var/www/htmlディレクトリが空のため、ヘルスチェックが失敗してしまいます。

このため、ALBがルートディレクトリ(/)にリクエストを送信した際にApacheが応答するよう、index.htmlファイルを作成しておきます。

テストサイトA用のインスタンスに配置

<!doctype html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>テストサイトA</title>
</head>
<body>
休みの日も勉強頑張ってて偉い!(こちらはテストサイトA用のインスタンスになります。)
</body>
</html>

テストサイトB用のインスタンスに配置

<!doctype html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>テストサイトB</title>
</head>
<body>
休みの日も勉強頑張ってて偉い!(こちらはテストサイトB用のインスタンスになります。)
</body>
</html>

上記の内容でindex.htmlファイルを作成し、/var/www/htmlディレクトリに保存後、以下のコマンドでApacheを再起動します。

sudo systemctl restart httpd

それぞれのEC2インスタンスのパブリックIPアドレスに「/」を付与してアクセスし、テストページが表示されることを確認します。

http://テストサイトA用のインスタンスのグローバルIPアドレス/

スクリーンショット 2024-10-26 13.53.46.png

http://テストサイトB用のインスタンスのグローバルIPアドレス/

スクリーンショット 2024-10-26 13.54.07.png

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

まず、ターゲットグループを作成し、任意の名前を設定します。プロトコルは「HTTP」、ポートは「80」を選択し、作成済みのVPCを選びます。

スクリーンショット 2024-10-26 13.58.29.png

次に、作成したターゲットグループに先ほど起動した2台のEC2インスタンスを追加し、「次へ」で進んでいき、設定を完了させます。

スクリーンショット 2024-10-26 14.12.52.png

Application Load Balancer (ALB)の作成

EC2サービス画面に戻り、左メニューから「Load Balancers」を選択します。「Create Load Balancer」をクリックし、「Application Load Balancer」を選択します。

スクリーンショット 2024-10-26 14.00.02.png

基本設定では、ALBの名前を入力し、スキームは「インターネット向け」、リスナーは「HTTP (ポート80)」を選びます。

スクリーンショット 2024-10-26 14.02.15.png

また、ネットワークマッピングの設定では、事前に作成しているVPCとアベイラビリティゾーンを、EC2インスタンスが配置されているpublicサブネットに対応させるように設定します。

スクリーンショット 2024-10-26 14.04.46.png

セキュリティグループは、インバウンドルールで「HTTP (80):0.0.0.0/0」を許可するものをアタッチしてください。

最後に、あらかじめ作成したターゲットグループを選択します。

スクリーンショット 2024-10-26 14.07.22.png

これで設定が完了すると、「ec2-test」というロードバランサーが作成され、ターゲットが登録されていることが確認できればOKです。

スクリーンショット 2024-10-26 14.08.40.png

動作確認

ALBの詳細画面からDNS名を取得し、ブラウザでアクセスして2台のApacheサーバーが正常に応答しているか確認します。

私の環境では以下がロードバランサーのDNS名なので、ブラウザで確認してみます。

http://ec2-test-291646990.ap-northeast-1.elb.amazonaws.com/

スクリーンショット 2024-10-26 14.19.10.png

何度かアクセスして「こちらはテストサイト⚪︎用のインスタンスになります。」と表示される「A」「B」が切り替われば、動作確認は成功です。

スクリーンショット 2024-10-26 14.19.50.png

追加:テストサイトA用のインスタンスを停止した際の確認

次に、「ec2-test-A」インスタンスのhttpdプロセスを停止します。

sudo systemctl stop httpd

psコマンドで確認すると、Apacheのhttpdサービスが停止していることがわかります。

[ec2-user@ip-10-0-7-185 ~]$ ps -ef | grep httpd
ec2-user  3683  3642  0 05:30 pts/0    00:00:00 grep --color=auto httpd
[ec2-user@ip-10-0-7-185 ~]$ 

停止後、ヘルスチェックで「ec2-test-A」が「Unhealthy」と表示されていることが確認できます。

スクリーンショット 2024-10-26 14.32.34.png

この状態でロードバランサーのDNS名でアクセスすると、「こちらはテストサイトB用のインスタンスになります。」のみが表示されることが確認できました。

スクリーンショット 2024-10-26 14.34.21.png

ロードバランシングの裏側の仕組みを理解し、期待通りの動作が確認できると、さらに楽しさが増しますね!

まとめ

本記事では、EC2インスタンスの起動からApplication Load Balancer (ALB)の設定、動作確認までの手順を説明しました。

ALBを利用することで、複数のEC2インスタンスへのトラフィック分散やヘルスチェック機能を活用でき、可用性の高いシステムを構築することができます。

今後は、この基本的な設定をもとに、さらなる機能追加やセキュリティ設定を検討してみてください。

参考文献

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