batchiです。
過去2回ほどこのテーマで書いていました。

前置き編
中継ぎ編

気づいたらパスベースだけでなくホストベースでもルーティングできるようになっていた。

びっくりですね。早いですね。AWSのアップデートがね。
こちとらパスベース前提の記事も書き終わっていないというのにね。

でも、この新機能を記事に盛り込める、とプラスに考えます。
新機能についての詳細は2017/4/5発表の以下記事をどうぞ。

(新規 – AWS Application Load Balancer に対するホストベースのルーティングのサポート)
https://aws.amazon.com/jp/blogs/news/new-host-based-routing-support-for-aws-application-load-balancers/

CLBとALBのコンポーネントの違い

なぜALBではパスベース(そしてホストベース!)でのルーティングが可能で、
CLBではできないのか、その答えはコンポーネントの違いだと私は捉えています。

簡単に言えば、「ターゲットグループ」というコンポーネントの有無に尽きるかと思います。

CLBのコンポーネント

ALBとの対比にちょうどいいコンポーネント図が無かったので、
勝手に作りました。正確性は保障しておりません。

CLBコンポーネント図

簡単に言えば、ロードバランサーがあって、リスナーがあって、配下にインスタンスがあります。
ロードバランサーが配下のインスタンスに対してヘルスチェックを実施します。
どのような内容でヘルスチェックを行うかは配下のインスタンスすべてに対して共通です。

ロードバランサーには1つ以上のリスナーが必要です。
1つのリスナーにつき以下2つを定義します。

  • クライアントとロードバランサー間の接続プロトコル・ポート…①
  • ロードバランサーとバックエンドインスタンス間の接続プロトコル・ポート…②

CLBのリスナーでサポートされているプロトコルは以下の通りです。

  • HTTP(レイヤ7)
  • HTTPS(レイヤ7)
  • TCP(レイヤ4)
  • SSL(レイヤ4)

1つのリスナーにおいて、①と②で異なるレイヤのプロトコルを設定することはできません。
また、①に設定するポート番号は複数のリスナーで重複することはできません。

どのようなリスナーを経由しても、ルーティング先の候補は配下のインスタンス全台になります。
条件を指定してルーティング先を限定する、ということはできません。

ALBのコンポーネント

こちらは以下ドキュメントから拝借してきました。
(http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/introduction.html#application-load-balancer-components)

component_architecture

CLBと比べてコンポーネントが増えています。
リスナーの中にルールというコンポーネントがあったり、
インスタンスがターゲットというコンポーネントになっていたり、
(つまりEC2インスタンス以外のリソースを宛先にできる。らしい)
ターゲットの集まりであるターゲットグループというコンポーネントがあったりします。

どのような内容でヘルスチェックを行うかはターゲットグループ単位で設定できるようになっています。

少し注釈をつけます。

ALBコンポーネント図

CLBにおいては「①で受け取ったら問答無用で②にルーティングする」、というイメージですが、
ALBにおいては、「リスナーで受けとったらルールに応じてターゲットグループにルーティングする」というイメージです。

ターゲットグループごとにプロトコルとポート番号の組み合わせを定義します。
ターゲットグループに対してターゲット(主にインスタンス)を関連付けていきます。
(CLBではロードバランサーにインスタンスを関連付ける)

リスナーとターゲットグループで使用できるプロトコルは以下の通りです。

  • HTTP(レイヤ7)
  • HTTPS(レイヤ7)

CLBと違いレイヤ4のプロトコルは指定できません。

ちなみに、CLBの①と同様、複数のリスナーで同一のポート番号を指定することはできません。

複数のターゲットグループにインスタンスを関連付けることで、
同一インスタンスの異なるポートにルーティングを行う、ということも可能になります。

ヘルスチェックは実行対象の単位が変わっただけでなく、
どのようなHTTPステータスコードが返ってくれば正常とみなすかを設定可能です。
(CLBでは200固定)

おわりに

ALBは、ターゲットグループ(と、ルール)というコンポーネントが追加されたことで、
CLBに比べ柔軟なルーティングが可能になっていることがわかります。

ホストベースとかパスベースをひっくるめて
コンテントベースのルーティングと言うらしいです。

CLBとALBそれぞれできることが違いますので、用途によって使い分けましょう。

以上です。

TOP