AzureでAppServiceのアプリケーション設定にあるデプロイスロットについて

1. 試すパターン

AzureApp Service にある「構成」で設定出来る「アプリケーション設定」の項目で「デプロイスロットの設定」チェックの有無の挙動がよくわからなかったので実際に試してみました。

以下の4パターンに対して、それぞれ「デプロイスロットの設定」チェックありと無しの合計8パターンを確認します。

  • 運用側にしかない設定

  • デプロイスロット側にしかない設定

  • 運用、デプロイスロット両方にあり値が同じ設定

  • 運用、デプロイスロット両方にあり値が違う設定

2. 最初の状態

AppServiceの管理コンソールのアプリケション設定のキャプチャーです。

a37d83f2
図 1. 運用側
cbec8022
図 2. デプロイスロット側

パターン毎にまとめると以下のなります。

表 1. 運用側にしかない設定
運用側 スロット側

名前

デプロイスロットの設定

名前

デプロイスロットの設定

A001

A001

なし

A002

A002

あり

表 2. デプロイスロット側にしかない設定
運用側 スロット側

名前

デプロイスロットの設定

名前

デプロイスロットの設定

A011

A011

なし

A012

A012

あり

表 3. 運用、デプロイスロット両方にあり値が同じ設定
運用側 スロット側

名前

デプロイスロットの設定

名前

デプロイスロットの設定

A101

A101

なし

A101

A101

なし

A102

A102

あり

A102

A102

あり

表 4. 運用、デプロイスロット両方にあり値が違う設定
運用側 スロット側

名前

デプロイスロットの設定

名前

デプロイスロットの設定

A103

AAA

なし

A103

CCC

なし

A104

ABB

あり

A104

DDD

あり

3. スワップする際の構成変更

スワップ実行時に表示される構成変更の表示は以下になります。

6c00ef7c
図 3. ソース(デプロイスロット)の変更
3a97f9b2
図 4. ターゲット(運用)の変更

4. スワップ後

AppServiceの管理コンソールのアプリケション設定のキャプチャーです。

1d5f60b8
図 5. 運用(元デプロイスワップ)側
b6e79d4b
図 6. デプロイスロット(元運用)側

パターン毎にまとめると次のようになります。

表 5. 運用側にしかなかった設定のスワップ後
運用側 スロット側

名前

デプロイスロットの設定

名前

デプロイスロットの設定

A001

A001

なし

A002

A002

あり

表 6. デプロイスロット側にしかなかった設定のスワップ後
運用側 スロット側

名前

デプロイスロットの設定

名前

デプロイスロットの設定

A011

A011

なし

A012

A012

なし

表 7. 運用、デプロイスロット両方にあり値が同じ設定のスワップ後
運用側 スロット側

名前

デプロイスロットの設定

名前

デプロイスロットの設定

A101

A101

なし

A101

A101

なし

A102

A102

あり

A102

A102

あり

表 8. 運用、デプロイスロット両方にあり値が違う設定のスワップ後
運用側 スロット側

名前

デプロイスロットの設定

名前

デプロイスロットの設定

A103

CCC

なし

A103

AAA

なし

A104

BBB

あり

A104

DDD

あり

5. さらにスワップ

もう一度スワップを行い最初の状態に戻したときに元に戻るのかを見てみます。

6322086b
図 7. 運用側
76e9782c
図 8. デプロイスロット側
運用側 スロット側

名前

デプロイスロットの設定

名前

デプロイスロットの設定

A001

A001

なし

A002

A002

あり

A011

A011

なし

A012

A012

なし *1

A101

A101

なし

A101

A101

なし

A102

A102

あり

A102

A102

あり

A103

AAA

なし

A103

CCC

なし

A104

ABB

あり

A104

DDD

あり

*1 最初にデプロイスロット側だけに「デプロイスロットの設定」チェックありで追加した設定が、「デプロイスロットの設定」チェックが外れてしまい、元に戻りませんでした。

6. 設定例

以上をふまえて具体的な例を考えてみました。

6.1. 例1

名前 : HOST で運用は常に www.example.com 、デプロイスロットは常に stg.example.com としたい

名前 デプロイスロットの設定

運用

HOST

www.example.com

あり

デプロイスロット

HOST

stg.example.com

あり

6.2. 例2

名前 : ROLE で運用は常に production 、デプロイスロットには不要の場合

名前 デプロイスロットの設定

運用

ROLE

production

あり

または

名前 デプロイスロットの設定

運用

ROLE

production

あり

デプロイスロット

ROLE

*1

あり

*1 何か無効な値を設定する(空文字など)

6.3. 例3

名前 : ROLE でデプロイスロットは常に deployslot 、運用には不要の場合

名前 デプロイスロットの設定

運用

ROLE

*1

あり

デプロイスロット

ROLE

deployslot

あり

*1 何か無効な値を設定する(空文字など)

純粋にデプロイスロット側だけに存在するような設定にすることが出来ないので、運用には何か無効な値を設定する。

6.4. 例4

名前 : INITROLE で最初にデプロイスロットとして用意したマシンは deploy を維持、最初に運用として用意したマシンは run を維持する場合

※無理矢理な例ですが、良い例が思いつきませんでした
名前 デプロイスロットの設定

運用

INITROLE

run

なし

デプロイスロット

INITROLE

deploy

なし

7. まとめ

  • 「デプロイスロットの設定」なしの設定は、マシンに紐付く設定

    • スワップにより、マシンAとマシンBの役割(運用、デプロイスロットとか)が入れ替わってもそのまま、マシンAとマシンBの設定のまま維持される

  • 「デプロイスロットの設定」ありの設定は、役割に紐付く設定

    • スワップにより、マシンAとマシンBの役割(運用、デプロイスロットとか)が入れ替わわると、マシンAとマシンBの設定も入れ替わる

    • ただし、デプロイスロット側のみにある設定で「デプロイスロットの設定」チェックは意味をなさないので、そのような設定を行わない

  • どちらかのみに存在する設定をもうけるのはよくなさそう