在Logic App Consumption ARM模板中用resourceid()替代concat()配置连接API ID报错,用法是否正确?
问题分析
你的resourceId()函数用法不正确,原因是Microsoft.Web/locations/managedApis属于订阅级资源,而默认的resourceId()会自动拼接当前部署的资源组路径,导致生成的ID格式不符合要求。
从错误信息里的ID就能看出问题:/subscriptions/xxxx/resourceGroups/xxxxx/providers/Microsoft.Web/locations/westeurope/managedApis/office365,多了/resourceGroups/xxxxx这一段,而正确的格式应该和concat生成的一致——不包含资源组。
正确用法
要生成订阅级资源的ID,需要使用resourceId的订阅范围重载形式,显式指定订阅ID,这样就不会添加资源组路径:
{ "type": "Microsoft.Web/connections", "apiVersion": "2016-06-01", "name": "[parameters('Office365_ConnectionName')]", "location": "[parameters('logicApp_Location')]", "kind": "V1", "properties": { "displayName": "[parameters('Office365_ConnectionDisplayName')]", "customParameterValues": {}, "api": { "id": "[resourceId(subscription().id, 'Microsoft.Web/locations/managedApis', parameters('logicApp_Location'), 'office365')]" } } }
原理说明
- 当调用
resourceId(subscriptionId, resourceType, resourceNameSegments)时,函数会生成订阅级的资源ID,格式和你用concat生成的完全一致:/subscriptions/{subscriptionId}/providers/Microsoft.Web/locations/{location}/managedApis/office365 - 而默认的
resourceId(resourceType, resourceNameSegments)是资源组范围的,会自动拼接/resourceGroups/{resourceGroupName},这对managedApis这类订阅级资源来说是无效格式。
内容的提问来源于stack exchange,提问作者Jorge Rodrigues
相关产品推荐
相关产品推荐

