見出し画像

【保存版】AWS Application Load Balancer(ALB)を使ってEC2にアクセスしてみよう!

こんにちは、CryptoGamesの高橋です。

クリスペというサービスを行っている会社です。

本日はEC2ターゲットグループに登録して、ロードバランサーからそのターゲットグループを通じてEC2Apache表示したいと思います。

はじめる前に

AWSのサービスには料金がかかります。

事前に確認を行い、テスト終了後クリーンアップを忘れずに行なうようにお願いします。

0 事前準備をしよう

では、事前準備として2つパブリックサブネットEC2起動し、Apacheインストールした上で、立ち上げてください。

なんか情報量多いですね。事前準備だけでも大変だと思います。

ご不明な場合はこちらに沿ってそのままやっていただければできると思いますので、ご参照ください。

では、下のように、「ap-northeast-1a」「ap-northeast-1c」パブリックサブネットEC2を起動させた状態として、次に進んでいきます。

ap-northeast-1a
ap-northeast-1c

1 ターゲットグループを作成する

では、負荷を分散させる先である「ターゲットグループ」を作成しましょう。

EC2の画面から進んでいきます。

「ターゲットグループ」を選択します。

「ターゲットグループの作成」を選択

「インスタンス」にチェックを入れて、任意の「ターゲットグループ名」を入力します。

含めたいターゲットが存在するVPCを選択し、「次へ」

含めたいインスタンスにチェックを入れて、「保留中として以下を含める」を選択。

第0章で作成したインスタンスですね。

「保留中」となっているのを確認した上で、「ターゲットグループの作成」

これで、下のようにターゲットグループができました!

2 ロードバランサーを作成する

では、ターゲットグループができたので、ロードバランサーを作っていきましょう。

EC2の画面から「ロードバランサー」「ロードバランサーの作成」

「Application Load Balancer」ALB)を選択します。

任意のロードバランサー名を入れます。

ターゲットグループ内のEC2が存在しているサブネットを選択します。

今回は1a1cです。

デフォルトアクションに先ほど作ったターゲットグループを選択します。

あとは、「ロードバランサーの作成」です。

これで、ロードバランサーができました。

では、DNS名を選択してみましょう。

この時、「https://~」となっているので、「http://~」に変更しましょう。

下のようになっていれば成功です。

ならない場合は

・https://~ ではなくって、http://~となっていないか
EC2は立ち上げているか
・EC2にApacheを入れて、Apacheを起動しているか
・EC2のセキュリティは適切か

などが怪しいと思います。

3 EC2への接続をロードバランサーからのみにする

現在、EC2のApacheには

直接EC2に接続する
ロードバランサーを通じて接続する

の2通りのルートができています。

必ず負荷分散を行えるように、

直接EC2に接続する

できないようにしていきます。

3ー1 ロードバランサーのセキュリティグループを確認する

まずは、ロードバランサーセキュリティグループを確認しましょう。

ここでは、「sg-0e62…」となっています。

EC2への接続このセキュリティグループからに絞るということをやっていきます。

3ー2 EC2のセキュリティグループを変更する

では、EC2セキュリティグループを変更しましょう。

ここでやりたいのは

① 外部のHTTPからEC2への直接アクセスできなくする
② ロードバランサーセキュリティグループからアクセス可にする

では、現在動いているEC2セキュリティグループを見てみましょう。

「sg-03ec..」となっていますね。

こちらを選択します。

「インバウンドルール」を見てみましょう。

現在、下のように「HTTPS」「HTTP」許可しています。

「インバウンドのルールを編集」を選択

「HTTPS」「HTTP」の行の右の「削除」で2つを消します。

また、下のようにして、「ロードバランサー」「セキュリティグループ」を追加します。

このように、セキュリティグループが修正されました。

もう一方のEC2のセキュリティグループも同様に修正しましょう。

なお、私は今回うっかりしていましたが、2つのEC2セキュリティグループ同じものにしたほうが良いと思います。

それにより、直し忘れ修正ミス軽減できると思います。

修正後も下のようにアクセスができることを確認しましょう。

また、EC2に直接アクセスができないことも確認しましょう。

4 ヘルスチェックを確認する

下のように、「ターゲット」を見てみると、「ヘルスステータス」「unhealthy」になっています。

なにやら、EC2インスタンスの状態が良くなさそうですね。

下の「ヘルスチェック」を見てみましょう。

実は定期的に状態のチェックを行っています。

下の場合、30秒間隔でチェックを行い、5回連続で成功したらOK2回連続で失敗したらNGとなるようにしています。

5 今回のunhealthyの原因は?

今回の原因は、おそらくこちらだと思います。

Apacheを起動しましたが、特にファイルなどは置いていません。

下のように、「/var/www/html/」コンテンツを追加できるとあるので、こちらに「index.html」を入れていきます。

6 EC2にindex.htmlを格納する

では、EC2インスタンスにindex.htmlを格納してみましょう。

ちなみに、EC2へのSSH接続がご不明な場合は、こちらの第3章をご参照ください。

インスタンスをチェックして、「接続」

「SSHクライアント」の下のコマンドを入力

下のように、接続しました。

では、下のようにして、「/var/www/html/」に移動しましょう。

cd /var/www/html/

では、ここで、テスト用の「index.html」を作成します。

sudo vim index.html

今回は、テスト用に、こちらのHTMLを使います。

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
    Testだよ
</body>
</html>

貼り付けましたら、「ESC」キーを押してから「:wq!」で上書き保存です。

これで、一方のインスタンスに「index.html」の格納ができました。

少し経ってから、「ターゲット」を見てみると、下のように「healthy」になっていました。

もう一方のインスタンスにも同様にindex.htmlを入れていきます。

ただ、今回は違いを区別するために、bodyの文言を「Testだよ」から「Testです」に変えてみました。

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
    Testです
</body>
</html>

あとはやり方は同じです。

下のように、両方とも「healthy」になりました。

7 ロードバランサーにアクセスする

では、最後にロードバランサーにアクセスしてみましょう。

下の「DNS名」から接続します。

なお、「https」となっている場合は「http」に直してください。

このように表示されたでしょうか。

また、何回か別のブラウザで立ち上げた場合はこのようにもう一方の表示になると思います。

これにより、ロードバランサーにより、2つのEC2に振り分けられていることがわかります。

なお、表示が全て一方だけの場合は、ブラウザのCookieが関係していることもあると思います。

最後に

終わった後は、不要なものは必ずクリーンアップを行なってください。

料金が継続的にかかってしまうため、忘れないよう、十分ご注意ください。

今回は以上です。

最後まで、ありがとうございました。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊