概要
ServicePrincipal を使用したローカル開発時に Azure サービスに対して Python アプリを実行して 何かごにょごにょ したいとき、その ServicePrincipal の環境変数を定義し利用する方法の説明となります
実行環境
macOS Ventura 13.0
python 3.8.12
Azure CLI 2.41.0
前提条件
- 利用する ServicePrincipal をすでに作成済みで必要となる情報を取得していること
$ az ad sp create-for-rbac --name <ServicePrincipal名> --skip-assignment --years 2
{
"appId": "53435343-7d7d-4548-adcd-ds22aa88ff22",
"displayName": "sp_iturufestest",
"password": "mim9Q~kk11HHyy55toE_HHeeeW2BiSCrrr22CaCa",
"tenant": "59175917-aacc-4646-55ff-33fffcc666ff"
}
- python-dotenv パッケージをインストールしていること
pip install python-dotenv
.env ファイルの作成
Pythonアプリケーションのルート ディレクトリに .env ファイルを作成します。 次のように、アプリ登録プロセス(ServicePrincipal作成)時に取得した値を使用して環境変数の値を設定します。
AZURE_CLIENT_ID=(ServicePrincipal の "appId" 値)
AZURE_TENANT_ID=(ServicePrincipal の "tenant" 値)
AZURE_CLIENT_SECRET=(ServicePrincipal の "password" 値)
環境変数を取得するプログラム
上記で設定したローカル環境変数を取得する pythonプログラムは以下となります。すでに定義されているグローバル環境変数を上書きする設定も入れています。
local_env.py
import os
from dotenv import load_dotenv
load_dotenv(override=True) # <-- グローバル環境変数を上書きします
load_dotenv(".env")
CLIENT_ID = os.environ.get("AZURE_CLIENT_ID")
TENANT_ID = os.environ.get("AZURE_TENANT_ID")
CLIENT_KEY = os.environ.get("AZURE_CLIENT_SECRET")
print("AZURE_CLIENT_ID : ", CLIENT_ID)
print("AZURE_TENANT_ID : ", TENANT_ID)
print("AZURE_CLIENT_SECRET : ", CLIENT_KEY)
プログラムの実行
グローバル環境変数を取得してみます。
$ env | grep AZURE_
AZURE_CLIENT_ID=38313831-ebeb-3333-8008-dddb22228264
AZURE_TENANT_ID=59175917-aacc-4646-55ff-33fffcc666ff
AZURE_CLIENT_SECRET=77NIzGrrr44_YYUIcer~rrr-Y-yyyxxx~q
作成したプログラムからローカル環境変数を取得してみます。
$ python local_env.py
AZURE_CLIENT_ID : 53435343-7d7d-4548-adcd-ds22aa88ff22
AZURE_TENANT_ID : 59175917-aacc-4646-55ff-33fffcc666ff
AZURE_CLIENT_SECRET : mim9Q~kk11HHyy55toE_HHeeeW2BiSCrrr22CaCa
まとめ
これで ServicePrincipal 環境変数をローカル定義することにより、ローカル開発したPythonプログラムをサクッと実行させることが可能となりました。
参考記事
以下の記事を参考にさせていただきました。感謝申し上げます。
python-dotenvを使って環境変数を設定する