1.はじめに
ApplicationGatewayの動作検証を行う上で躓くポイントがあり、やっと解決ができたので記録。
今回は__ApplicationGatewayの設定値の一つ、ドレインに関するコアなお話__です。
(ApplicationGatewayって何だろう?って方はもう少ししたらその記事を書くのでちょっとお待ちください)
⇒ 【Azure】 Application Gateway 設定を解説する
書いたんですけど、概念の説明というよりは設定値の説明になってしまいました。。。
2.ApplicationGatewayの接続のドレインとは
Application Gatewayのバックエンドプールから分散先を削除すると、そのバックエンドプールの分散先へ通信が行われていた場合、クライアントから見れば__突然通信が切断されてしまいます。__
そこで、__ドレイン設定__を利用します。
ドレイン設定を利用すると、いままで通信していたものは削除されたバックエンドプールの分散先に対して既定の秒数間保持し、それ以外の新規の通信は切り離されたバックエンドプールの分散先へは送信しなくなります。
これを行うことにより、通信が行われている際にバックエンドプールから分散先を削除しても、その通信完了後に次の通信は他の分散先へ向けて行われるようになるため、通信切断が発生しなくなります。
3.ドレインの設定パターン
ドレインは、HTTP設定ごとに設定することができます。
そのため、__「1つのルーティング規則につき1パラメータ」__を設定することができます。
ドレインのデフォルト時間は60秒。
最小値は1秒で、最大値は3600秒。
さて、上記の通りドレインはHTTP設定ごとに設定できるので、次のような形で設定することができます。
これだと、それぞれの分散対象は30秒、60秒で切断されることになります。
が。が!
実はドレインの設定値は、__「一つのバックエンドプールに対しては、同じ値となる」__という仕様となっています。
つまり、
上図のような設定を行っても、__長いほうのドレインの設定値が優先される__ようになっています。図でいえば、すべてのドレイン設定が自動的に60秒になります。
この仕様については、2021/02/17現在、Microsoftのドキュメント(https://docs.microsoft.com/ja-jp/azure/application-gateway/configuration-http-settings )上では明言されていない仕様です。
といいますか、ドレインの秒設定については、特に説明がないのですよね。。
4.終わりに
はい、今回はApplicationGatewayのドレイン設定にはこんな落とし穴があるよ、という記事でした。
というかMSさんなんで設定できないようにするかエラー出力しないんですかねぇ
参考
アプリケーションゲートウェイのHTTPS設定
https://docs.microsoft.com/ja-jp/azure/application-gateway/configuration-http-settings