プログラマでありたい

おっさんになっても、プログラマでありつづけたい

AWSのロードバランサ、CLB, ALB, NLBの機能差まとめ

いい加減に12冠にならないとなぁということで、スキマ時間にちょっとづつ勉強しています。隙間時間だと、前回勉強したところの続きに戻るまでに隙間時間が過ぎてしまう辛みがありますが、皆さんいかがお過ごしでしょうか?

 私にとっての最鬼門のAWS認定アドバンスドネットワーク専門知識の試験範囲の確認のために公式トレーニングの試験対策を見ています。AWSの試験で一番わからないのが、どのサービスが対象範囲なのかという点だと思います。これを受けることにより、ここを勉強すればよいのだというのがはっきりするのでお勧めです。
Exam Readiness: AWS Certified Advanced Networking - Specialty (Digital)

 その中で、AWSのロードバランサであるELB(CLB, ALB, NLB)のまとめ表があったので紹介しておきます。

3種類のELBの違いを1枚の図でまとめる

 みなさん、3種類のELB(CLB, ALB, NLB)の違いを説明できますでしょうか?CLBはTCPとHTTP,HTTPSが使えて、ALBはHTTP,HTTPSだけでNLBはとか頭の中を駆け巡ると思います。その辺を一枚の表にしておけばもう悩みません。常々作ろうと思いつつ、既にまとめてあったので紹介させて貰います。どん!!

f:id:dkfj:20201013115235p:plain

※2020年10月13日 11:55追記 
優しいマサカリが飛んできたので、図を修正しています。NLBも2019年1月よりTLS Terminationが出来るようになっています。Container Supportについてはもう少し補足が必要なので、Container Native Supportに変更の上で、下に補足を書いています。

 図の項目名で、一部分かりづらいものがあるので補足しておきます。

Protcol

 どのプロトコルを受け付けるかですね。NLBはレイヤー4のサービスなのでTCPのみです。ALBはレイヤー7でHTTP,HTTPSの他にHTTP/2も受け付けます。CLBはそういえばSSLも受け付けましたね。UDPについては言及なしの世界線です。

SSL offloading

 SSLオフロードは、TLSまたはSSLの通信を紐解いて後ろに平文の通信で流すという機能です。現実的にはSSLはもう使わないのでTLS offloadingというのが正しいのでしょうね。CLBとALBがもともと対応していましたが、NLBも対応しました。つまりこの観点では、どれを使っても大丈夫。これがないと、個々のWebサーバーに直接SSLの証明書をそれぞれ入れないといけないので不便です。試験問題だと逆に、Webサーバからアプリケーションサーバ間の通信も暗号化したままにしたいというのがあるので、頭のひねりどころですよ

IP as target

 これは言葉にすると解りづらいのですが、ターゲットグループにIPを指定できるかという事です。一般的にはインスタンスを指定すると思いますが、ALBとNLBはローカルIPアドレスを指定できます。これ使うと、VPNやダイレクトコネクト先の(嬉しいかどうかしりませんが)オンプレサーバを指定するといったことも可能です。オンプレに対して使うかどうかは別として、設計の幅が広がるのは確かです。リバースプロキシ立ててたけどっていうのを、NLBやALBで代替できるケースも多数あるでしょうね。

Path-based routhing, host-base routing

パスベースのルーティングというのは、example.com/imageやexample.com/contentsなどドメインの後の/以下の部分を判断して振り分けるという機能です。ホストベースのルーティングは、app.example.comやimage.example.comといったようにサブドメイン部分を判断して振り分けるということです。これが出来るのは、ALBだけです。そもそもCLBはELBとターゲットは1対1の紐付けしかできません。ALBは、1対多の紐付けができます。便利ですねぇ~。その気になれば、複数のシステムでALBを共有してコスト削減できますが、システム同士が密結合になるので止めた方がよいですね。

Static IP

 パスベース・ホストベースのルーティングができるのがALBの売りですが、このStatic IPの機能がNLBの売りの一つです。このStatic IPはロードバランサーに固定のIPアドレスを設定できます。ALBやCLBはURLベースでしたが、NLBは固定のIPを指定できます。これが利点になることが多いです。IPを固定したいという用途がある時に、前にNLBを置くことにより解決することができます。

WebSockets

 WebSocketsはシンプルに対応しているかどうかですね。ALBとNLBが対応しています。

Container Support

 Container Support。これは、ECS等に対応している「仮想マシンでのホップなしにコンテナネイティブなルーティングができる」かという点です。細かくケース別にわけると長くなるので、別途まとめようと思いますが、ALBとNLBが対応しています。単純なルーティングだけであればCLBでも一応使えます。

まとめ

 AWSはCLB, ALB ,NLBと3種類もロードバランサがあって解らんよという方もいると思います。まずは、この表で頭の中を整理してみるのも良いのではないでしょうか。ただ実質CLBはリタイアしていく運命のサービスですから、ALBとNLBだけ覚えれば充分です。WebサイトのロードバランスにALB、それ以外の用途はNLBとなることが多いです。原則のALB覚えて、それに対応できないケースを解決しているNLBになります。NLBの構成図を見ると、なるほどなぁとなることが多いです。一度、目を通してみると良いですよ