Application Load Balancer(ALB)のコンポーネントについてメモ
先週、CLBではできなくてALBでできるようになったいくつかのことについてメモしました。
今週は、その記事に出てきたリスナーグループ、ターゲットグループといったALBの各コンポーネントに対し、そのコンポーネントを作成することで何を設定しているのかについてメモしておきます。
ロードバランサ
ALBのコンポーネントといったとき、それは実際のロードバランサのインスタンスであったり、管理画面上でぽちぽち追加していく一連の設定であったりすると思っていて、ロードバランサは
のことを指します。
ALBのインスタンスを作成するときにはEC2の管理画面から作成しますが*2、
- 前提として利用するAZに少なくとも一つのパブリックサブネットを持つVPC
が必要です。ALBの作成時には名称以外に
- ロードバランサと外部インターネット上のクライアント間で受信/送信 OK・NGのIP・プロトコル・ポートを指定するセキュリティグループ*3
- ロードバランサが受信したリクエストの中で、バックエンドのEC2インスタンス達に転送していいリクエストがあるか、プロトコル・ポートをチェックするリスナー
- インターネット向けのロードバランサー*4か、内部向けのロードバランサー*5か
- ロードバランサのリクエスト転送先のインスタンスがあるAZ
- ロードバランサにきたリクエスト転送先EC2インスタンスを登録するターゲットグループ
などを指定します。さらに、作成時のフォームの流れで
も行います。
リスナー
ALBのリスナーは、
役割をするプロセスです。リスナーがチェックするプロトコルがHTTPSの場合はリスナーに証明書をデプロイする必要があります。
リスナールール
リスナールールとは、
- リスナーで指定したプロトコル・IPのリクエストがあった場合
- ホスト・パスを見たり見なかったりして
- どのターゲットグループへ転送するか
- [HTTPSの場合]
Amazon Cognito
またはOIDC
を使用したユーザー認証を行うか
を決めるもので、リスナーに追加して利用します。
ALBで利用可能になったコンテントベースルーティング*6はリスナールールでのホスト・パスの条件設定と次の項のターゲットグループを用意して行います。
ターゲットグループ
CLBではロードバランサーに直接EC2インスタンスを追加し、追加したインスタンスの間でリクエストを分散させていましたが、ALBではリスナールールごとにリクエストの分散先を設定するようになりました。
このリスナールールごとに指定するリクエストの分散先の単位がターゲットグループです。ターゲットグループにEC2インスタンスをターゲットとして追加します。
ターゲットグループは配下のインスタンスにリクエストを転送してもよい状態かどうか確認するためのヘルスチェックの設定を持っています。
ターゲット
ロードバランサで外部からのリクエストを受け付け、リスナーがリスナールールに従ってリクエストを割り振るターゲットグループを決め、ターゲットグループの中で最終的にリクエストの転送先として選ばれるEC2インスタンスがターゲットです。
instanceID(プライベートIPアドレスと紐付いている)か、プライベートIPアドレスを指定してターゲットグループに追加します*7。
参考
- https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/application-load-balancers.html
- https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-type
- https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-listeners.html
- https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-internal-load-balancers.html
- https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-internet-facing-load-balancers.html
現場からは以上です。
*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