Azure App Service アプリの環境変数設定から参照、スワップ時の動作確認
Azure App Service アプリの環境変数設定手順を紹介します。
接続文字列やアプリ設定、アプリからの参照方法、デプロイスロットのスワップ(切り替え時)の挙動などについて確認しています。
※Azure App Serviceのランタイムスタックは、Python 3.12を利用しています。
※Azure App Serviceのオペレーティング システムは、Linuxを利用しています。
Azure App Serviceの環境変数設定と参照、スロットスワップ時の動作
Azure App Serviceの環境変数
Azure App Service アプリでは環境変数を利用できます。
環境変数を使って、アプリの設定や接続文字列に関する情報を外部に持つ事ができます。
環境変数としてアプリに渡されるため、コードを変更せずにアプリケーションの動作を変更できます。
環境変数には、アプリ設定と接続文字列があります。
アプリ設定はアプリケーション全体の設定、接続文字列はデータベースなどのリソースに接続するための情報を設定します。
アプリ設定や接続文字列もスロットごとに異なる値を持つことができます。
環境変数を利用する事で、コードを変更せずにデプロイスロットごとにアプリの動作を変更できます。
接続文字列の設定手順
接続文字列は設定にある環境変数から設定します。
デプロイスロットの設定有無を分けて2つの接続文字列を設定しています。
-
- test_env_01
- 値:test1234
- 種類:Custom
- デプロイスロットの設定:チェックなし
- test_env_02
- 値:test2345
- 種類:Custom
- デプロイスロットの設定:チェックあり
- test_env_01
接続文字列を設定 | |
環境変数で接続文字列のタブを選択します。 追加を選択します。 |
|
接続文字列を設定します。 ※この時点ではまだ反映されません。 |
|
接続文字列のタブで適用を選択します。 | |
変更内容の保存のメッセージが表示されます。 確認を選択します。 |
|
環境変数に設定した接続文字列が表示されます。 |
※環境変数の設定は運用スロットで実施しています。
環境変数はデプロイスロットごとに設定
環境変数はデプロイスロットごとに設定します。
新しくデプロイスロットを作成する際に、環境変数を引き継ぐかどうかは、Clone settings fromで指定できます。
指定したデプロイスロットの環境変数を引き継ぐことができます。
Do not clone settingsを指定すると、環境変数は引き継がれません。
他のデプロイスロットで設定された環境変数は、作成済みのデプロイスロットには、反映されません。
デプロイスロットの環境変数引き継ぎ状況 | |
デプロイスロット作成時に設定を引き継ぐかを指定できます。 | |
作成済みのデプロイスロットには、他のデプロイスロットで設定した環境変数は反映されません。 |
※事前にステージングスロット(01)を作成した状態で、運用スロットの接続文字列を追加しています。
設定した接続文字列をアプリから参照
サンプルのPythonスクリプトを利用して、アプリから接続文字列を参照します。
接続の種類に応じた接頭辞を付与して参照します。
接続の種類にカスタムを指定した場合、CUSTOMCONNSTR_が接頭辞として付与されます。
たとえば、接続文字列test_env_01を参照する場合は、CUSTOMCONNSTR_test_env_01となります。
Pythonスクリプトから接続文字列を参照 | |
Pythonスクリプトを作成し保存します。
|
|
接続文字列を設定したデプロイスロットで確認します。
|
|
別のデプロイスロットに設定された接続文字列は参照できません。
|
デプロイスロットをスワップした場合の接続文字列
デプロイスロットをスワップした時に、環境変数を移行する事ができます。
各スロット固有の環境変数を作成したい場合は、デプロイスロットの設定にチェックを入れておきます。
デプロイスロットをスワップして、接続文字列がどう移行するかを確認します。
-
- test_env_01:デプロイスロットの設定はチェックなし
- ソースに指定したスロットからターゲットのスロットへ移行する
- test_env_02:デプロイスロットの設定はチェックあり
- ソースに指定したスロットからターゲットのスロットへ移行しない
- test_env_01:デプロイスロットの設定はチェックなし
デプロイスロットの設定にチェックを入れてない、接続文字列だけが移行します。
デプロイスロットをスワップして確認 | |
デプロイスロットをスワップします。 Config Changesに変更点が表示されます。 Source slot changesとTarget slot changesにtest_env_01が表示されています。 |
|
運用スロットとステージングスロットの間で、接続文字列が移行されていることを確認できます。 | |
Pythonスクリプトから接続文字列を参照してみます。
Pythonスクリプトから接続文字列を参照 | |
運用スロットで接続文字列を参照します。
|
|
ステージングスロットで接続文字列を参照します。
|
アプリ設定の追加手順
環境変数のアプリ設定を追加します。
接続文字列の場合と異なり、種類の選択はありません。
-
- test_app_env_01
- 値:test3456
- デプロイスロットの設定:チェックなし
- test_app_env_01
アプリ設定を追加 | |
環境変数でアプリ設定のタブを選択します。 追加を選択します。 名前、値などを設定します。 適用を選択して保存します。 |
|
適用を選択して保存します。 確認メッセージが表示されます。 確認を選択します。 |
|
環境変数のアプリ設定が追加されています。 |
アプリ設定を参照
サンプルのPythonスクリプトを利用して、アプリからアプリ設定を参照します。
接続文字列の場合とは異なり、接頭辞は付与されません。
アプリ設定の名前をそのまま指定して参照します。
Pythonスクリプトからアプリ設定を参照 | |
Pythonスクリプトを作成し保存します。
|
|
Pythonスクリプトからアプリ設定を参照します。
|
デプロイスロットをスワップした場合のアプリ設定
アプリ設定も接続文字列と同様の動作になります。
各スロット固有のアプリ設定を作成したい場合は、デプロイスロットの設定にチェックを入れておきます。
アプリ設定でデプロイスロットの設定にチェックを入れていない場合、スワップ操作と共に、ソースとして指定したスロットからターゲットのスロットへ移行します。
環境変数にシークレットを保管する事は推奨されていない
環境変数にシークレットを保管する事は推奨されていません。
Key Vaultにシークレットを保管して参照する事が推奨されています。
Azure App Service と Azure Functions でアプリ設定として Key Vault 参照を使用する
マネージドIDなどを利用した接続設定も推奨されています。
Azure App Service から Azure サービスとデータベースへのセキュリティで保護された接続
—広告—
最後に
Azure App Serviceアプリの環境変数の設定方法について確認しました。
環境変数の設定手順や、Pythonスクリプトでの参照方法、デプロイスロットをスワップする際の動作を確認しました。
デプロイスロットをスワップする際に、環境変数を引き継ぐかどうか選択できる事も分かりました。
引き続き色々試してみたいと思います。