はじめに
本記事は、Japan AWS Top Engineersであるクラウドインテグレーション事業部ソリューション開発セクションの畠山大治さんに監修をいただき執筆しております。
また、本記事はタイトルの通りELBの基本情報を紹介するものとなっており、AWSのサービスに初めて触れる人にもイメージしやすいような記事としております。そのため詳細な説明に欠ける部分もあるかと思いますがご容赦ください。
サービスの概要

Elastic Load Balancing(ELB)はその名の通り、AWSが提供する「ロードバランサー」サービスです。
そもそもロードバランサーとは受信したトラフィックを複数のサーバーに分散して送信することでアプリケーションの可用性と耐障害性を向上させる役割をもつリソースです。
一つのサーバーにアクセスが集中してしまうとネットワークの遅延やサーバーのクラッシュなどを引き起こしてしまいます。
そのような事態をロードバランサーはトラフィックを分散することで防いでくれるのです。
Gemini曰く
「ロードバランサーは、現代の高トラフィックなウェブサービスを支える縁の下の力持ち」だそうですよ
そんなロードバランサーをAWSマネージドで運用負担を軽減しつつ利用できる、というメリットがあるのがElastic Load Balancingなのです。
ELBで選べるロードバランサータイプ
ELBでは
Application Load Balancer(ALB)
![]()
Network Load Balancer(NLB)
![]()
Gateway Load Balancer(GWLB)
![]()
というロードバランサータイプが選択できます。
(Classic Load Balancerも選択可能ですが、CLBは現在EC2-Classicを利用している場合向けのリソースとなっており、新規での作成は非推奨となっています)

ALB
ALBは第7層アプリケーション層で機能し、HTTP/HTTPSといったプロトコルレベルでの負荷分散を行います。HTTPリクエストによる負荷分散を行う場合には、ALBの使用が推奨されます。IP、インスタンス、Lambdaをターゲットとすることができます。
ALBではコンテンツベースでの負荷分散が可能です。たとえばURLのパスに基づいたルーティングやHTTPヘッダの値に基づいたルーティング、クエリ文字列に基づいたルーティングなどを組み合わせることができます。それにより1つのロードバランサーで複数のターゲットに対してトラフィックを制御することが可能になっています。
また、ALBはCognitoとの連携によりシームレスなユーザー認証も可能です。
NLB
NLBは第4層トランスポート層で機能し、TCP/UDPといったプロトコルレベルでの負荷分散を行います。また、NLBは主にプロトコル、送信元 IP アドレス、送信元ポート、宛先 IP アドレス、宛先ポートに基づいてターゲットを選択しルーティングを行います。
低レイテンシで高スループットなロードバランサーで、1秒当たり数百万件のリクエストを処理できるため、大規模なシステムでの負荷分散を行う際に適しています。
GWLB
GWLBは第3層ネットワーク層で機能し、ファイアウォールや侵入検知システムなどの仮想アプライアンスのデプロイやスケーリングを行います。GWLBと仮想アプライアンスはGENEVEというプロトコルを使用し通信を行います。
ELBの仕組み
ではそんなELBの仕組みについてより詳しく解説します。
ELBは受信したトラフィックをターゲットグループに含まれるインスタンスに振り分けます。この時、ヘルスチェックで正常だと判断されたインスタンスにのみトラフィックが振り分けられるようになっています。
ヘルスチェックとは、ターゲットのEC2インスタンスなどが正常に機能しているかを定期的に確認する仕組みです。つまり、ある1つのインスタンスに異常が生じた場合、ELBは自動的にそのインスタンスを除いて負荷分散をしてくれます。

例えば、上記の画像にはロードバランサーのターゲットとして2つのインスタンスが設定されていますが、下のインスタンスは正常状態を示しているのに対し、上のインスタンスは異常状態を示しています。これは上のインスタンスに関してはヘルスチェックが失敗したことを示しています。この場合、上のインスタンスにはトラフィックは振り分けられず、正常であると判断されたインスタンスにのみトラフィックが送られるということになります。
ELBではCookie情報に基づいてセッションを維持するようルーティングを行うようにすることも可能です。つまり、同一のクライアントからのトラフィックを同一のインスタンスにルーティングするよう設定することもできます。この設定はALBの場合デフォルトでは無効となっていますが、ターゲットグループの設定を変更することによって有効化することができます。
また、ELBはアベイラビリティゾーン(AZ)をまたがって負荷分散をすることも可能です。AZをまたがった構成(マルチAZ構成)にすることでシステムの可用性を高めることができます。
ハンズオン
では、実際にシステムを構築してELBのはたらきを実践的に確認してみたいと思います。
今回構築したシステムは以下の構成図の通りです。
IGWを通して限られた(セキュリティグループによって制限された)IPアドレスからのみALBにアクセス可能にします。その際にはインターネットを経由した接続となります。そしてそのALBから2つの異なるAZ内に配置されたEC2インスタンスにトラフィックを分散する、という構成です。
前段で紹介したマルチAZ構成を採用し可用性を高めています。

(接続の流れを色別の矢印にて示しております)
構成図通り構築してみましたのでマネジメントコンソール上で確認してみましょう。

ELBが作成できていることがわかりますね。
では実際にALBのDNS名を使用してブラウザからEC2インスタンス内のWebサーバーに接続してみましょう。
接続されるEC2インスタンスの違いがわかりやすくなるように構成図内の左のインスタンスを「web01」、右のインスタンスを「web02」とします。
まずはweb01のインスタンスに接続します。するとEC2インスタンスにインストールしたnginxの画面が現れました。(分かりやすいようテキストを編集しています)

しかし、ページを更新すると…

今度は2つ目のWebサーバー(web02)に接続されていることがわかります。
まとめ
実際に構築して疎通確認をしてみると視覚的にALBのはたらきが見えるのが面白いですね!とても楽しく学ぶことができました。
今後もたくさんのハンズオンを通して楽しんでAWSを学んでいきたいと思います。
最後までご覧いただきありがとうございました。