🐕

Azure Application Gatewayのバックエンド切り替えによる接続断

2022/07/14に公開

はじめに

2回目の投稿です。(3回目ぐらいまではこの文言書こうかな)
ブログのネタないかなぁなんて探しているうちは全然見つからないのに、特に意識してないと「あ、これブログネタになりそう」と意外と見つかるものですよね。
今回はApplication Gateway(以下、AGW)についてです。

皆さん、AGWのルールを設定変更した経験はありますでしょうか?
あれ、完了するまで長いんですよ。。。設定内容による差はあるとは思いますが、15分ぐらい?
でも実際にバックエンドにつながらない時間は数秒~数十秒なんて話も聞きます。
ルールの設定変更で本番環境のバックエンドを切り替えるというときに、接続断の時間が数秒~数十秒なのか、はたまた設定変更完了までの15分程度ずっとなのか、これは相当な違いですよね。
実際に検証してはっきりさせましょう!

今回の構成

今回検証のために作成した構成は以下の感じです。

構成図
しんぷる いず べすと!!!
バックエンドのWebアプリは以下のクイックスタートを見て作成した簡単なものです。
https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-python?tabs=django%2Cwindows%2Cazure-cli%2Cvscode-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli
https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-java?tabs=javase&pivots=platform-linux-development-environment-azure-portal
切り替えられたのがページの表示から分かりやすいように、というのとお勉強をかねて、PythonとJavaでそれぞれ作成しました。
AGWの具体的な設定は省きますが、フロントを80ポートで受信、バックエンドとの通信を443ポートで行うような一番シンプル(?)な設定にしています。
バックエンドプールはこのように2つ作成してそれぞれApp Service(Python)とApp Service(Java)をターゲットしています。

バックエンドプール
ルールは下図のように設定しています。初めはApp Service(Python)に向けています。ここでApp Service(Java)に切り替えていこうと思います。

ルール

切替と疎通確認の方法

切替の方法は先ほど説明した通りの単純明快で、ルールからバックエンドを変えるだけです。
以下の2カ所ですね。

ルール(切替後)

疎通確認はこちらの記事を参考に定期的にcurlを叩いてみることにします。とりあえずsleepは1秒にしてみました。
https://qiita.com/oyngtmhr/items/db489b8cb18c4f36ab01

結果発表


※この画像を使いたかっただけ

$ ./sotsu.sh
2022/07/13 23:47:00,200,0.114835
2022/07/13 23:47:01,200,0.077859
2022/07/13 23:47:02,200,0.056061
2022/07/13 23:47:03,200,0.075516
2022/07/13 23:47:04,200,0.061059
2022/07/13 23:47:05,200,0.072512
2022/07/13 23:47:07,200,0.062568
2022/07/13 23:47:08,200,0.055430
2022/07/13 23:47:09,200,0.181545
2022/07/13 23:47:10,200,0.095323
2022/07/13 23:47:11,200,0.069942
2022/07/13 23:47:13,200,0.060991
2022/07/13 23:47:14,200,0.081002
2022/07/13 23:47:15,200,0.057714
2022/07/13 23:47:16,200,0.087948
2022/07/13 23:47:17,200,0.081265
2022/07/13 23:47:19,200,0.075080
2022/07/13 23:47:20,200,0.085310
2022/07/13 23:47:21,200,0.089567
2022/07/13 23:47:22,200,0.076630
2022/07/13 23:47:24,200,0.086990

・・・!?ww
想定外すぎてわろたマンです。
そもそもAGWの設定変更が10秒ぐらいで完了する & すべてステータス200で正常で通信断なし。
うーむ、業務で変更する際はバックエンドがいろいろとアプリの乗ったVMだから時間がかかるということですかねぇ。その場合通信断が発生するのかは今回は分かりませんでしたが、少なくとも変更が反映されるまでずっとつながらないということはなさそうです!
あっても数秒~数十秒、もしかしたら接続断はないかも・・・?これを検証するには本格的なアプリが乗ったVMが必要そうなので、ぜひお手元にある方は検証して結果を教えてください(他人任せ)

ちなみにストップウォッチ片手に測ってみたところ、AGWの設定変更は12秒、実際にPythonのWebアプリの画面からJavaのWebアプリの画面に切り替わったのは7秒とかでした。
ステータス上は変更が完了していなくても、途中で切り替わっているようですね。

最後にちょっと気になったのがAGWのこちらのメトリック。

AGWのHttpStatus
4xxと5xxがちょこっと出てるのがちょっと気になる、、、
そして3xxはバックエンドにリダイレクトしてますよという意味で出ている??その場合2xxに対して3xxの数がばらばらなのが引っかかる、、、
分かる方は教えてください・・・!

おわりに

今回はAGWのバックエンド変更に対しての接続断について書きました。
当初想定していた通りの内容ではなかったですが、設定変更中のステータスとなっている間ずっと接続断というわけではなく、むしろ接続断が無いまであるということを知れたのはよかったです。AGW、やるやん。
1回目、2回目と変な角度から攻めてしまったので、3回目の投稿はもう少し真正面から攻めようと思いますw

Discussion