- クラウド
Azure App Service デプロイスロットのスワップ時に環境変数はどう動く?
はじめに
App Service のデプロイスロットは、同一のApp Service プラン上に複数の実行環境を作ることができる機能です。
本番環境と同一基盤上に検証用スロットを作るなんかして、Blue-Greenデプロイの実装ができたりします。
実際にBlue-Greenデプロイするときは本番スロットと検証スロットのスワップをするわけですが、各スロットの環境変数の動き方は設定によって変わります。
本記事では、App Service のデプロイスロットについて、スワップ時の環境変数の動き方と設定方法について解説します。
環境変数と「デプロイスロットの設定」項目の仕組み
App Service の環境変数は以下のスクリーンショットのように設定することができ、赤枠で囲った「デプロイスロットの設定」という項目にチェックを入れているかいないかでスワップ時の動作が変わります。

1. チェックを付けたときの動作を確認
では、実際にスワップして動作を確認してみます。
今回は、stagingスロットを用意してPRODUCTIONスロットとスワップをしてみます。
スワップ前の各スロットの環境変数は以下の通りにしています。
・PRODUCTIONスロット:VAR_1という変数を「デプロイスロットの設定」チェックありで設定

・stagingスロット:環境変数なし

いざ、スワップ!
スワップするときは変更がかかる箇所を事前に教えてくれます。
今回は仕組み上、環境変数の移動が無いのでこんな感じの表示になってます。

スワップ後の各スロットの環境変数はこちらです。
・PRODUCTIONスロット

・stagingスロット

スワップ前と変わってないですね。
チェックを付けたときの動作というのは、中身 (資材)だけスワップされて環境変数は移動しないという動作になります。
2. チェック無しの時の動作を確認
では次に、チェック無しの時の動作を見てみます。
スワップ前の設定はこちら
・PRODUCTIONスロット

・stagingスロット

では、スワップしていきます。
今回はstagingスロットのVAR_1にNew Valueとして1 (変数の中身)が設定されると教えてくれてます。

スワップ後はこのようになります。
・PRODUCTIONスロット

・stagingスロット

スロット後は中身 (資材)と一緒に環境変数も移動しています。
3. 図解
VERSION、FEATURE_X、API_KEYという環境変数があるというシチュエーションで図を用意しました。
VERSION、FEATURE_X(機能フラグ)はリリースごとに変わる想定なので「デプロイスロットの設定」はチェック無しとして、API_KEYは環境ごとに個別に固定したいのでチェック有りとしています。
- スワップ実行前の状態

2.スワップ実行。チェック無しの環境変数が中身と一緒に移動する。

3. スワップ完了後の状態

このように、「デプロイスロットの設定」のチェック有無でスワップの度に移動させる環境変数と、固定させる環境変数を決められるわけです。
ベストプラクティスと使い分け
1. 環境依存の変数は「デプロイスロットの設定」にチェック
- 接続先や認証情報など、ステージングと本番で異なる値を持つべき変数は必ずスロット固有設定にする
- 例:
- 接続文字列(ステージング用DB、本番用DB)
- APIキー(テスト用キー、本番用キー)
- 外部サービスのURL(検証環境URL、本番URL)
- チェックを入れればスワップ時に値が入れ替わらず、スロットごとに設定が保持される
2. 資材依存の変数はチェックなしで管理
- アプリのバージョンやビルド番号など、デプロイ資材に紐づく設定はスワップ時に移動するべき
- 例:
- アプリバージョン番号
- ビルド番号、コミットID
- 共通仕様や機能フラグ(環境に依存しない場合)
- チェックなしにすることで、スワップ時に資材と一緒に環境変数が移動する
まとめ
App Service のデプロイスロットは、Blue-Green デプロイを簡単に実現できる便利な機能です。
環境変数の「デプロイスロットの設定」チェック有無によって、スワップ時に値が移動するかどうかが決まります。
- チェックあり → 環境変数がスロットに固定され、スワップ時に移動しない
- チェックなし → 資材と一緒にスワップ時に移動する
この仕組みを理解して適切に使い分けることで、安全でスムーズなデプロイを実現することができます。