はじめに
この記事では、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など、無料利用枠を考慮して選びます。
ネットワーク設定では、作成したVPCを選択し、サブネットにはパブリックサブネットを選びます。また、セキュリティグループは、事前に設定したものを選択してください。
また、セキュリティグループは、事前に設定したセキュリティグループを選択してください。
セキュリティグループのインバウンドルールで「HTTP(80):0.0.0.0/0」を許可する必要があります。
この設定で、EC2インスタンスを2台起動します。
Apacheのインストール
各EC2インスタンスにSSHで接続し、以下のコマンドを実行してApacheをインストールします。
sudo yum update -y
sudo yum install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd
サーバーのパブリックIPアドレスにアクセスし、デフォルトのApacheテストページが表示されればインストールは正常に完了しています。
ヘルスチェック用のコンテンツ作成
ヘルスチェックのパスが「/」の場合、ロードバランサーは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アドレス/
http://テストサイトB用のインスタンスのグローバルIPアドレス/
ターゲットグループの設定
まず、ターゲットグループを作成し、任意の名前を設定します。プロトコルは「HTTP」、ポートは「80」を選択し、作成済みのVPCを選びます。
次に、作成したターゲットグループに先ほど起動した2台のEC2インスタンスを追加し、「次へ」で進んでいき、設定を完了させます。
Application Load Balancer (ALB)の作成
EC2サービス画面に戻り、左メニューから「Load Balancers」を選択します。「Create Load Balancer」をクリックし、「Application Load Balancer」を選択します。
基本設定では、ALBの名前を入力し、スキームは「インターネット向け」、リスナーは「HTTP (ポート80)」を選びます。
また、ネットワークマッピングの設定では、事前に作成しているVPCとアベイラビリティゾーンを、EC2インスタンスが配置されているpublicサブネットに対応させるように設定します。
セキュリティグループは、インバウンドルールで「HTTP (80):0.0.0.0/0」を許可するものをアタッチしてください。
最後に、あらかじめ作成したターゲットグループを選択します。
これで設定が完了すると、「ec2-test」というロードバランサーが作成され、ターゲットが登録されていることが確認できればOKです。
動作確認
ALBの詳細画面からDNS名を取得し、ブラウザでアクセスして2台のApacheサーバーが正常に応答しているか確認します。
私の環境では以下がロードバランサーのDNS名なので、ブラウザで確認してみます。
http://ec2-test-291646990.ap-northeast-1.elb.amazonaws.com/
何度かアクセスして「こちらはテストサイト⚪︎用のインスタンスになります。
」と表示される「A
」「B
」が切り替われば、動作確認は成功です。
追加:テストサイト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
」と表示されていることが確認できます。
この状態でロードバランサーのDNS名でアクセスすると、「こちらはテストサイトB用のインスタンスになります。
」のみが表示されることが確認できました。
ロードバランシングの裏側の仕組みを理解し、期待通りの動作が確認できると、さらに楽しさが増しますね!
まとめ
本記事では、EC2インスタンスの起動からApplication Load Balancer (ALB)の設定、動作確認までの手順を説明しました。
ALBを利用することで、複数のEC2インスタンスへのトラフィック分散やヘルスチェック機能を活用でき、可用性の高いシステムを構築することができます。
今後は、この基本的な設定をもとに、さらなる機能追加やセキュリティ設定を検討してみてください。
参考文献