如何在ARM模板中获取Bing Maps企业版API查询密钥?
解决ARM模板中获取Bing Maps查询密钥的问题
我刚帮几个朋友处理过类似的ARM模板配置问题,你的写法方向是对的,但大概率是依赖关系没配置到位,或者有一些细节没注意到。下面给你一步步梳理解决方案:
核心问题分析
你尝试的reference语法本身没问题,但ARM模板是并行部署资源的,如果Web应用在Bing Maps资源完全创建好之前就尝试读取它的queryKey,就会出现“找不到资源”或者“属性不存在”的错误。所以关键是要确保Web应用(或它的应用设置)明确依赖Bing Maps资源。
完整可行的配置示例
我把相关的模板片段整理出来,你可以直接参考:
1. 先定义变量(按需调整)
"variables": { "bingMapsName": "my-bingmaps-resource", "webAppName": "my-webapp", "appServicePlanName": "my-appservice-plan" }
2. 部署Bing Maps资源
{ "type": "Microsoft.BingMaps/mapApis", "apiVersion": "2016-08-18", "name": "[variables('bingMapsName')]", "location": "[resourceGroup().location]", "sku": { "name": "S1" // 这里根据你的需求选择SKU }, "properties": {} }
3. 部署Web应用并引用查询密钥
重点是在Web应用的dependsOn里加上Bing Maps资源的ID,确保它等Bing Maps部署完成后再启动:
{ "type": "Microsoft.Web/sites", "apiVersion": "2022-03-01", "name": "[variables('webAppName')]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]", "[resourceId('Microsoft.BingMaps/mapApis', variables('bingMapsName'))]" // 关键:添加这个依赖 ], "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]" }, "resources": [ { "type": "config", "apiVersion": "2022-03-01", "name": "appsettings", "dependsOn": [ "[resourceId('Microsoft.Web/sites', variables('webAppName'))]" ], "properties": { // 这里就是你要的引用写法,和你之前的一致,但现在有了依赖保障 "BING_MAPS_QUERY_KEY": "[reference(resourceId('Microsoft.BingMaps/mapApis', variables('bingMapsName')), '2016-08-18').queryKey]" } } ] }
额外注意事项
- 如果你的Bing Maps资源部署在不同的资源组或订阅里,需要把
resourceId补全参数:resourceId('your-subscription-id', 'target-resource-group', 'Microsoft.BingMaps/mapApis', variables('bingMapsName')) - 确保
reference里的API版本和Bing Maps资源定义的apiVersion完全一致(都是2016-08-18),版本不匹配会导致属性读取失败。 - 部署后可以在Azure门户的Web应用“配置 > 应用程序设置”里验证密钥是否正确加载。
排查步骤(如果还是报错)
- 先检查Bing Maps资源是否部署成功,在门户里进入该资源,查看“密钥和终结点”确认
queryKey存在。 - 查看ARM模板的部署日志,错误信息会明确告诉你是资源未找到,还是属性不存在,根据提示调整。
内容的提问来源于stack exchange,提问作者ystvan
相关产品推荐
相关产品推荐

