TL;DR
https://www.kanzennirikaisita.com/posts/aws-alb-concepts
ロードバランサー
負荷分散システム。トラフィックを複数のターゲット(EC2 インスタンス、コンテナ、IP アドレス、Lambda 関数、仮想アプライアンスなど)に分散させることで以下のメリットがある
特徴
高可用性
多数のAZに配布したEC2インスタンスなどにトラフィックを分散するので、一つのAZがダウンしてもユーザーのアプリケーションは問題なく使える。
統合性
ELBはいろんなAWSサービスと一緒に使用できる
- Auto Scaling:拡張性管理及びワークロード分散業務を効率的に可能。
- Route 53:一緒に使うことでDNS失敗に対応できる。
安全性
- 統合認証管理、SSL復号化、ポートフォワーディングなど多数のセキュリティ機能を提供
- ELB用セキュリティグループを生成して流入·流出するトラフィックを効果的にコントロール可能
リスナー
プロトコルやポートを設定することでロードバランサーへの接続リクエストをチェックするもの
A listener is a process that checks for connection requests, using the protocol and port that you configure.
リスナーに対して定義したルールにより、ロードバランサーが登録済みのターゲットにルーティングする方法が決まる。
1つのリスナーに対して複数のターゲットグループを指定することが可能
Protcol: HTTP
Port: 80
DefaultAction:
Type: forward
TargetGroupArn: !Ref TargetGroup
上記の設定であれば、「HTTPプロトコル & ポート番号80」でのロードバランサーへのリクエストは、
「!Ref TargetGroup」へ転送される
Listener Configuration
プロトコルにHTTPSを指定することで暗号化および復号の作業をロードバランサーに任せることができる。HTTPSを使用する場合には少なくとも1つのSSLサーバー証明書をリスナーにデプロイする必要がある
Listener Rles
リスナーはそれぞれデフォルトのルールを持っているが、独自にルールを追加することもできる
ルールは
- 優先度
- 1つ以上のアクション
- 1つ以上の条件で構成される
Default Rules
リスナーを作成するとき、デフォルトのルールのアクションを定義する
デフォルトのルールには条件を付与することはできない
リスナーに設定されたいずれのルールも満たさない場合にデフォルトルールのアクションが実行される
Rule Priority(優先度)
ルールは優先度をもち、優先度の低い順に評価される(デフォルトルールが最後に評価される)
デフォルトルール以外のルールの優先度はいつでも変更可能
Rule Actions(アクション)
ルールのアクションはタイプ、順序、アクションを実行するために必要な情報をもつ
Rule Conditions(条件)
ルール条件はタイプと設定情報をもつ
条件が満たされると、そのアクションが実行される
Rule Action Type
アクションの種類
authenticate-cognito
Use Amazon Cognito to authenticate users.
authenticate-oidc
Use an identity provider that is compliant with OpenID Connect (OIDC) to authenticate users.
fixed-response
ステータスコードを返す
You can use this action to return a 2XX, 4XX, or 5XX response code and an optional message.
The count of successful fixed-response
actions is reported in the HTTP_Fixed_Response_Count
metric
forward
一番良く使うのがこれ
リクエストを1つ以上のターゲットグループにルーティングする
複数のターゲットグループを指定した場合は、各ターゲットグループに重みを指定する必要がある
If you specify two target groups, one with a weight of 10 and the other with a weight of 20, the target group with a weight of 20 receives twice as many requests as the other target group.
デフォルトでは、セッション情報を維持しない。
セッションが維持されることを保証するためには、ルールに対してターゲットグループのstickinessを有効化する必要がある。
これにより、ロードバランサーが最初にターゲットグループにルーティングする際、AWSALBTGというクッキーを生成し、クライアントへのリスポンスに含める。
このクッキーには、ルーティングされたターゲットグループの情報が含まれており、クライアントがこのクッキーを含めることによってリクエストは Cookie で指定されたターゲットグループにルーティングされる
Application Load Balancer は、URL エンコードされた Cookie 値をサポートしていない
redirect
Redirect requests from one URL to another.
Rule Condition Type
host-header
http-header
http-request-method
path-pattern
query-string
source-ip
1 つのルールにつき最大 5 つの一致評価を指定できる
ターゲットとターゲットグループ
リスナーのルールを作成するときに、ターゲットグループと条件が指定される
つまり、結局ターゲットにリクエストを送るのは、ロードバランサーであるということ。リスナーやターゲットグループはロードバランサーが受け取ったリクエストをどこに転送するのかを決める時に判断するコンポーネントである。
リスナーで設定されたルールの条件を満たした場合にルールと同時に指定されたターゲットグループへルーティングされる。
ターゲットグループの中には複数のターゲットが含まれる。これらの複数のターゲットにトラフィックが分散される
ロードバランサーのヘルスチェック設定は、ターゲットグループ単位で定義する
リスナーのルールでターゲットグループを指定すると、ロードバランサーは、ロードバランサーで有効なアベイラビリティーゾーンにある、ターゲットグループに登録されたすべてのターゲットの状態を継続的にモニタリングします。
ターゲットグループにターゲットを登録するとデフォルトでは、ロードバランサーはターゲットグループに指定したポートとプロトコルを使用して登録済みターゲットにリクエストを送信する。
ターゲットグループに各ターゲットを登録するときに、このポートを上書き可能!。
ルーティング設定
デフォルトでは、ロードバランサーはターゲットグループの作成時に指定したプロトコルとポート番号を使用して、リクエストをターゲットにルーティングする
または、ターゲットグループへの登録時にターゲットへのトラフィックのルーティングに使用されるポートを上書きすることもできる
Target Type
ターゲットグループを作成するとき、そのターゲットの種類を指定する
ターゲットグループを作成した後で、ターゲットの種類を変更することはできない
使用可能なターゲットの種類と ip
の場合使用可能なIPアドレス
IP アドレスタイプ
プロトコルバージョン
登録済みターゲット
ロードバランサーは、クライアントにとって単一の通信先として機能し、正常な登録済みターゲットに受信トラフィックを分散する
ターゲットの登録処理が完了し、最初のヘルスチェックに合格するとすぐに、ロードバランサーは新しく登録したターゲットへのリクエストのルーティングを開始します
ターゲットを登録解除するとターゲットグループから削除されるが、ターゲットにそれ以外の影響は及ばない。登録解除するとすぐに、ロードバランサーはターゲットへのリクエストのルーティングを停止する。ターゲットは、未処理のリクエストが完了するまで draining
状態になる
ターゲットグループの属性
ルーティングアルゴリズム
登録解除の遅延
ELB は、登録解除するターゲットへのリクエストの送信を停止する。デフォルトでは、ELB 登録解除プロセスを完了する前に 300 秒待って、ターゲットへ処理中のリクエストが完了するのを助ける
登録解除するターゲットの初期状態は draining
録解除の遅延が経過すると、登録解除プロセスは完了し、ターゲットの状態は unused
になる
登録解除するターゲットに未処理のリクエストやアクティブな接続がない場合は、ELB は登録解除の遅延時間が経過するのを待たずに、即時登録解除プロセスを完了する。ただし、ターゲットの登録解除が完了しても、ターゲットのステータスは、登録解除の遅延タイムアウトの期限が切れるまで draining
と表示される。タイムアウトの期限が切れると、ターゲットは unused
状態に移行する。
ターゲットグループに登録解除の遅延という設定項目があります。 ターゲットの登録解除中に未処理のリクエストが完了するまで待つ時間。この時間中、ターゲットの状態はストリーミングになります。 インスタンス切り離し後、ここで設定した時間だけターゲットはdraining状態になります。 初期設定では300秒となっています。 つまり切り離してから300秒間は未処理のリクエストが完了するまで待機します