You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bicep部署App Service虚拟网络集成失败问题排查

App Service虚拟网络集成Bicep部署未生效问题排查

问题场景

部署Bicep模板配置App Service出站流量时,部署命令执行无报错且返回成功,但App Service的虚拟网络集成未实际生效。

部署命令

$template = 'main.bicep'
$resourceGroup = "my-resource-group"
az deployment group create `
   --resource-group $resourceGroup `
   --template-file $template

原Bicep代码

var vnetResourceId = '/subscriptions/{subscription-id}/resourceGroups/my-resource-group/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/default'
var outboundVnetNet = 'doesItEvenMatter'
resource appService 'Microsoft.Web/sites@2024-04-01' = {
  name: 'my-awesome-app-lol'
  location: 'WestUS2'
  properties: {
    serverFarmId: appServicePlanId
    httpsOnly: true
    siteConfig: {
      cors: {
        allowedOrigins: [
          'https://portal.azure.com'
        ]
      }
      ftpsState: 'FtpsOnly'
      netFrameworkVersion: 'v8.0'
      vnetRouteAllEnabled: true
      vnetName: outboundVnetNet
    }
  }
}

resource outboundVnetConfiguration 'Microsoft.Web/sites/virtualNetworkConnections@2023-12-01' = {
  name: outboundVnetNet
  parent: appService
  properties: {
    isSwift: true
    vnetResourceId: vnetResourceId
  }
}

门户手动配置后导出的ARM模板片段

{
  "type": "Microsoft.Web/sites/virtualNetworkConnections",
  "apiVersion": "2023-12-01",
  "name": "my-awesome-app-lol/9e717979-f385-412e-b1a5-2fdffd21fa7f_default",
  "location": "West US 2",
  "dependsOn": [
    "[resourceId('Microsoft.Web/sites', 'my-awesome-app-lol')]"
  ],
  "properties": {
    "vnetResourceId": "/subscriptions/{subscription-id}/resourceGroups/my-resource-group/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/default",
    "isSwift": true
  }
}

问题原因

  1. 虚拟网络连接资源命名不符合Swift集成要求
    Swift模式的虚拟网络集成要求Microsoft.Web/sites/virtualNetworkConnections子资源的名称必须遵循{唯一GUID}_{子网名称}的格式(如门户导出的9e717979-f385-412e-b1a5-2fdffd21fa7f_default)。你使用自定义字符串doesItEvenMatter作为名称,Azure无法识别该连接为有效的虚拟网络集成配置。

  2. App Service站点配置中的vnetName设置错误
    siteConfig内的vnetName必须指向实际的子网名称(此场景中为default),而非自定义变量值,否则无法正确关联到目标子网。

修复后的Bicep代码

// 推荐通过现有资源引用获取子网信息,避免硬编码ID
resource vnet 'Microsoft.Network/virtualNetworks@2024-03-01' existing = {
  name: '{vnet-name}'
}

resource vnetSubnet 'Microsoft.Network/virtualNetworks/subnets@2024-03-01' existing = {
  name: 'default'
  parent: vnet
}

var subnetName = vnetSubnet.name
// 生成符合Swift集成要求的连接名称:GUID_子网名称
var vnetConnectionName = '${guid(vnetSubnet.id)}_${subnetName}'

resource appService 'Microsoft.Web/sites@2024-04-01' = {
  name: 'my-awesome-app-lol'
  location: 'WestUS2'
  properties: {
    serverFarmId: appServicePlanId // 确保该变量已在模板中正确定义
    httpsOnly: true
    siteConfig: {
      cors: {
        allowedOrigins: [
          'https://portal.azure.com'
        ]
      }
      ftpsState: 'FtpsOnly'
      netFrameworkVersion: 'v8.0'
      vnetRouteAllEnabled: true
      vnetName: subnetName // 使用实际子网名称
    }
  }
}

resource outboundVnetConfiguration 'Microsoft.Web/sites/virtualNetworkConnections@2023-12-01' = {
  name: vnetConnectionName // 使用符合格式的名称
  parent: appService
  location: appService.location // 显式指定位置,与App Service保持一致
  properties: {
    isSwift: true
    vnetResourceId: vnetSubnet.id // 通过资源引用获取正确的子网ID
  }
}

额外注意事项

  • 确保目标子网与App Service处于同一区域,且未被其他服务占用。
  • 子网需预留足够的IP地址供App Service使用(Swift集成默认需要至少16个可用IP)。
  • 若子网配置了NSG,需确保允许App Service的入站/出站流量规则。

内容的提问来源于stack exchange,提问作者chrisbuttacavoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:59:56