Azure App Configuration は、開発者がアプリケーション構成を単純かつ安全に一元化するのに役立つマネージド サービスです。 Python 構成プロバイダー ライブラリを使用すると、管理された方法で Azure App Configuration ストアから構成を読み込めます。 このクライアント ライブラリは、Azure SDK for Python の上に 追加機能 を追加します。
パッケージをインストールする
pip を使用して Azure App Configuration Provider パッケージをインストールします。
pip install azure-appconfiguration-provider
Microsoft Entra ID を使用するには、Azure ID も必要です。
pip install azure-identity
構成の読み込み
load パッケージのazure-appconfiguration-provider関数は、Azure App Configuration から構成を読み込むのに使用されます。
load関数を使用すると、Microsoft Entra ID (推奨) または接続文字列を使用して App Configuration ストアに接続できます。
注
azure-appconfiguration-provider には、同期 from azure.appconfiguration.provider import load バージョンと非同期 from azure.appconfiguration.provider.aio import load バージョンの両方があります。 非同期バージョンを使用する場合は、非同期資格情報 ( from azure.identity.aio import DefaultAzureCredential) を使用する必要があります。
DefaultAzureCredential を使って、App Configuration ストアに対する認証を行います。
手順に従い、あなたの資格情報にApp Configuration データリーダー役割を割り当ててください。
from azure.appconfiguration.provider import load
from azure.identity import DefaultAzureCredential
endpoint = "your-endpoint"
credential = DefaultAzureCredential()
# Connect to Azure App Configuration using a token credential and load all key-values with no label.
config = load(endpoint=endpoint, credential=credential)
print(config["message"]) # value of the key "message" from the App Configuration store
load関数は、ディクショナリに似たオブジェクトであるAzureAppConfigurationProviderのインスタンスを返します。このインスタンスには、App Configuration ストアから読み込まれたすべての構成値が含まれます。 既定では、プロバイダーは、ストアからラベルのないすべての構成値を読み込みます。
JSON コンテンツ タイプの処理
App Configuration で JSON キー値を作成 できます。 Azure App Configuration からキー値を読み込むと、構成プロバイダーは、有効な JSON コンテンツ タイプ (アプリケーション/json など) のキー値を逆シリアル化された Python オブジェクトに自動的に変換します。
{
"key": "font",
"label": null,
"value": "{\r\n\t\"size\": 12,\r\n\t\"color\": \"red\"\r\n}",
"content_type": "application/json"
}
この JSON コンテンツにより、キー値が { size: 12, color: "red" }として読み込まれます。
appConfig = load(endpoint, credential)
size = appConfig["font"]["size"]
color = appConfig["font"]["color"]
注
バージョン 2.2.0 の azure-appconfiguration-provider以降、構成プロバイダーは、(JSONC) で定義されているコメントを、 application/json コンテンツ タイプのキー値で許可します。
セレクターを使用して特定のキー値を読み込む
既定では、 load メソッドは、構成ストアからラベルのないすべての構成を読み込みます。
loadの一覧である selects の省略可能なパラメーターを使用して、SettingSelector メソッドの動作を構成できます。
from azure.appconfiguration.provider import load, SettingSelector
from azure.identity import DefaultAzureCredential
selects = [
SettingSelector(key_filter="*", label_filter="\0"), # Empty label
SettingSelector(key_filter="*", label_filter="dev") # 'dev' label
]
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), selects=selects)
注
キー値は、セレクターが一覧表示される順序で読み込まれます。 複数のセレクターが同じキーを持つキー値を取得する場合、最後のセレクターの値は、以前に読み込まれた値をオーバーライドします。
タグ フィルター
タグ フィルター パラメーターは、特定のタグを持つキー値を選択します。 キー値は、すべてのタグとそれに対応する値がフィルターで指定されている場合にのみ読み込まれます。
from azure.appconfiguration.provider import load, SettingSelector
from azure.identity import DefaultAzureCredential
tag_filters = [{"env": "prod"}, {"region": "us"}]
selects = [SettingSelector(key_filter="*", label_filter="*", tag_filters=tag_filters)]
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), selects=selects)
注
アスタリスク (*)、コンマ (,)、および円記号 (\) は予約されており、タグ フィルターで使用する場合はバックスラッシュでエスケープする必要があります。
スナップショットから構成を読み込む
の snapshot_name パラメーターを使用して、SettingSelectorから構成設定を読み込むことができます。 スナップショット名を指定すると、そのスナップショットのすべての構成設定が読み込まれます。
snapshot_name パラメーターは、key_filter、label_filter、またはtag_filtersでは使用できません。
from azure.appconfiguration.provider import load, SettingSelector
from azure.identity import DefaultAzureCredential
snapshot_selects = [SettingSelector(snapshot_name="SnapshotName")]
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), selects=snapshot_selects)
注
パッケージのバージョン azure-appconfiguration-provider 以降を使用している場合は、スナップショットのサポートを利用できます。
構成プロバイダーを使用して読み込むことができるのは、構成の種類 Key で作成されたスナップショットのみです。
キーのトリミング
load パラメーターを使用して、トリミングされたキー プレフィックスの一覧を trim_prefixes 関数に提供することで、キーのプレフィックスを削除できます。
from azure.appconfiguration.provider import load
from azure.identity import DefaultAzureCredential
trim_prefixes = ["App1/"]
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), trim_prefixes=trim_prefixes)
print(config["message"]) # Access the key "message" instead of "/application/message"
構成設定のマッピング
configuration_mapper パラメーターを使用すると、構成設定を処理してプロバイダーに追加する前に変換できます。 マッパー関数は、各 ConfigurationSetting オブジェクトを受け取り、インプレースで変更できます。
from azure.appconfiguration.provider import load
from azure.identity import DefaultAzureCredential
def my_mapper(setting):
if setting.key == "message":
setting.value = "transformed value"
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), configuration_mapper=my_mapper)
マッパー関数は、ストアから読み込まれた構成設定ごとに呼び出され、次の操作を行うことができます。
- 設定値を追加する前に変更する
- 値の変換または復号化
- 設定キー、ラベル、またはコンテンツ タイプに基づいてカスタム処理を実行する
注
マッパーは、キートリミングが適用される前に呼び出されます。 マッパー関数で条件をチェックするときは、元のキーを使用します。
非同期操作の場合は、非同期マッパー関数を指定します。
from azure.appconfiguration.provider.aio import load
from azure.identity.aio import DefaultAzureCredential
async def my_async_mapper(setting):
if setting.key == "secret_message":
setting.value = await decrypt_value(setting.value)
config = await load(endpoint=endpoint, credential=DefaultAzureCredential(), configuration_mapper=my_async_mapper)
構成の更新
アプリケーションを再起動しなくても、App Configuration ストアから最新の設定をプルするようにプロバイダーを構成できます。 この動作を有効にするには、 refresh_on パラメーターを使用できます。
refresh_on パラメーターは、変更を監視する 1 つ以上のキー/ラベルを指定するList[WatchKey]です。 読み込まれた構成は、選択したキー値の変更がサーバーで検出されると更新されます。 既定では、更新間隔は 30 秒ですが、 refresh_interval パラメーターでオーバーライドできます。
on_refresh_success コールバックは、変更が検出され、エラーが発生しない場合にのみ呼び出されます。
on_refresh_errorコールバックは、更新が失敗したときに呼び出されます。
from azure.appconfiguration.provider import load, WatchKey
from azure.identity import DefaultAzureCredential
def my_callback_on_success():
# Do something on success
pass
def my_callback_on_fail(error):
# Do something on fail
pass
config = load(
endpoint=endpoint,
credential=DefaultAzureCredential(),
refresh_on=[WatchKey("Sentinel")],
refresh_interval=60,
on_refresh_success=my_callback_on_success,
on_refresh_error=my_callback_on_fail
)
refresh_onのみを設定しても、構成は自動的に更新されません。 更新をトリガーするには、refresh メソッドによって返されたインスタンス AzureAppConfigurationProvider の load メソッドを呼び出す必要があります。
config.refresh()
このように設計すると、アプリケーションがアイドル状態のときに App Configuration に不要な要求が行われなくなります。 アプリケーションのアクティビティが発生する場所に、refresh の呼び出しを含める必要があります。 このプロセスは、 アクティビティドリブン構成の更新と呼ばれます。 たとえば、受着信要求を処理するとき、または複雑なタスクを実行する反復内で、refresh を呼び出すことができます。 更新が失敗すると、on_refresh_error が指定されていない限り、エラーがスローされます。
refreshメソッドは、更新間隔が経過していない場合の no-op です。 さらに、一度に実行できる更新チェックは 1 つだけであり、更新が既に進行中の場合は no-op として返されます。
機能フラグ
Azure App Configuration で 機能フラグを作成 できます。 既定では、構成プロバイダーは機能フラグを読み込まない。
feature_flags_enabled パラメーターを使用して、機能フラグの読み込みと更新を有効にすることができます。
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), feature_flags_enabled=True)
alpha = config["feature_management"]["feature_flags"]["Alpha"]
print(alpha["enabled"])
既定では、 feature_flags_enabled を True に設定すると、ラベルのないすべての機能フラグが読み込まれます。 特定のラベルを持つ機能フラグを読み込む場合は、 feature_flag_selectors パラメーターを使用して、 SettingSelector オブジェクトの一覧を取得する機能フラグをフィルター処理できます。
from azure.appconfiguration.provider import load, SettingSelector
config = load(
endpoint=endpoint,
credential=DefaultAzureCredential(),
feature_flags_enabled=True,
feature_flag_selectors=[SettingSelector(key_filter="*", label_filter="dev")]
)
alpha = config["feature_management"]["feature_flags"]["Alpha"]
print(alpha["enabled"])
注
Azure App Configuration から読み込まれた機能フラグを効果的に使用して管理するには、 featuremanagement ライブラリをインストールして使用します。 このライブラリは、アプリケーションの機能動作を制御するための構造化された方法を提供します。
機能の管理
機能管理ライブラリは、機能フラグに基づいてアプリケーション機能を開発および公開する方法を提供します。 機能管理ライブラリは、構成プロバイダー ライブラリと連携するように設計されています。 構成プロバイダーは、選択したすべての機能フラグを、feature_flags セクションのfeature_management一覧の構成に読み込みます。 機能管理ライブラリは、アプリケーションの読み込まれた機能フラグを利用して管理します。
次の例では、 featuremanagement ライブラリを構成プロバイダーと統合し、 Beta 機能フラグの状態に基づいて Express アプリケーションの API アクセシビリティを動的に制御する方法を示します。
from azure.appconfiguration.provider import load
from featuremanagement import FeatureManager
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), feature_flags_enabled=True)
feature_manager = FeatureManager(config)
print(f"Beta is: {feature_manager.is_enabled("Beta")}")
Python 機能管理ライブラリの使用方法の詳細については、 機能フラグのクイック スタートを参照してください。
フィーチャーフラグテレメトリ
機能フラグテレメトリが有効になっている場合、Azure App Configuration プロバイダーは機能フラグテレメトリ データに追加のプロパティを挿入します。 これらのプロパティは、機能フラグとその評価に関するより多くのコンテキストを提供します。
- AllocationID: 機能フラグの割り当ての状態を表す一意の識別子。
- ETag: 機能フラグの現在の ETag。
-
FeatureFlagReference:
<your_store_endpoint>kv/<feature_flag_key>形式の機能フラグへの参照。 ラベルが存在する場合、参照にはクエリ パラメーター (<your_store_endpoint>kv/<feature_flag_key>?label=<feature_flag_label>) として含まれます。
完全なスキーマは、 アプリ構成機能評価イベント スキーマ定義にあります。 機能フラグ テレメトリの使用方法の詳細については、機能 フラグのテレメトリの有効化 に関するチュートリアルを参照してください。
機能フラグの更新
機能フラグの更新を有効にするには、 feature_flag_refresh_enabled=Trueを設定する必要があります。 このパラメーターを使用すると、プロバイダーは構成を更新するのと同じ方法で機能フラグを更新できます。 構成とは異なり、読み込まれたすべての機能フラグが変更を監視され、更新が発生します。 構成設定と機能フラグの更新は、互いに独立しています。 構成設定と機能フラグの両方が refresh メソッドによって更新されますが、機能フラグを変更しても、構成が更新されることはありません。また、その逆も同様です。 また、構成設定の更新が有効になっていない場合でも、機能フラグを更新に対して有効にすることができます。
config = load(
endpoint=endpoint,
credential=DefaultAzureCredential(),
feature_flags_enabled=True,
feature_flag_refresh_enabled=True
)
# Later in your code
config.refresh()
Key Vault の参照
Azure App Configuration は、Azure Key Vault に格納されているシークレットの参照をサポートします。 App Configuration では、Key Vault に格納されているシークレットにマップされるキーを作成できます。 シークレットは Key Vault に安全に格納されますが、読み込まれた他の構成と同様にアクセスできます。
構成プロバイダー ライブラリは、App Configuration に格納されている他のキーの場合と同様に、Key Vault 参照を取得します。 クライアントはキーを Key Vault 参照として認識するため、一意のコンテンツ タイプを持ち、クライアントは Key Vault に接続してアプリケーションの値を取得します。 資格情報を指定するか、クライアントを指定して、Key Vault に接続する方法を構成する必要があります。
資格情報を使用
引数 keyvault_credential は資格情報で設定でき、すべてのキー ボールト参照はそれによって解決されます。 プロバイダーは、指定された資格情報で参照されている任意のキー コンテナーへの接続を試みます。
from azure.appconfiguration.provider import load, AzureAppConfigurationKeyVaultOptions
from azure.identity import DefaultAzureCredential
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), keyvault_credential=DefaultAzureCredential())
クライアントと一緒に
クライアント構成のディクショナリを使用して、引数 keyvault_client_configs を設定できます。
from azure.appconfiguration.provider import load
from azure.identity import DefaultAzureCredential
secret_clients = {
key_vault_uri: {
'credential': DefaultAzureCredential()
}
}
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), keyvault_client_configs=secret_clients)
注
指定された追加のプロパティは、 SecretClientの作成に渡されます。
シークレット リゾルバー
資格情報またはクライアントが指定されていない場合は、シークレット リゾルバーを使用できます。 シークレット リゾルバーは、キー コンテナー参照に必要な任意の値を返す方法を提供します。
from azure.appconfiguration.provider import load
from azure.identity import DefaultAzureCredential
def secret_resolver(uri):
return "From Secret Resolver"
config = load(endpoint=endpoint, credential=DefaultAzureCredential(), secret_resolver=secret_resolver)
鍵庫のシークレットの更新
Azure App Configuration を使用すると、構成の更新サイクルとは別にシークレットの更新間隔を構成できます。 これは、App Configuration の Key Vault 参照 URI は変更されませんが、セキュリティ プラクティスの一環として Key Vault の基になるシークレットがローテーションされる可能性があるため、セキュリティにとって非常に重要です。
アプリケーションで常に最新のシークレット値を使用できるようにするには、secret_refresh_intervalでloadキーワードを構成します。 これにより、次の場合にプロバイダーは Key Vault から新しいシークレット値を取得するように強制されます。
- アプリケーションで
refreshが呼び出されます - シークレットの構成済みの更新間隔が経過しました
このメカニズムは、App Configuration ストアで変更が検出されない場合でも機能し、ローテーションされたシークレットとアプリケーションの同期を維持します。
from azure.appconfiguration.provider import load
from azure.identity import DefaultAzureCredential
config = load(
endpoint=endpoint,
credential=DefaultAzureCredential(),
keyvault_credential=DefaultAzureCredential(),
secret_refresh_interval=7200 # 2 hours
)
ジオレプリケーション
Azure App Configuration Provider ライブラリは、提供された構成ストアのレプリカを自動的に検出し、問題が発生した場合はレプリカを使用します。 詳細については、「 geo レプリケーション」を参照してください。
レプリカの検出は既定で有効になっています。 無効にする場合は、 replica_discovery_enabled を False に設定できます。
from azure.appconfiguration.provider import load
from azure.identity import DefaultAzureCredential
config = load(
endpoint=endpoint,
credential=DefaultAzureCredential(),
replica_discovery_enabled=False
)
次のステップ
Python 構成プロバイダーの使用方法については、次のチュートリアルに進んでください。
Web アプリケーションでプロバイダーを使用する方法については、Django と Flask の例を参照してください。