azure-appconfiguration-py

npx skills add https://github.com/microsoft/skills --skill azure-appconfiguration-py

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

  1. Utilisez les labels pour la séparation des environnements (dev, staging, prod)
  2. Utilisez les préfixes de clés pour le regroupement logique (app:database:, app:cache:)
  3. Rendez les paramètres de production en lecture seule pour éviter les modifications accidentelles
  4. Créez des snapshots avant les déploiements pour la capacité de rollback
  5. Utilisez Entra ID au lieu des chaînes de connexion en production
  6. Rafraîchissez régulièrement les paramètres dans les applications longue durée
  7. Utilisez les feature flags pour les déploiements progressifs et les tests A/B

Skills similaires