🧚‍♀️

[AWS]1つのALBにスティッキーセッションが不要/必要のアプリを混在させる

2022/08/08に公開

こんにちは。深緑です。
今回は苦肉の策のお話です。

1つのALBにスティッキーセッションが不要/必要のアプリを混在させる

とあるシステムでこのような構成になってしまいました。
構成図

ALBの下にWEBサーバーがあります。
WEBサーバーには通常のアプリと、phpMyAdminが同居しています。
アプリの方は負荷が偏らないようにスティッキーセッションは不要な作りになっています。
アプリの方に寄せて、ALBスティッキーセッションなしの設定にして動作させると・・・

phpMyAdminにログインしてもすぐにログアウトしてしまいます。
phpMyAdminのセッションが負荷分散に対応してないからですね。
制約上、EC2はもう増やせないので今の構成のままなんとかすることを考えます。

設定の違うターゲットグループを二つ作り、リスナーのルールで分岐させる

ズバリ、このようにしました。
ターゲットグループを二つ作り、一方はスティッキーセッションなし。
スティッキーセッションなし
もう一方はありにします。
スティッキーセッションあり
二つのターゲットグループの登録するインスタンスは同じで問題ありません。

リスナーのルールでデフォルトアクションの前に一つ追加。
パスで判定し、phpMyAdminのものならスティッキーセッションありのターゲットグループに転送するようにします。
デフォルトアクションはスティッキーセッションなしのターゲットグループに転送です。

リスナーのルール

この設定でphpMyAdminおよびそれ以外にアクセスするとターゲットグループが分岐します。
ALBのログでその動作を確認できました。

http 2022-08-08T13:09:49.112983Z app/training-alb/501c225797722585 125.196.34.160:30809 10.192.10.245:80 0.001 0.001 0.000 304 304 752 232 "GET http://training-alb-615962937.ap-northeast-1.elb.amazonaws.com:80/healthcheck.html HTTP/1.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" - - arn:aws:elasticloadbalancing:ap-northeast-1:758811058257:targetgroup/training-tg-nosticky/ef7f10e3050375e2 "Root=1-62f10b1d-353d662b6654443f54cedd60" "-" "-" 0 2022-08-08T13:09:49.090000Z "forward" "-" "-" "10.192.10.245:80" "304" "-" "-"
http 2022-08-08T13:09:52.504802Z app/training-alb/501c225797722585 125.196.34.160:30812 10.192.10.245:80 0.001 0.075 0.000 200 200 555 11283 "GET http://training-alb-615962937.ap-northeast-1.elb.amazonaws.com:80/phpmyadmin/js/messages.php?l=ja&v=5.2.0 HTTP/1.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" - - arn:aws:elasticloadbalancing:ap-northeast-1:758811058257:targetgroup/training-tg-sticky/f1b6a46517855218 "Root=1-62f10b20-1858e87a7ca0addb6246b106" "-" "-" 1 2022-08-08T13:09:52.408000Z "forward" "-" "-" "10.192.10.245:80" "200" "-" "-"
http 2022-08-08T13:09:52.399603Z app/training-alb/501c225797722585 125.196.34.160:30810 10.192.10.245:80 0.001 0.147 0.000 200 200 715 6907 "GET http://training-alb-615962937.ap-northeast-1.elb.amazonaws.com:80/phpmyadmin/ HTTP/1.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" - - arn:aws:elasticloadbalancing:ap-northeast-1:758811058257:targetgroup/training-tg-sticky/f1b6a46517855218 "Root=1-62f10b20-4d4ec44f15883e277f3c7f43" "-" "-" 1 2022-08-08T13:09:52.225000Z "forward" "-" "-" "10.192.10.245:80" "200" "-" "-"

1行目と2・3行目のアクセスでターゲットグループが異なるのがわかります。

こういう方法もあるよということで

以上、苦肉の策のお話でした。
今回の話は、「いや、素直にEC2かALB分ければ?」だとは思いますが、
世の中いろんなところにいろんな制約があるものでして・・・
「こういう方法もあるんだな」とサラリと受け止めていただければ幸いです。

Discussion