mcpField
A
azure-appconfiguration-py

azure-appconfiguration-py

github.com/sickn33云与 DevOps48.7k65 次安装今天更新
代码仓库

关于 azure-appconfiguration-py

azure-appconfiguration-py 是用于管理 Azure App Configuration 集中式应用设置和功能标志的 Python SDK。它支持标签与筛选、只读控制、快照,以及同步和异步客户端,适用于应用开发者。

主要功能

  1. 01读取和更新配置设置
  2. 02按键或标签筛选设置
  3. 03管理功能标志
  4. 04将设置设为只读
  5. 05创建和列出快照
  6. 06同步与异步客户端

适用场景

  1. 01用环境标签区分设置
  2. 02获取部分应用设置
  3. 03管理功能标志状态
  4. 04部署前保存配置快照

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill azure-appconfiguration-py

安装后在 Claude Code 中输入/azure-appconfiguration-py确认已加载。

详细介绍

Azure App Configuration SDK for Python

集中式配置管理,支持功能标志和动态设置。

安装

pip install azure-appconfiguration

环境变量

AZURE_APPCONFIGURATION_CONNECTION_STRING=Endpoint=https://<name>.azconfig.io;Id=...;Secret=...
# Or for Entra ID:
AZURE_APPCONFIGURATION_ENDPOINT=https://<name>.azconfig.io

身份验证

连接字符串
import os
from azure.appconfiguration import AzureAppConfigurationClient

client = AzureAppConfigurationClient.from_connection_string(
    os.environ["AZURE_APPCONFIGURATION_CONNECTION_STRING"]
)
Entra ID
from azure.appconfiguration import AzureAppConfigurationClient
from azure.identity import DefaultAzureCredential

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

这些示例是相互独立的代码片段。使用 Entra 身份验证需要 azure-identity,并需要项目端点变量。替换或删除设置前,请确认存储、标签和键,并读取当前 ETag;并发编辑时请使用适当的匹配条件。功能标志的变更会影响真实用户,解锁设置则是单独的特权变更。请使用经批准的合成值,将列表范围降至最低,避免将凭据和数值载荷写入日志,并在发生故障时关闭异步凭据和客户端。快照需要确认实际创建状态并测试恢复流程;符合架构要求的标志本身并不能实现渐进式发布或 A/B 实验。

配置设置

获取设置
setting = client.get_configuration_setting(key="app:settings:message")
print(f"Read setting: {setting.key}")  # Do not log secret-bearing values
获取带标签的设置
# Labels allow environment-specific values
setting = client.get_configuration_setting(
    key="app:settings:message",
    label="production"
)
设置设置
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)
删除设置
client.delete_configuration_setting(
    key="app:settings:message",
    label="development"
)

列出设置

所有设置
settings = client.list_configuration_settings()
for setting in settings:
    print(f"{setting.key} [{setting.label}]")  # Values may be sensitive
按键前缀筛选
settings = client.list_configuration_settings(
    key_filter="app:settings:*"
)
按标签筛选
settings = client.list_configuration_settings(
    label_filter="production"
)

功能标志

设置功能标志
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)
获取功能标志
setting = client.get_configuration_setting(
    key=".appconfig.featureflag/beta-feature"
)
flag_data = json.loads(setting.value)
print(f"Feature enabled: {flag_data['enabled']}")
列出功能标志
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'}")

只读设置

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

快照

创建快照
from azure.appconfiguration import ConfigurationSnapshot, ConfigurationSettingsFilter

snapshot = ConfigurationSnapshot(
    filters=[
        ConfigurationSettingsFilter(key="app:*", label="production")
    ]
)

created = client.begin_create_snapshot(
    name="v1-snapshot",
    filters=snapshot.filters
).result()
列出快照设置
settings = client.list_configuration_settings(
    snapshot_name="v1-snapshot"
)

异步客户端

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")
    # Consume the authorized value without logging it.
    
    await client.close()
    await credential.close()

客户端操作

操作描述
get_configuration_setting获取单个设置
set_configuration_setting创建或更新设置
delete_configuration_setting删除设置
list_configuration_settings使用筛选条件列出设置
set_read_only锁定/解锁设置
begin_create_snapshot创建时间点快照
list_snapshots列出所有快照

最佳实践

  1. 使用标签 区分环境(dev、staging、prod)
  2. 使用键前缀 进行逻辑分组(app:database:、app:cache:)
  3. 将生产设置设为只读,防止意外更改
  4. 在部署前创建快照,以便回滚
  5. 在生产环境中使用 Entra ID,而不是连接字符串
  6. 定期刷新设置,用于长时间运行的应用程序
  7. 使用功能标志 实现渐进式发布和 A/B 测试

适用场景

当任务涉及执行概述中描述的工作流或操作时,可使用此技能。

限制

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 不要将输出视为环境特定验证、测试或专家审查的替代品。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并请求澄清。

评论

支持 Markdown