構築・確認したいこと
・マルチAZサブネット内のEC2にALBを経由してロードバランシング設定し、トラフィックが分散されていることをテストする
・ヘルスチェックでEC2の死活監視(80番のサービス応答チェック)し、死んでいるサーバーにはトラフィックを投げないことをテストする
構成図イメージ
前提
・EC2はApache導入して80番ポートでhttp
・EC2のAutoScalingもバランシング対象
・ALBへのアクセスはRoute53のエイリアスレコードを使用
VPC・サブネット・EC2は作成済みとします。
構築
AWS
ターゲットグループ作成
基本的な設定で以下を入力
ターゲットタイプ:インスタンス
ターゲットグループ名:任意の名前
プロトコル、ポート:HTTP/80
VPC:作成したVPC
プロトコルバージョン:HTTP1
ヘルスチェックで以下を入力
ヘルスチェックプロトコル:HTTP
ヘルスチェックパス:/
ドメインのルートに対してヘルスチェックを行うことを意味しています。
ドメイン内の特定のページにヘルスチェックをかけたい場合はパス指定する
また、ヘルスチェックの詳細設定でヘルスチェック間隔や正常とみなすコードなどを変更できるが今回は変更しない
次に「ターゲットを登録」画面に移動するのでALBの背後に配置するEC2を選択する。
ALB設定
コンソール画面でEC2サービスを選択し、左ペイン内の『ロードバランサー』をクリック
↓
『ロードバランサーの作成』をクリック
ロードバランサータイプで『ApplicationLoadBalancer』
基本的な設定で以下を入力
名前:任意の名前
スキーム:インターネット向け(外部からEC2にアクセスする必要があるため)
IPアドレスタイプ:IPv4
ネットワークマッピングで以下を入力
VPC:作成したVPC
AZとサブネット:2つのAZを選択
ALBは必ず2つ以上のAZに紐づける必要性があります。
また、ALBは自動スケーリング機能のためにサブネット内のIPアドレスを8個以上使用する。
ALBを紐づけるサブネットにはIPのCIDR設計に余裕を持たせることに注意
今回は検証のため、デフォルトのものを使用
『作成』をクリック
EC2のApache構築
⭐2つのサーバーに同様の設定を行う。
対象サーバーにSSH接続を行う。
Apacheをインストールする。
yum install httpd
テスト用のindex.htmlファイルを配置する。
cd /var/www/
touch index.html
vim index.html
<html>
<head>
<title>これはテストです。</title>
</head>
<body>
<p>このページが見えるのはおかしいよ。</p>
</body>
</html>
Apacheの設定を確認&変更
less ./etc/httpd/conf/httpd.conf | grep Listen
less /etc/httpd/conf/httpd.conf | grep DocumentRoot
ドキュメントルートはデフォルトで、/var/www/html なので/var/wwwに変更
httpd -tコマンドでApache設定ファイルの構文チェックが可能
http -t
Apacheを再起動
systemctl restart httpd
systemctl status httpd
EC2のセキュリティグループ設定
EC2のセキュリティグループにはALBからのHTTP/HTTPSトラフィックを許可
ALBのSGを許可するのが一番手っ取り早いかも
(死活監視も失敗する)
確認
死活確認
80番ポートにhttpが起動しているのでALBの死活監視が『healthy』になったことを確認
(めんどいので1つしかApache設定していないため、片方は異常)
ブラウザでALBのDNSを叩く
ALBの詳細画面にある『DNS名』をコピーしてブラウザのURLに張り付ける
index.htmlに記載したpタグが表示されているので成功!
また、何回か更新をしてみるがエラーとなることはなかった。
⇒つまり、異常が表示されているEC2にはトラフィックは分散されていない。
次やりたいこと
・ドメイン取得してALBに紐づけ