【Azure】App Serviceでアプリケーション設定やDB接続文字列をデプロイスロットにひも付けるには:Tech TIPS
AzureのApp Serviceで「運用」「ステージング」といった「デプロイスロット」をスワップする際、アプリケーション設定やDB接続文字列の一部は入れ替えずにスロットとひも付けておきたいことがある。この「デプロイスロットの設定」をリソーステンプレートに記述してデプロイする方法は?
対象:Azure App Service(サービスレベルは「Standard」「Premium」「isolated」のいずれか)、Bicep
本Tech TIPSでは、リソーステンプレートを使ってAzure App Serviceをデプロイする際、その記述箇所がやや分かりにくい「デプロイメントの設定」について説明する。
■執筆時の各種ツール/APIのバージョン
- Azure CLI: Ver.2.47.0
- Bicep CLI: Ver.0.16.1
- Bicepでのデプロイ時のAPIバージョン: 2022-03-01
ところで「デプロイスロット」とは?
AzureのApp Serviceには、複数の「デプロイスロット」を作成する機能が備わっている(サービスレベルは「Standard」「Premium」「isolated」のいずれかが必要)。「デプロイスロット」とはWebアプリを固有のホスト名で実行できる環境のことだ。
デフォルトの設定でApp Serviceをデプロイすると、1つの「運用スロット」が生成される。さらに「ステージング」「開発」といったデプロイスロットを追加し、それぞれに別々のホスト名を割り当てつつ、固有のWebアプリをデプロイすることが可能だ。
また、運用スロットとステージングスロットを「スワップ」することで、ステージングスロットでテストしていた新バージョンのアプリを速やかにライブサイトで公開することもできる。スワップすることで、コンテンツ(ファイル)や多くの設定が運用とステージングの間で入れ替わることになる。
デプロイスロットのスワップ時に入れ替えたくない設定項目がある!?
さて、このスワップの際、設定項目によってはスロット間で入れ替えたくない、つまりスロットにひも付けておきたい場合がある。
例えばWebアプリのプログラムに対し、環境変数を介してスロットの種別を伝えるために、「アプリケーション設定」に設定項目を追加したとしよう(後述のスクリーンショットにある「SiteType」)。すると、デフォルトではスワップ時に入れ替わるため、運用(Production)スロットなのに「stage」という値が設定されてしまう。
また、スロットごとにデータベースを変えなければいけない場合、「接続文字列」に設定してあるデータベース接続文字列も、デフォルトの設定のままスワップすると、運用スロットなのにステージング用データベースに接続されてしまうことになる。
「デプロイスロットの設定」とは?
そこでApp Serviceには、「アプリケーション設定」「接続文字列」の設定項目ごとに、スロットにひも付ける(スワップ時に入れ替えない)ように指定する機能がある。
Azureポータルの場合、App Serviceの[構成]−[アプリケーション設定]タブを開き、「アプリケーション設定」「接続文字列」の一覧で対象の設定項目の「名前」をクリックする。編集/追加の画面が表示されるので、そこにある[デプロイスロットの設定]チェックボックスにチェックを入れて「オン」にして、[OK]ボタンをクリックして設定を反映する。これで対象の設定項目はスワップ時に入れ替わらなくなる。
上記のスクリーンショットのような設定でスワップしたときの挙動を下図に記す。
Copyright© Digital Advantage Corp. All Rights Reserved.