ロードバランサーの作成
プライベートサブネット内に作成したWebサーバーはまだインターネットに公開されていないため、公開する設定を行い、Webブラウザ上で実際に接続できたか確認していきます。
ロードバランサーの役割
私たちが日々利用しているWebサービスには、毎日多くのユーザーがサーバーにアクセスしてきます。よって1台のWebサーバーでは、ユーザーからのたくさんのリクエストに耐えられなくなり、サーバーの故障の原因となります。そこで、AWSにはWebサーバーを増やしアクセス数に応じて最適なサーバー台数を確保するスケールアウトと呼ばれる機能が備わっており、このスケールアウトを実現するのがロードバランサーと呼ばれるサービスです。
このロードバランサーには3つの役割が存在します。
① リクエスト分散機能
Webサーバーへのリクエストを均等に分散させて、一つのサーバーにアクセスが集中しないようにすることができます。サーバーへの負荷分散行うことで、故障を防ぐだけでなく故障が疑われるサーバーには接続せずに、正常なサーバーへの接続をするなど、可用性を実現しています。
② SSL処理
SSL(Secure Sockets Layer)は送受信しているデータを暗号化する技術です。よくWebブラウザのURLにある"https://~"で始まるWebサイトが、SSLを利用して通信が暗号化されています。ブラウザとサーバーのデータは、暗号化されているため、第三者からデータの傍聴と改ざんを防ぐことができます。また、暗号化や複合といった複雑な処理をWebサーバー自身でやると負荷がかかりますが、ロードバランサーには高速に処理できる機能が備わっているので、高速通信も実現できます。
③ 不正リクエスト対策
Webサーバーに正しいリクエストが来て、適切にユーザーとサーバー間のやりとりが行われるとは限りません。中には、悪意あるユーザーや予期せぬリクエストによってサーバーが乗っ取られることや、故障に繋がることもあります。しかしこれを解決するためにWebサーバーに不正なアクセス検知をして防ぐ処理を施しても、これはこれで負荷をかけることになり、故障の原因やサーバーからのレスポンスを悪くするなどあまり良くありません。しかし、ロードバランサーには、これらの不正なアクセス検知する機能が備わっているため、サーバーごとにセキュリティ対策を行わなくとも、効率的に不正なアクセスから守ることができます。
AWSコンソール画面
今回は、AWSが提供しているHTTPやHTTPS通信によるアクセス分散に最適なALB(Application Load Balancer)を利用していきます。また、インフラの動作確認としてRubyを使用するため、ポート番号は3000を使います。
ALBの作成
名前 | VPC | Mapping | セキュリティグループ |
---|---|---|---|
sample-elb | sample-vpc | subnet-(public01, 02) | default,sample-sg-elb |
ターゲットグループの作成
名前 | プロトコル | ポート | Available instances |
---|---|---|---|
sample-tg | HTTP | 3000 | sample-ec2-(web01, web02) |
ターゲットグループは、ロードバランサーからWebサーバーにアクセスする時に関係する設定を行います。ターゲットグループは複数作成することができるため、条件によってWebサーバーへのアクセスの振り分けを行うことが可能です。
リスナーの設定画面より、"Create target group"を押して、実際に作成していきます。
上記のように"inlude as pending below"を押して、最後に"Register pending targets"を押します。
最後に先ほど作成した"sample-tg"を選択して完了です。
動作確認
まずは、ターミナルを2つ開きそれぞれ以下のコマンドを入力しサーバーに接続します。
$ ssh web01
$ ssh web02
そして、それぞれにvimコマンドでindex.htmlファイルを作成します。作成したWebサーバーのAmazon Linux2には、あらかじめインストールされているPythonでHTTPサーバーを立て、まずはヘルスチェックを行います。
$ vim index.html(index.htmlファイルを作成)
<html>
<body>
Sample site
</body>
</html>
$ python -m SimpleHTTPServer 3000
その後、Webサーバーにヘルスチェックを断続的に行われます。ヘルスチェックとは特定のサーバー上のサービスに、作業を正常に実行できるかどうかを確認する方法です。ロードバランサーは、各サーバーにこの質問を定期的に行い、トラフィックを転送しても安全なサーバーを判断します。
コンソール画面上のターゲットグループの詳細画面で、Health statusが"healthy"になるまで、ヘルスチェックを行います。"healthy"になれば、対象のWebサーバーへリクエストがルーティングされることを意味しています。
次に、ロードバランサーの詳細画面からDNS名をコピーしブラウザに入力すると、index.htmlファイルの内容が出力されるのが確認できます。
参考
AWSではじめるインフラ構築入門 翔泳社出版