Bicep调用listKeys获取通知中心连接字符串遇BCP182错误求助
解决BCP182错误:Notification Hub连接字符串数组获取问题
错误原因
BCP182错误的核心是:Bicep变量要求在部署开始前(编译阶段)就能确定值,但你在notificationHubConfig变量的循环中使用了listKeys函数——这个函数属于运行时函数,需要在部署过程中调用现有资源的实时数据,无法在编译阶段求值,因此触发了冲突。
另外,你的yaml配置中notificationhubs是字符串格式的数组,直接在Bicep中使用会导致循环逻辑错误,需要先解析为真正的数组。
步骤一:修正输入参数解析
首先在Bicep模块中,将yaml传入的字符串数组解析为实际的数组:
param notificationhubs string param notificationHubResourceGroupName string // 将字符串格式的数组解析为Bicep数组 var notificationHubsArray = json(notificationhubs)
步骤二:替换变量为输出(推荐方案)
将原来的notificationHubConfig变量改为输出(output),因为输出支持运行时函数的调用:
resource namespace 'Microsoft.NotificationHubs/namespaces@2017-04-01' existing = [for i in range(0, length(notificationHubsArray)): { name: split(notificationHubsArray[i], ':')[1] scope: resourceGroup(notificationHubResourceGroupName) }] // 改为输出,支持运行时调用listKeys output notificationHubConfig array = [for i in range(0, length(notificationHubsArray)): { name: notificationHubsArray[i] value: listKeys('${namespace[i].id}/AuthorizationRules/RootManageSharedAccessKey', namespace[i].apiVersion).primaryConnectionString }]
步骤三:如果需要在模块内部使用连接字符串
如果不需要对外输出,而是要在模块内部将连接字符串配置到其他资源(如应用配置、密钥保管库),可以直接在资源的循环中调用listKeys,避免使用变量:
// 示例:将连接字符串写入应用配置 resource appConfig 'Microsoft.AppConfiguration/configurationStores@2023-03-01' existing = { name: 'your-app-config-name' } resource appConfigKey 'Microsoft.AppConfiguration/configurationStores/keyValues@2023-03-01' = [for i in range(0, length(notificationHubsArray)): { parent: appConfig name: notificationHubsArray[i] properties: { value: listKeys('${namespace[i].id}/AuthorizationRules/RootManageSharedAccessKey', namespace[i].apiVersion).primaryConnectionString contentType: 'text/plain' } }]
内容的提问来源于stack exchange,提问作者J Nguyen
相关产品推荐
相关产品推荐

