使用Bicep导入导出APIM API时遭遇serviceUrl无效验证错误
解决APIM通过Bicep导入API时的「serviceUrl无效」验证错误
尝试通过Bicep导入导出的API时,触发验证错误:Validation error-The field serviceUrl is invalid
用到的Bicep代码
module apis_resource 'apis/deploy.bicep' = { name:'${uniqueString(deployment().name, parLocation)}-Apim-Api-0' params: { apiManagementServiceName: apiManagementService.name displayName: 'Tortue ADT API V1' name: 'TortueADTAPIV1' format:'openapi+json' value:loadTextContent('apis/TortueADTAPI.json') path:'/getTwinbyquery' subscriptionRequired:true } }
导出的OpenAPI模板
{ "openapi": "3.0.1", "info": { "title": "Test API", "description": "", "version": "1.0" }, "servers": [ { "url": "https://zneetwdn11apim00.azure-api.net" } ], "paths": { "/gettwinbyquery": { "post": { "summary": "getTwinByQuery", "description": "", "operationId": "gettwinbyquery", "responses": { "200": { "description": null } } } } }, "components": { "securitySchemes": { "apiKeyHeader": { "type": "apiKey", "name": "subscriptionKey", "in": "header" }, "apiKeyQuery": { "type": "apiKey", "name": "subscriptionKey", "in": "query" } } }, "security": [ { "apiKeyHeader": [] }, { "apiKeyQuery": [] } ] }
问题原因
导出的OpenAPI模板中,servers字段填写的是APIM自身的网关地址,而APIM要求通过OpenAPI导入API时,serviceUrl需要指向实际后端服务的地址,而非APIM网关地址,因此触发验证错误。
解决方案
修改OpenAPI模板的servers地址
将servers中的URL替换为ADT服务的真实后端地址,示例:"servers": [ { "url": "https://your-adt-service-endpoint.azure-devices.net" } ]移除servers数组
如果不需要在OpenAPI中指定后端地址,直接删除整个servers节点,后续可在APIM控制台或通过Bicep模块参数补充配置后端服务。检查Bicep模块参数
确认apis/deploy.bicep模块是否支持传入serviceUrl参数,若支持,可在params中添加该参数,覆盖OpenAPI模板中的配置:params: { // 其他参数... serviceUrl: 'https://your-adt-service-endpoint.azure-devices.net' }
内容的提问来源于stack exchange,提问作者V_B
相关产品推荐
相关产品推荐

