【AWS初心者向け】5分でざっくりわかる!Amazon ELBをわかりやすく解説!
こんにちは!株式会社ビヨンド四国オフィスのペルシャ猫、いのうえです。
今回は、AWSで提供されている【ロードバランサー】について解説していきたいと思います!
【ロードバランサー】とは?
よく耳にするロードバランサーですが、簡単に説明するとサーバーのロード(負荷)をバランシング(分散)する装置のことです。
アクセスが多くなくサーバーが処理するリクエストが少ない場合は、ロードバランサーを使わなくても問題はありません。しかし、何らかの理由でサーバーにアクセスが集中したとします。
そんな時、サーバーが重たくなってサイト表示に時間がかかることを経験した方も多くいらっしゃるのではないでしょうか?
インターネットからサーバーにアクセスがあると、サーバーはその機器に搭載されているCPUやメモリといったリソースを使ってリクエストを処理します。
何らかの理由でアクセスが集中しリクエスト数が急激に増えると、web利用者のブラウザでページ表示が遅くなったり、表示されなくなったりします。このページ表示が遅くなったり表示されなくなったりするといった、リクエスト処理が滞っているときが高い負荷の状態です。
サーバーにアクセスが集中することによって、ロード(負荷)が高い状態であるといえます。
このような負荷の高い状態で、サイト表示が重い、あるいは表示されない状態を防ぐために活躍するのがロードバランサーです。
負荷を複数のサーバーに分散することにより、1つのサーバーに負荷が集中することを防ぐことができます。
ロードバランサーの仕組みにより、webアクセスへの集中だけでなくサーバー故障の場合などの場合にも、web利用者に安定したサービスを提供することができます。
サーバーにかかる負荷の状態は常に一定とは言えません。そのため、常に安定したサービスを利用者に提供するためにはロードバランサーの導入が必要だといえます。
【ELB】とは?
ELBとは、【Elastic Load Balancing】の略で、AWSが提供するロードバランサーです。
前述で記したように、ロードバランサーとは、サーバーに集中するアクセス(トラフィック)を、複数のサーバーやネットワークに振り分けて、負荷を分散する仕組みです。1つの負荷を分散させるので、【負荷分散装置】とも言います。
負荷分散のほかにも、ヘルスチェック機能も備えています。ヘルスチェック機能を備えていることで、リアルタイムでサーバーのパフォーマンスをモニタリングすることができます。
それにより、異常のあるサーバーを見つけるとそのサーバーへのトラフィック送信を中止し、他の正常な状態のサーバーにトラフィックを送信し、負荷分散することができます。
ELBは負荷を自動的に分散し、サーバーがダウンしてしまうのを防いでくれる役割があります。
さらに、ELBは負荷の状態に応じて自動的にスケーリングを行い、管理者(エンジニア)が手動でELBの台数を増やしたり、スペックを上げたりする手間も必要はありません。
突然アクセスが増加するなどのトラフィック上昇が予測される場合は、AWS Auto Scalingと併用することも可能です。それにより、リクエスト量に合わせたサーバーの増減が可能となり、サーバーダウンを防ぐことができます。
また、ELBの特徴として、アベイラビリティゾーンが違う場合にも、設置されているEC2のトラフィックを負荷分散させることができます。
すべてのロードバランサーに対して複数のアベイラビリティーゾーンを有効にすることをお勧めします。
ただし、Application Load Balancer では、少なくとも 2 つ以上のアベイラビリティーゾーンを有効にする必要があります。
この設定により、ロードバランサーが引き続きトラフィックをルーティングできるようになります。
1 つのアベイラビリティーゾーンが利用できなくなるか、正常なターゲットがなくなった場合、ロードバランサーは別のアベイラビリティーゾーンの正常なターゲットにトラフィックをルーティングできます。
参考サイト:ELBの仕組み
■ELBの種類
ELBには、ALB、NLB、CLBの3種類があります。
ALB | 【Application Load Balancer】の略です。 HTTP及びHTTPSに最適なロードバランサーです。 OSI参照モデルにおけるアプリケーション層で動きます。 HTTP、HTTPSプロトコルの対応が強化された単一ロードバランサーです。 webアプリケーションでは、最も利用されているロードバランサーです。 要求コマンドなどの命令内容を見て判断するので、宛先のURLのディレクトリ単位で振り分けるようなこともできます。 インスタンスとロードバランサーとの通信を暗号化することもできます。 また、振り分け先として、IPアドレスを指定することが可能です。 |
NLB | 【Network Load Balancer】の略です。 OSI参照モデルにおけるトランスポート層(送信されたデータの制御を担う層)で動きます。 パケットと呼ばれる断片データしか見ないので、ALBほどの細かい振り分けはできません。 代わりに、振り分け先として静的IPアドレスを設定できたり、サーバーにアクセスしてきたクライアント側のIPアドレスをそのままサーバーに伝える設定にしたりできます。 NLBは、超低遅延で高スループットを維持しながら秒間何百万リクエストをさばける様に設計された最新のロードバランサーです。 NLBは、トラフィックをVPC内のターゲットにルーティングし、低いレイテンシーを維持しながら1秒間に数百万件ものリクエストを処理できるといった特徴があります。 そのため、大量のアクセス(負荷が急激に上昇する)が予測されるサーバーに向いています。 |
CLB | 【Classic Load Balancer】の略です。 ELBの中では、古いタイプのロードバランサーです。 対応できるプロトコルが多いのが特徴です。 TCP、SSL/TLS、HTTP、HTTPSなど多くのプロトコルに対応しています。 複数のEC2インスタンスにおける基本的な負荷分散を提供し、リクエストレベルと接続レベルの両方で動作します。 EC2-Classicネットワーク内に構築されたアプリケーションを対象としています。 複雑な設定ができないのが弱点で、現在はAWSから使用が推奨されていないロードバランサーです。 |
上記の代表的なAWSのELB、3つ以外にも【GLB】も存在します。
GLBとは、【Gateway Load Balancer】の略です。
Gateway Load Balancerを使用すれば、サードパーティーの仮想ネットワークアプライアンスを簡単にデプロイ、拡張、および実行できます。
サードパーティーアプライアンスのフリートに負荷分散とAuto Scalingを提供するGateway Load Balancerは、トラフィックの送信元と送信先に対して透過性があります。
この機能により、セキュリティ、ネットワーク分析、およびその他のユースケースでサードパーティーのアプライアンスを操作するのに最適です。
参考サイト:Elastic Load Balancing
まだリリースしてまもないサービスなので、勉強してから別途ブログにできたらと思います!
ちなみに、私がこのブログを書くためにALBについて検証したところ、
検証インスタンスにALBを紐づけただけでは、アクセスログを確認すると「403」ステータスコードが返ってきました。
172.31.4.72 - - [15/Jun/2021:07:59:03 +0000] "GET / HTTP/1.1" 403 4897 "-" "ELB-HealthChecker/2.0"
その場合、ドキュメントルート以下に「index.html」ファイルを置き、ファイルの中に「aws test」という文字を入れ、ブラウザからアクセスすると無事「200」ステータスコードが返ってきました。
※これはサーバーにapacheがインストールされていることが前提条件となります。
まずは、ドキュメントルート以下に移動します。
[root@ip-172-31-38-25 httpd]# cd /var/www/html
「index.html」というファイルを作成します。
[root@ip-172-31-38-25 html]# touch index.html
作成した「index.html」ファイルに「aws test」と記述します。
[root@ip-172-31-38-25 html]# vi index.html
ブラウザから検証用インスタンスにアクセスしたい時は、chromeの検索バーに【パブリック IPv4 アドレス】を入力するとアクセスすることができます。
アクセスログを再度、確認してみましょう!
172.31.4.72 - - [15/Jun/2021:08:38:35 +0000] "GET / HTTP/1.1" 200 9 "-" "ELB-HealthChecker/2.0"
無事ステータスコードが「200」になり、AWSのコンソールから「ターゲットグループ」を確認すると「ターゲットグループ」のステータスも、Unhealthyからhealthyに変わりました!
まとめ
ロードバランサーは例えると、
「あなたの仕事はこれですよ~」「あなたにはこの仕事をお願いします」
というような会社でいう上司(司令塔)のようなものです。
ロードバランサーをうまく使うことで、サーバーダウンを防ぐことができ、サイトの表示遅延や「サイトが表示されない」といった困りごとを解消することができるので、サイトへの信頼度も高まりそうです。
私もロードバランサーのような仕事ができる人材になりたいものです。
日々成長、日々前進。
毎日、私自身をアップデートしていかなければ!!!
最後まで読んでくださって、ありがとうございます。