使用Bicep合并现有App Settings与新配置时遇错误求助
问题描述
我需要给已存在的Logic App(本质属于Web App站点)新增两个配置项,编写了如下Bicep代码,但构建新配置字典对象和执行union操作时均出现异常,求解决思路。
settings.bicep
param newSettings [object] resource logicApp 'Microsoft.Web/sites@2022-03-01' existing = { name: logicAppName } var currentSettings = list(resourceId('Microsoft.Web/sites/config', logicApp.name, 'appsettings'), '2022-03-01').properties // 合并现有配置与新配置,更新Logic App配置 resource siteconfig 'Microsoft.Web/sites/config@2022-03-01' = { parent: logicApp name: 'appsettings' properties: union(currentSettings, newSettings) }
main.bicep
var connectorSettings = [ {'auth' : 'something goes here'} {'runtimeUrl': 'something else goes here'} ] module logicAppConfig 'settings.bicep' = { name: 'extendedConfig' params: { logicAppName: logicAppName newSettings: connectorSettings } }
错误原因分析
- 参数类型不匹配:
settings.bicep中newSettings定义为[object](对象数组),但currentSettings是单个键值对对象(来自appsettings的properties),union函数要求两个输入类型一致(均为对象或均为数组),数组与对象执行union会直接报错。 - 配置结构错误:
main.bicep中connectorSettings是对象数组,但我们需要的是包含两个配置项的单个对象,数组结构不符合appsettings的键值对格式要求,导致构建配置字典时异常。
修正方案
修正后的settings.bicep
// 新增缺失的logicAppName参数 param logicAppName string // 将newSettings类型改为object,而非数组 param newSettings object resource logicApp 'Microsoft.Web/sites@2022-03-01' existing = { name: logicAppName } var currentSettings = list(resourceId('Microsoft.Web/sites/config', logicApp.name, 'appsettings'), '2022-03-01').properties resource siteconfig 'Microsoft.Web/sites/config@2022-03-01' = { parent: logicApp name: 'appsettings' // 两个对象执行union,新配置会覆盖现有同名键(如果存在) properties: union(currentSettings, newSettings) }
修正后的main.bicep
// 定义logicAppName参数(原代码缺失) param logicAppName string // 将connectorSettings改为单个对象,包含两个配置项 var connectorSettings = { 'auth' : 'something goes here' 'runtimeUrl': 'something else goes here' } module logicAppConfig 'settings.bicep' = { name: 'extendedConfig' params: { logicAppName: logicAppName newSettings: connectorSettings } }
额外说明
union函数会保留currentSettings的所有键,同时添加newSettings中的新键;如果存在同名键,newSettings的值会覆盖currentSettings的值。- 确保部署账号对目标Logic App有读取现有配置和更新配置的权限,避免权限类异常。
内容的提问来源于stack exchange,提问作者Ryan CrawCour
相关产品推荐
相关产品推荐

