ELBをよりよく理解するためにリリースの歴史と各機能面から紐解いた

2019.05.28

はじめに

どこかの世界の錬金術における基本「理解→分解→再構築」は何物に対しても通じるところがある、と感じるこの頃です。

ELBの使い分けを単純な機能面だけで追っていたものの、それだけでは性質を掴みきれていなかったと試験を通して実感しました。そこで、リリース時期や機能面を照らし合わせて、一つ一つの関連性も辿ってみました。

ELBとは

AWSにおけるロードバランサです。

タイプ 登場時期
CLB 2009年05月17日
ALB 2016年08月12日
NLB 2017年09月07日

タイプ別の比較については公式の比較表がわかりやすいと思われます。

CLB

初出は恐らく2009年5月17日1。当時のロードバランサに種類はなく、ELBは単一のものでした。

ALB

ALB(Application Load Balancer)が登場2したのは2016年8月12日で約7年後です。大きなポイントとしては、以下の対応が挙げられます。

  • パスベースのルーティングが可能に
  • HTTP/2WebSocketのネイティブ対応

ALB登場後にそれまでのELBはCLB(Classic Load Balancer)と呼ばれることになります。初登場時のDevIO記事も合わせて見ることでユースケースも理解しやすいかと思われます。

【新機能】新しいロードバランサー Application Load Balancer(ALB)が発表されました

NLB

1年後の2017年9月7日に、NLB(Network Load Balancer)が登場3します。ALBやCLBとの違いの一つとして、固定のIPアドレスが設定可能になっている点が挙げられます。

機能面から以下の選択となり、CLBが選択されるユースケースはEC2-Classic環境でなければ大幅に減ったようです。

ALB
HTTP関連
NLB
それ以外のプロトコルや静的なIPが必要な場合

詳細は初登場時のDevIO記事も合わせて読むと理解しやすいかと思われます。

[新機能]静的なIPを持つロードバランサーNetwork Load Balancer(NLB)が発表されました!

ALBの特徴

CLBに対してALBに存在する特徴の幾つかについて詳細に触れてみます。

HTTP/2サポート

HTTP/2はプロトコルバージョンのことであり、現在は

  • HTTP/1.0
  • HTTP/1.1
  • HTTP/2

の3つが公開されています。なお、HTTP/2は制定時は2.0表記であったものの、2表記での公開となったようです。

HTTP/2のメリットの一つにリクエストの並列化があります。HTTP/2とHTTP/1.1の違いについては、以下の記事に図解にてまとめられています。

WebSocketサポート

WebSocketはHTML5にて追加された通信規格で、TCP上で双方向の通信を実現するプロトコルです。

WebSocketについて、実際の利用例等は以下の記事が参考になると思われます。

CLBが選択肢となるケースについて

現在でもCLBが選択肢となる状況として、EC2-Classicを利用しているかどうかが挙げられます。これは2013年12月3日以前に作成したAWSアカウントの場合に該当する可能性があります。

EC2-Classicは他のアカウントとネットワークを共通しています。VPCのアカウント毎に隔離したセキュアな環境への移行が求められる場合は下記のDevIO記事が参考になると思われます。

利用しているアカウントがEC2-Classicに対応しているかどうかは、CLI(aws ec2 describe-account-attributes --region=XXXXX)で確認可能です。

対応している場合

% aws ec2 describe-account-attributes --region=XXXXX
{
    "AccountAttributes": [
        {
            "AttributeName": "supported-platforms",
            "AttributeValues": [
                {
                    "AttributeValue": "EC2"
                },
                {
                    "AttributeValue": "VPC"
                }
            ]
        }
    ]
}

対応していない場合

% aws ec2 describe-account-attributes --region=XXXXX
{
    "AccountAttributes": [
        {
            "AttributeName": "supported-platforms",
            "AttributeValues": [
                {
                    "AttributeValue": "VPC"
                }
            ]
        }
    ]
}

ELBをネットワーク経路から見る場合

ALB/CLB/NLBのネットワーク経路、及び機能による動作の違いについては、以下のDevIO記事の図解がよりわかりやすいかと思われます。

まとめ

書籍等での解説はロジカル・シンキングの点で観るとタイプ別及び機能面での要約および一覧化、つまりso whatがなされています。ここに、why so の点からも補強することで、より良い理解につながるのではないかと考えられます。

ELBの理解は実際の利用が一番なのですが、各タイプをそれぞれ使いこなすシーンに都合よく当たることも考えにくく、歴史の面から辿ってみました。AWSでのロードバランサについて使い所が悩ましい方等の参考にもなれば幸いです。


  1.  
  2.  
  3.