AzurePaaS研究サイト

AzurePaaS研究サイト

~理解しずらい情報をシンプルにお伝えします~

AppService/Functionsのスロット・スワップ機能とは(本番環境をダウンタイムなしで切り替え)

スロット・スワップ機能

スロット・スワップとは

 
スロットとは、デフォルト環境とは別にスロットと呼ばれるもう一つ同じ環境できて、そのサブ環境のことをスロットと呼びます。
 
スワップとは、デフォルト環境→スロット1に切り替え、スロット1→スロット2に切り替え、スロット2→デフォルト環境に切り替え、などのように切り替えること自体のことをスワップと呼びます。
 
リリースする環境を切り替えても、アプリケーションURLは変わりません。また、デフォルト環境からスロット1に切り替えることでダウンタウンなしで最新版のアプリケーションをリリースできる機能になります。スロット2・スロット3のように複数作成してどのスロットをリリースするかを選ぶということもできます。
 
アプリケーションURLについては、すべての環境において一つだけ存在していて、アプリケーションURLにアクセスすると今リリースされているスロットのアプリケーションにアクセスされるということになります。
 
Azure内部では何をやっているかというと、クライアント側から受信したアプリケーションへのリクエストデータについて、ロードバランサ(LB)から送る先をアプリAからアプリBに切り替えるだけなので、ダウンタウンなしで切り替えられているという仕組みになっています。
 

スワップ(切り替え)の実行例

 
以下2つのバージョンのアプリケーションがあるとします。
 
(1)本番リリース用のアプリケーションVer.1(本番環境で現在実行中)
(2)本番リリース用のアプリケーションVer.2(開発済みの最新版)
 
"https: //test-app.com" について、(1)から(2)への切り替えを例に説明します。
 

STEP
本番環境 Ver.2 に最新のアプリケーションをデプロイ
https: //test-app.com が本番環境 Ver.1 で動作中
STEP
本番環境 Ver.2 で動作確認
https: //test-app.com が本番環境 Ver.1 で動作中
STEP
スワップ(本番環境 Ver.1 スロット ▶ 本番環境 Ver.2 スロット)
https: //test-app.com が本番環境 Ver.2(最新環境)で動作中
STEP
念の為、本番環境 Ver.2 で動作しているアプリケーションを動作確認する
Azure自体も人の手で作ったシステムなのでAzureのスロット機能も失敗する可能性はゼロではありません。良い意味で信用しきらずに、ご自身で運用スロットのアプリケーションに無事に入れ替えられていることを確認しましょう。システム運用をする上で、作業後の動作確認は当然ですよね。

 

本番環境をダウンタイムなしで切り替えられる

本番環境をバージョンアップするときダウンタイムなしで切り替えたい。という要望をよく聞きます。
 
それは、このスロットのスワップ機能で実現することができて、上記手順 [STEP 3] スワップを実施したタイミングでシステムを止めることなく稼働してくれます。先述したとおりAzure内部の仕組みとしては、ロードバランサ(LB)の向け先を変えているだけだから、ダウンタウンなしにAzure上で実行されるアプリケーションを切り替えられる、ということになります。
 
 

「ダウンタイムなし」とは 

アプリケーションを入れ替え・更新するときに、昔ながらのオンプレ開発だと、「夜中の1時頃にメンテナンス時間を利用者に通知して、1時間ほどのアプリケーション入れ替え・更新作業をして、システム再開する。」というのが昔ながらのやり方だと思います。
 
ですが、今の時代はそんなことをする必要ありません。スワップボタンをポチッと押すだけでアプリケーションが最新に入れ替わる上に、システムが停止する時間もありません。ということで「ダウンタイムなし」とは、システムが使えない時間が発生しないということです。
 

各スロットはAppServiceプランやインスタンスを共有している

 
例えば、AppServiceプランでインスタンスが1台で稼働させている場合は、切り替え前のアプリケーションと切り替え後のアプリケーションは、そのインスタンスを各スロットのアプリケーションが共有して使用していることを覚えておいてください。
 
ですので、同じAppServiceプランが使われるのでAppServiceプランに対して設定したものはすべてのスロットに適用されます。メトリックなどを見る場所も変える必要はありません。
 

利用者がアプリケーションを使っている最中にスワップしたらどうなるのか

まず、Azure側の動作としては、クライアントからのリクエストを継続して処理してくれます。スワップ操作したタイミングにAzure側の処理が終わったタイミングでアプリケーションを入れ替えた後に、Azure 側のキューに溜まっているリクエストを継続して処理してくれます。
 
ただ・・・例えば、申込み機能を削除する場合、利用者が申込み機能を使用している最中に、申込み機能がない状態のバージョンにスワップしてしまうとさすがにエラーが発生します。
 
これは、わかりやすい極端な例をあげましたが、アプリケーションが大幅に更新された場合はスワップ機能に頼らずに、一度システムを止めてメンテナンス期間中にアプリケーションを入れ替えた方がいいと思います。スワップも魔法の機能ではありませんので、アプリケーションにどういう変更があるのかを理解した上でスワップで即時入れ替えを行うのかメンテナンス期間を設けるのかを判断していただければと思います。
 
 
以上です。
 

ご意見・ご要望はこちらへ