关于 azure-appconfiguration-py
azure-appconfiguration-py 是用于管理 Azure App Configuration 集中式应用设置和功能标志的 Python SDK。它支持标签与筛选、只读控制、快照,以及同步和异步客户端,适用于应用开发者。
主要功能
- 01读取和更新配置设置
- 02按键或标签筛选设置
- 03管理功能标志
- 04将设置设为只读
- 05创建和列出快照
- 06同步与异步客户端
适用场景
- 01用环境标签区分设置
- 02获取部分应用设置
- 03管理功能标志状态
- 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 | 列出所有快照 |
最佳实践
- 使用标签 区分环境(dev、staging、prod)
- 使用键前缀 进行逻辑分组(app:database:、app:cache:)
- 将生产设置设为只读,防止意外更改
- 在部署前创建快照,以便回滚
- 在生产环境中使用 Entra ID,而不是连接字符串
- 定期刷新设置,用于长时间运行的应用程序
- 使用功能标志 实现渐进式发布和 A/B 测试
适用场景
当任务涉及执行概述中描述的工作流或操作时,可使用此技能。
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并请求澄清。
评论
支持 Markdown