home / skills / sickn33 / antigravity-awesome-skills / azure-appconfiguration-py

azure-appconfiguration-py skill

/skills/azure-appconfiguration-py

This skill helps you manage centralized configuration and feature flags in Python using Azure App Configuration for dynamic, environment-specific settings.

npx playbooks add skill sickn33/antigravity-awesome-skills --skill azure-appconfiguration-py

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
5.5 KB
---
name: azure-appconfiguration-py
description: |
  Azure App Configuration SDK for Python. Use for centralized configuration management, feature flags, and dynamic settings.
  Triggers: "azure-appconfiguration", "AzureAppConfigurationClient", "feature flags", "configuration", "key-value settings".
package: azure-appconfiguration
---

# 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

Overview

This skill provides an Azure App Configuration SDK wrapper for Python to manage centralized configuration, feature flags, and dynamic settings. It enables secure access via connection strings or Entra ID, supports synchronous and asynchronous clients, and includes helpers for key-value CRUD, feature flag handling, snapshots, and read-only locks. Use it to centralize app settings, separate environments with labels, and rollout features safely.

How this skill works

The client connects to an App Configuration endpoint using a connection string or DefaultAzureCredential for Entra ID. It exposes operations to get, set, delete, and list configuration settings with optional key and label filters. Feature flags are stored as JSON configuration entries with a standardized content type and can be listed, read, and toggled. Snapshots capture point-in-time configuration sets, and read-only locks prevent accidental changes.

When to use it

  • Centralize application settings across multiple services and environments
  • Manage feature flags for gradual rollouts and A/B testing
  • Keep environment-specific values using labels (dev/staging/production)
  • Snapshot configurations before deployments for rollback readiness
  • Lock critical production settings to avoid accidental changes

Best practices

  • Use Entra ID (DefaultAzureCredential) in production instead of connection strings
  • Organize keys with clear prefixes (e.g., app:database:, app:cache:) and use labels per environment
  • Make production settings read-only and create snapshots before releases
  • Filter list operations by key_prefix or label to avoid scanning entire store
  • Refresh configuration in long-running processes and use async client for IO-bound workloads

Example use cases

  • Fetch per-environment database connection strings with key filters and labels
  • Implement a feature-flag driven rollout by toggling .appconfig.featureflag/* entries
  • Create a snapshot before a major deployment to enable quick rollback
  • Lock sensitive production keys to read-only and allow safe updates in staging
  • Streamline multi-service config management by centralizing shared keys and tags

FAQ

How do I authenticate in production?

Use Entra ID via DefaultAzureCredential and set AZURE_APPCONFIGURATION_ENDPOINT; avoid embedding connection strings.

How are feature flags represented?

Feature flags are JSON stored under keys prefixed with .appconfig.featureflag/ and use the content type application/vnd.microsoft.appconfig.ff+json;charset=utf-8.