azure-appconfiguration-py

CategoryCoding
AuthorAgentic Awesome Skills 社区
LicenseMIT
Rating4.50/5
Uses2.7K

Azure App Configuration SDK for Python

Centralized configuration management with feature flags and dynamic settings.

Installation

bash
pip install azure-appconfiguration

Environment Variables

bash
AZURE_APPCONFIGURATION_CONNECTION_STRING=Endpoint=https://<name>.azconfig.io;Id=...;Secret=...

Or for Entra ID:

AZURE_APPCONFIGURATION_ENDPOINT=https://<name>.azconfig.io

Authentication

Connection String

python
from azure.appconfiguration import AzureAppConfigurationClient

client = AzureAppConfigurationClient.from_connection_string(
os.environ["AZURE_APPCONFIGURATION_CONNECTION_STRING"]
)

Entra ID

python
from azure.appconfiguration import AzureAppConfigurationClient
from azure.identity import DefaultAzureCredential

client = AzureAppConfigurationClient(
base_url=os.environ["AZURE_APPCONFIGURATION_ENDPOINT"],
credential=DefaultAzureCredential()
)

Configuration Settings

Get Setting

python
setting = client.get_configuration_setting(key="app:settings:message")
print(f"{setting.key} = {setting.value}")

Get with Label

python
# Labels allow environment-specific values
setting = client.get_configuration_setting(
    key="app:settings:message",
    label="production"
)

Set Setting

python
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)

Delete Setting

python
client.delete_configuration_setting(
    key="app:settings:message",
    label="development"
)

List Settings

All Settings

python
settings = client.list_configuration_settings()
for setting in settings:
    print(f"{setting.key} [{setting.label}] = {setting.value}")

Filter by Key Prefix

python
settings = client.list_configuration_settings(
    key_filter="app:settings:*"
)

Filter by Label

python
settings = client.list_configuration_settings(
    label_filter="production"
)

Feature Flags

Set Feature Flag

python
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)

Get Feature Flag

python
setting = client.get_configuration_setting(
    key=".appconfig.featureflag/beta-feature"
)
flag_data = json.loads(setting.value)
print(f"Feature enabled: {flag_data['enabled']}")

List Feature Flags

python
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'}")

Read-Only Settings

python
# Make setting read-only
client.set_read_only(
    configuration_setting=setting,
    read_only=True
)

Remove read-only

client.set_read_only( configuration_setting=setting, read_only=False )

Snapshots

Create Snapshot

python
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()

List Snapshot Settings

python
settings = client.list_configuration_settings(
    snapshot_name="v1-snapshot"
)

Async Client

python
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()

Client Operations

| Operation | Description |
|-----------|-------------|
| get_configuration_setting | Get single setting |
| set_configuration_setting | Create or update setting |
| delete_configuration_setting | Delete setting |
| list_configuration_settings | List with filters |
| set_read_only | Lock/unlock setting |
| begin_create_snapshot | Create point-in-time snapshot |
| list_snapshots | List all snapshots |

Best Practices

1. Use labels for environment separation (dev, staging, prod)
2. Use key prefixes for logical grouping (app:database:*, app:cache:*)
3. Make production settings read-only to prevent accidental changes
4. Create snapshots before deployments for rollback capability
5. Use Entra ID instead of connection strings in production
6. Refresh settings periodically in long-running applications
7. Use feature flags for gradual rollouts and A/B testing

When to Use

This skill is applicable to execute the workflow or actions described in the overview.

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
Join our Telegram