Logic Apps ARM模板使用现有Vnet/Subnet及报错解决方法
问题根因
- 独立编写的
Microsoft.Web/sites/config资源不符合ARM模板资源段匹配规则:该类型是Logic Apps站点的子资源,作为根级资源部署时,名称必须为<Logic Apps名称>/<子资源固定名>格式,你直接传入VNet名称作为资源名,段数不匹配触发验证报错。 - 嵌套在站点资源内的VNet配置写法错误:子资源类型未写全,且使用了错误的属性名,无法被ARM识别为合法的VNet集成配置。
- 跨资源组VNet场景下未指定VNet所属资源组,会导致部署时找不到目标子网资源。
- 配置属性混用了新旧API版本的字段:老版本API用
subnetRef、isSwift字段,2021-03-01及之后版本需使用subnetResourceId、swiftSupported字段。
正确配置方案
前置要求:用于集成的子网必须提前委派给Microsoft.Web/serverFarms服务,且子网已禁用私有端点网络策略,标准层Logic Apps才支持区域VNet集成,消费层Logic Apps不支持该配置方式。
方案1:嵌套子资源写法(推荐)
直接替换原有Microsoft.Web/sites资源内resources数组下的错误networkconfig块即可,不需要额外调整依赖:
"resources": [ { "type": "config", "apiVersion": "2021-03-01", "name": "virtualNetwork", "dependsOn": [ "[parameters('logicAppFEname')]" ], "properties": { "subnetResourceId": "[resourceId(parameters('vnetResourceGroupName', resourceGroup().name), 'Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]", "swiftSupported": true } } ]
如果你的VNet和Logic Apps部署在同一个资源组,不需要额外新增参数;如果跨资源组部署,需要在模板的parameters块新增以下参数:
"vnetResourceGroupName": { "type": "String", "defaultValue": "[resourceGroup().name]", "metadata": { "description": "目标VNet所属的资源组名称" } }
方案2:根级独立资源写法
如果要把VNet集成配置作为独立资源放在模板根层级的resources数组中,使用以下正确写法,注意name字段必须拼接Logic Apps名称和固定子资源名virtualNetwork:
{ "type": "Microsoft.Web/sites/config", "apiVersion": "2021-03-01", "name": "[concat(parameters('logicAppFEname'), '/virtualNetwork')]", "location": "[parameters('location')]", "dependsOn": [ "[resourceId('Microsoft.Web/sites', parameters('logicAppFEname'))]" ], "properties": { "subnetResourceId": "[resourceId(parameters('vnetResourceGroupName', resourceGroup().name), 'Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]", "swiftSupported": true } }
已配置项验证
你模板中已配置的以下参数符合VNet集成要求,不需要修改:
WEBSITE_VNET_ROUTE_ALL值设为1,可确保Logic Apps所有出站流量路由到VNetWEBSITE_CONTENTOVERVNET值设为1,支持Logic Apps通过VNet访问关联存储账户的文件共享
内容的提问来源于stack exchange,提问作者Abhishek Singh
相关产品推荐
相关产品推荐

