#まず始めに
この記事はAWSのALBでのCookieによる振り分け設定をまとめたものです。
#ALB(Application Load Balancer)の振り分け
基本的な説明は省略します。(こちらを参照ください。)
まずAWSでのLB作成の際には主に以下の種類があります。
・ALB(Application Load Balancer)
...HTTP,HTTPSのトラフィックをリクエストレベルで動作し、高度なルーティング設定が可能です。
・NLB(Network Load Balancer)
...大規模なTLSオフロードやアプリケーションの性的IPが必要な場合に、
接続レベルで動作し、低いレイテンシーで大量のリクエストを処理できます。
・GLB(Gateway Load Balancer)
...ファイアウォール、侵入検知・防止システムなどの仮想アプライアンスをデプロイスケーリング管理できます。
・その他(Classic Load Balancerなど)
...EC2-Classic ネットワークで既存のアプリケーションを実行している場合に使用します。
今回はHTTPSでのリクエストを振り分けのためALBを使い、条件にCookieを用いる方法をご紹介します。
#HTTPSリクエスト振り分け
基本的にAWSでALBを作成する際にリスナー(設定したプロトコルとポートでの接続リクエストをチェックするプロセス)も一緒に作成します。プロトコルはHTTPもしくはHTTPSを選択できますが、HTTPSの場合、証明書も必要です。
リスナーのデフォルトアクション(追加した条件に当てはまらない場合)を設定するため、ターゲットグループ(1つ以上のルーティング先を含めたもの)も作成します。
#Cookieによる振り分け
ターゲットグループ1にアプリケーションa,アプリケーションbを設定し、負荷分散を行っているとします。
アプリケーションaでリクエストを処理したあと、再度同じアプリケーションaにリクエストを送りたい際に、このままではアプリケーションbに送信される可能性があります。
そのため、リスナールール(リクエストごとにチェックする条件)にアプリケーションで付与したCookieをしようして、振り分けたいと思います。
まず、ターゲットグループ2(アプリケーションaのみリクエスト送信)とターゲットグループ3(アプリケーションbのみリクエスト送信)を作成します。
アプリケーションで付与するCookieがそれぞれapl=a,apl=bとします。
リスナールールにHTTPヘッダでCookieがapl=aのときにターゲットグループ2にルーティング、
HTTPヘッダでCookieがapl=bのときにターゲットグループ3にルーティングする2つのルールを作成します。
以上で振り分け設定は完了です。
検証方法としては下記のcurlコマンドでCookieを自由につけて検証が可能です。
curl -H 'Cookie:apl=a' [URL]
####追記
上記で作成したリスナールールだとCookieが複数あった場合にうまく振り分けされない。
(原因としては複数のCookieを一つのヘッダとして送るため。)
そのため、ヘッダの条件部分を*apl=a*とすることで振り分け可能。
#最後に
今回はALBでのCookieによる振り分け設定を簡単にまとめてみました。
同じターゲットグループにリクエストをしたい場合に
Cookieを用いずとも、ALBのスティッキーセッション機能をしようして行う方法もあります。
セッション維持の期間なども細かく設定できるため、またいずれまとめようと思います。
最後まで読んでいただきありがとうございました。