woshidan's blog

そんなことよりコードにダイブ。

Application Load Balancer(ALB)のコンポーネントについてメモ

先週、CLBではできなくてALBでできるようになったいくつかのことについてメモしました。

今週は、その記事に出てきたリスナーグループ、ターゲットグループといったALBの各コンポーネントに対し、そのコンポーネントを作成することで何を設定しているのかについてメモしておきます。

ロードバランサ

ALBのコンポーネントといったとき、それは実際のロードバランサのインスタンスであったり、管理画面上でぽちぽち追加していく一連の設定であったりすると思っていて、ロードバランサは

  • 一連の設定の中で一番大きい概念、かつ
  • 実際EC2インスタンスの上?*1で動いているだろうロードバランサ

のことを指します。

ALBのインスタンスを作成するときにはEC2の管理画面から作成しますが*2

  • 前提として利用するAZに少なくとも一つのパブリックサブネットを持つVPC

が必要です。ALBの作成時には名称以外に

などを指定します。さらに、作成時のフォームの流れで

も行います。

リスナー

ALBのリスナーは、

  • ALBが受信したリクエストのプロトコル、ポートをチェックして
  • リスナールールを用いてホスト、パスも見つつ、どのターゲットグループに転送したらよいかを決める

役割をするプロセスです。リスナーがチェックするプロトコルHTTPSの場合はリスナーに証明書をデプロイする必要があります。

リスナールール

リスナールールとは、

  • リスナーで指定したプロトコル・IPのリクエストがあった場合
  • ホスト・パスを見たり見なかったりして
  • どのターゲットグループへ転送するか
  • [HTTPSの場合] Amazon Cognito または OIDC を使用したユーザー認証を行うか

を決めるもので、リスナーに追加して利用します。

ALBで利用可能になったコンテントベースルーティング*6はリスナールールでのホスト・パスの条件設定と次の項のターゲットグループを用意して行います。

ターゲットグループ

CLBではロードバランサーに直接EC2インスタンスを追加し、追加したインスタンスの間でリクエストを分散させていましたが、ALBではリスナールールごとにリクエストの分散先を設定するようになりました。

このリスナールールごとに指定するリクエストの分散先の単位がターゲットグループです。ターゲットグループにEC2インスタンスをターゲットとして追加します。

ターゲットグループは配下のインスタンスにリクエストを転送してもよい状態かどうか確認するためのヘルスチェックの設定を持っています。

ターゲット

ロードバランサで外部からのリクエストを受け付け、リスナーがリスナールールに従ってリクエストを割り振るターゲットグループを決め、ターゲットグループの中で最終的にリクエストの転送先として選ばれるEC2インスタンスターゲットです。

instanceID(プライベートIPアドレスと紐付いている)か、プライベートIPアドレスを指定してターゲットグループに追加します*7

参考

現場からは以上です。

*1:マネージドサービスはどうもセキュリティグループなどの設定の構成を見ているとそうなっているきがする...

*2:https://cdn-ak.f.st-hatena.com/images/fotolife/w/woshidan/20180806/20180806093001.png

*3:セキュリティグループはEC2のインスタンスとしての設定なので、あとから詳細を修正・確認するときはEC2の管理画面から可能

*4:インターネット向けはロードバランサがリクエストを受信するまでの経路にインターネットを含む. このためロードバランサにパブリックDNSが作成時に割り振られる https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-internet-facing-load-balancers.html

*5:内部向けはロードバランサがリクエストを受信するまでの経路にインターネットを含まない。VPC内のあるインスタンスから別のインスタンス群にリクエストを分散させたい、といった場合に使うのか。VPC内部同士の通信であればプライベートIPアドレスで通信ができるので、作成時にパブリックDNS名は発行されない。パブリックDNSがなく外部からのアクセスの手段が提供されていないので内部向けロードバランサはVPC外部からのリクエストを受けつけない https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-internal-load-balancers.html

*6:ホスト名やパスを見てリクエストを割り振るインスタンス or インスタンスの集団を変える

*7:https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-type