SDK Azure App Configuration pour Python
Gestion centralisée de la configuration avec feature flags et paramètres dynamiques.
Installation
pip install azure-appconfiguration
Variables d'environnement
AZURE_APPCONFIGURATION_CONNECTION_STRING=Endpoint=https://<name>.azconfig.io;Id=...;Secret=... # Alternative à l'authentification Entra ID
# Ou pour Entra ID :
AZURE_APPCONFIGURATION_ENDPOINT=https://<name>.azconfig.io # Requis pour l'authentification Entra ID
AZURE_TOKEN_CREDENTIALS=prod # Requis uniquement si DefaultAzureCredential est utilisé en production
Authentification
Chaîne de connexion
from azure.appconfiguration import AzureAppConfigurationClient
client = AzureAppConfigurationClient.from_connection_string(
os.environ["AZURE_APPCONFIGURATION_CONNECTION_STRING"]
)
Entra ID
import os
from azure.appconfiguration import AzureAppConfigurationClient
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
# Dev local : DefaultAzureCredential. Production : définissez AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Ou utilisez une credential spécifique directement en production :
# Voir https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
client = AzureAppConfigurationClient(
base_url=os.environ["AZURE_APPCONFIGURATION_ENDPOINT"],
credential=credential
)
Paramètres de configuration
Récupérer un paramètre
setting = client.get_configuration_setting(key="app:settings:message")
print(f"{setting.key} = {setting.value}")
Récupérer avec un label
# Les labels permettent des valeurs spécifiques à l'environnement
setting = client.get_configuration_setting(
key="app:settings:message",
label="production"
)
Définir un paramètre
from azure.appconfiguration import ConfigurationSetting
setting = ConfigurationSetting(
key="app:settings:message",
value="Hello, World!",
label="development",
content_type="text/plain",
tags={"environment": "dev"}
)
client.set_configuration_setting(setting)
Supprimer un paramètre
client.delete_configuration_setting(
key="app:settings:message",
label="development"
)
Lister les paramètres
Tous les paramètres
settings = client.list_configuration_settings()
for setting in settings:
print(f"{setting.key} [{setting.label}] = {setting.value}")
Filtrer par préfixe de clé
settings = client.list_configuration_settings(
key_filter="app:settings:*"
)
Filtrer par label
settings = client.list_configuration_settings(
label_filter="production"
)
Feature flags
Créer un feature flag
from azure.appconfiguration import ConfigurationSetting
import json
feature_flag = ConfigurationSetting(
key=".appconfig.featureflag/beta-feature",
value=json.dumps({
"id": "beta-feature",
"enabled": True,
"conditions": {
"client_filters": []
}
}),
content_type="application/vnd.microsoft.appconfig.ff+json;charset=utf-8"
)
client.set_configuration_setting(feature_flag)
Récupérer un feature flag
setting = client.get_configuration_setting(
key=".appconfig.featureflag/beta-feature"
)
flag_data = json.loads(setting.value)
print(f"Feature enabled: {flag_data['enabled']}")
Lister les feature flags
flags = client.list_configuration_settings(
key_filter=".appconfig.featureflag/*"
)
for flag in flags:
data = json.loads(flag.value)
print(f"{data['id']}: {'enabled' if data['enabled'] else 'disabled'}")
Paramètres en lecture seule
# Rendre un paramètre en lecture seule
client.set_read_only(
configuration_setting=setting,
read_only=True
)
# Retirer la lecture seule
client.set_read_only(
configuration_setting=setting,
read_only=False
)
Snapshots
Créer un snapshot
from azure.appconfiguration import ConfigurationSnapshot, ConfigurationSettingFilter
snapshot = ConfigurationSnapshot(
name="v1-snapshot",
filters=[
ConfigurationSettingFilter(key="app:*", label="production")
]
)
created = client.begin_create_snapshot(
name="v1-snapshot",
snapshot=snapshot
).result()
Lister les paramètres d'un snapshot
settings = client.list_configuration_settings(
snapshot_name="v1-snapshot"
)
Client asynchrone
from azure.appconfiguration.aio import AzureAppConfigurationClient
from azure.identity.aio import DefaultAzureCredential
async def main():
credential = DefaultAzureCredential()
client = AzureAppConfigurationClient(
base_url=endpoint,
credential=credential
)
setting = await client.get_configuration_setting(key="app:message")
print(setting.value)
await client.close()
await credential.close()
Opérations du client
| Opération | Description |
|---|---|
get_configuration_setting |
Récupérer un paramètre |
set_configuration_setting |
Créer ou mettre à jour un paramètre |
delete_configuration_setting |
Supprimer un paramètre |
list_configuration_settings |
Lister avec filtres |
set_read_only |
Verrouiller/déverrouiller un paramètre |
begin_create_snapshot |
Créer un snapshot à un instant T |
list_snapshots |
Lister tous les snapshots |
Bonnes pratiques
- Utilisez les labels pour la séparation des environnements (dev, staging, prod)
- Utilisez les préfixes de clés pour le regroupement logique (app:database:, app:cache:)
- Rendez les paramètres de production en lecture seule pour éviter les modifications accidentelles
- Créez des snapshots avant les déploiements pour la capacité de rollback
- Utilisez Entra ID au lieu des chaînes de connexion en production
- Rafraîchissez régulièrement les paramètres dans les applications longue durée
- Utilisez les feature flags pour les déploiements progressifs et les tests A/B