Azure App Configuration应部署至何种环境或资源组?
Azure App Configuration 跨环境部署的合理方案及IaC实现
部署位置建议
单独创建专属资源组部署Azure App Configuration是最合理的选择,核心原因如下:
- 规避项目初期限制:项目启动阶段就能独立部署该共用服务,无需等待生产资源组创建,也不需要生产资源组的Contributor权限,仅需专属资源组的对应权限即可。
- 匹配共用服务生命周期:App Configuration的生命周期和单个环境(开发/测试/生产)不绑定,单独资源组便于统一管理、权限隔离和成本核算。
- 避免误删风险:如果将其放入某一环境资源组,销毁该环境时极易误删这个跨环境共用的服务,专属资源组能彻底规避此类问题。
IaC模式下的实现方式
以Terraform和ARM模板为例,给出具体落地思路:
Terraform实现
- 单独定义专属资源组与App Configuration模块:
# 创建专属资源组 resource "azurerm_resource_group" "app_config_shared_rg" { name = "rg-shared-app-config-${var.project_id}" location = var.azure_region } # 部署共用的Azure App Configuration resource "azurerm_app_configuration" "shared_config" { name = "appconfig-shared-${var.project_id}" resource_group_name = azurerm_resource_group.app_config_shared_rg.name location = azurerm_resource_group.app_config_shared_rg.location } - 在各环境的IaC代码中,通过数据块引用共用服务:
# 引用已部署的共用App Configuration data "azurerm_app_configuration" "shared_config" { name = "appconfig-shared-${var.project_id}" resource_group_name = "rg-shared-app-config-${var.project_id}" } # 为Web App配置连接字符串 resource "azurerm_app_service" "webapp" { # ...其他Web App配置项 app_settings = { "AppConfig_ConnectionString" = data.azurerm_app_configuration.shared_config.primary_read_key.connection_string } }
ARM模板实现
- 单独编写共用App Configuration的部署模板(
shared-app-config.json):{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "projectId": { "type": "string" }, "location": { "type": "string" } }, "resources": [ { "type": "Microsoft.Resources/resourceGroups", "apiVersion": "2021-04-01", "name": "[concat('rg-shared-app-config-', parameters('projectId'))]", "location": "[parameters('location')]" }, { "type": "Microsoft.AppConfiguration/configurationStores", "apiVersion": "2023-03-01", "name": "[concat('appconfig-shared-', parameters('projectId'))]", "location": "[parameters('location')]", "resourceGroup": "[concat('rg-shared-app-config-', parameters('projectId'))]", "sku": { "name": "Standard" } } ] } - 在各环境的ARM模板中,通过
reference函数引用共用服务:{ # ...Web App资源定义 "properties": { "siteConfig": { "appSettings": [ { "name": "AppConfig_ConnectionString", "value": "[reference(resourceId('Microsoft.AppConfiguration/configurationStores', concat('appconfig-shared-', parameters('projectId'))), '2023-03-01').primaryReadKey.connectionString]" } ] } } }
额外注意事项
- 权限隔离:给不同环境的服务主体(如开发环境Web App的托管标识)分配App Configuration的只读权限,仅管理员保留读写权限,避免误修改共用配置。
- 配置区分:通过键前缀、标签或配置快照隔离不同环境的配置,比如开发环境用
dev-前缀,生产环境用prod-前缀,防止环境间配置混淆。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

