みなさん、AWSしてますか?(流行らせたい)
今回はELB編となります。
前提条件(実際に手を動かして見たい方)
・AWSアカウントを所持していること
・事前にVPCとAZが異なるサブネットを2つ作成済みであること
・上記サブネットにそれぞれ1台ずつのEC2インスタンスを起動していること
ELBとは
ELB(Elastic Load Balancing)はトラフィックを複数のEC2などに分散させるサービスです。昔は"ELB"というタイプしかなかったようですが、現在は「ALB」「NLB」「CLB」そして「GLB」の4タイプがあります。GLBについてはつい最近使えるようになったサービスらしく、私も存在を知りませんでした。(2020年11月にGAとなったようです。)
※GA: General Availability. 一般提供のこと。
ALB、NLB、CLBの違いについてはこちらの記事が大変参考になります。
GLBについては公式の説明がありますが。。。うーむ分からん
それぞれのユースケースについて整理が必要ですね。
まずはALBを作成してみる
まずはAWSコンソールからEC2を選択します。EC2はコンピューティングに分類されています。
左側のメニューバーに「ロードバランサー」の項目があるのでそれを選択。
画面左上の「ロードバランサーの作成」を選択。
今回はALBを作成するため一番左の「ALB」を選択。
手順1:ロードバランサーの設定
まずはロードバランサーの名前を入力します。スキームはインターネット向けと内部とありますが、違いはクライアント側からロードバランサーの存在が見えるか(パブリックIPアドレスが割り当てられるか否か)です。なお、ALBではパブリックIPアドレスは動的になるので注意。IPアドレスはそのまま、リスナーはHTTPのままやってみます。(商用環境ではHTTPSのみ設定することが望ましい)
下の方へ行くとアベイラビリティゾーンの設定が必要なのでVPCとAZが異なるサブネットを2つ選択します。ALBはAWS側で冗長を取りますが、その際AZを2つ以上指定しなければAZ障害時にサービスが利用できないということにもなりますので、ここで2つのサブネットを選択します。ここの選択が完了したら次の手順に移ります。
手順2:セキュリティ設定の構成
次の項目ですが、前項でリスナーにHTTPを選んだ場合は下記画面が表示されます。HTTPSを選んだ場合はSSL証明書をアップロードする画面になりますが、今回はそのまま次へ。ちなみにAWSではCertification Managerという無料で証明書を発行できるサービスがあるのでご活用ください。(証明書が無料ってすごいんですよ!)
手順3:セキュリティグループの設定
前回の記事でも設定したものです。ここではHTTP80が許可されていればOKです。しつこいですがセキュリティがガバガバ設定なので注意してください。不安であればソースをマイIPにして自分しかアクセスできないようにしてください。
手順4:ルーティングの設定
ここではELBからどこへトラヒックを流すかの設定です。ここでは新しくターゲットグループを作成するため、名前だけ入力して次へ進みます。
手順5:ターゲットの登録
手順4で作成したターゲットグループにEC2を割り当てていきます。登録するEC2にチェックを入れたら「登録済みに追加」を押します。そして確認へ。
手順6:確認
内容に問題がなければ作成を押して完了です。
負荷分散の確認
さて動作確認です。確認のためにEC2に接続して下記コマンドを順に実行します。
①rootユーザに切り替え
sudo su -
③Apacheのインストール
④Apacheの起動
systemctl start httpd
⑤Apacheの起動確認(Activeになっていることを確認)
systemctl status httpd
ここまででApacheの起動が完了しました。そしてWebページを表示するためのファイルを作成するため、下記コマンドを順に実行します。
⑥ファイルを格納するためのフォルダへ移動
cd /var/www/html
⑦ファイルを作成
touch index.html
⑧ファイルを編集(1台目であることが分かれば中身の記述は自由です。)
vi index.html
①〜⑧の手順を2台目の方にも実施します。
さてここまでの設定が完了したら、ALBで負荷分散されていることを確認していきます。ロードバランサーの画面で、作成したロードバランサーにチェックを入れ、下の方に「DNS名」と記載がある箇所があるのでその文字列をコピーしてブラウザのURLバーに貼り付けてEnterを押してみましょう。
初回は2台目にルーティングされました。
何回か更新ボタンを押すと、1台目を表すメッセージが表示されたり、とにかく負荷分散ができていることが確認できると思います。
ということでここまでの構成振り返り。
今回はEC2をいずれもPublicサブネットに置いていますが、EC2をPrivateサブネットに置く構成がセキュリティ的にも好ましいです。
ALBのパスベースルーティングについて
ここからタイトルの内容。ALBで負荷分散ができることは確認しましたが、ALBには他の使い方もあります。パスベースルーティングです。本やWebサイトによってはコンテントベースルーティングと呼ぶこともあるそうです。
これはURLの中に含まれる文字列に応じてサーバに振り分ける機能です。
例えばURLのパスに/sampleAが含まれていたら1台目のEC2に、/sampleBが含まれていたら2台目の方に振り分けられる、といった機能です。
まずは先程作成したターゲットグループから2台目を登録解除します。
この間にもう一つターゲットグループを作成していきます。右上のオレンジのボタンを押して作成していきます。UIは異なりますが、ALBを作成した時と同じ内容を入力します。名前は既存のものと区別がつくようにします。
そしてターゲットの登録には先程登録解除した2台目のEC2を登録します。
そしてターゲットグループの作成。
ロードバランサーに戻り、作成したALBにチェックし、画面下部のリスナータブを選択。その中にルールの表示/編集というのがあるのでそれをクリック。
画面上部の「+」を押して、そのあと表示される「ルールの挿入」をクリック。
今回はパスにsampleAが含まれていたら1台目に振り分ける設定をするのでIFのところにはsampleAを入力。THENを選ぶときは転送先を選択後、1台目のEC2が含まれているターゲットグループを指定。
同様にsampleB分も設定します。一度保存を押したあと、ルールの挿入(どちらでも可)を押して設定していきます。察しの良い方は気付くかもしれませんが、これらのルールは上から順に判定されていきます。
このように設定できたら完了です。
これでターゲットグループの設定は完了です。このままですとsampleAとsampleB配下にindex.htmlがないのでエラーとなりますのでそれぞれのEC2インスタンスに接続し、下記コマンドを実行します。
①rディレクトリ移動
cd /var/www/html
②sampleAまたはsampleB用のフォルダを作成(1台目にsampleA、2台目にsampleBのフォルダを作成してください。)
mkdir sampleA (またはmkdir sampleB)
③作ったフォルダにindex.htmlをコピー
cp index.html sampleA/ (またはcp index.html sampleB/)
これで準備完了です。ブラウザで確認してみましょう。
まず、ロードバランサーのDNS名をURLブラウザに貼り付け、その後ろに、/sampleAと入力してEnterをします。
(sampleAの後に「/」まで入れましょう!)
すると、1台目のEC2にルーティングされていることがわかります。この状態で更新ボタンを押しても2台目にルーティングされることはありません。
sampleBの方でも試してみましょう。
はい、こちらは2台目の方にしかルーティングされません。
メリット
ALBは主に負荷分散目的で使われることが多いですが、パスベースルーティングの使い道としては1台のALB配下に複数の種類のEC2をぶら下げることができます。本来機能の数だけALBを用意しなければならないところを1台で済むようになります。これは管理工数の削減であったり、ALB自体のコスト削減に繋がったりもします。
(すみません、このパターンで運用している案件を経験したことがないので当たり障りのないことしか言えません。)
その他の機能
ELB自体には紹介した機能以外にも様々な特徴があります。気になる方は下記ワードで調べると良いと思います。
・Connection Draining
・スティッキーセッション
それでは今回はここまで!