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

如何通过Bicep为Azure函数应用配置外部托管VNet出站集成

实现Azure函数应用与外部VNet的网络注入(Bicep)

要实现和Azure UI中「Enable network injection」一致的效果,你需要使用Swift VNet集成(这是UI操作对应的默认机制),核心配置要点如下:

正确的Bicep配置

1. 引用外部托管的VNet

首先正确引用现有外部VNet(如果VNet在其他资源组,需指定scope):

// 引用外部VNet
resource vNet 'Microsoft.Network/virtualNetworks@2023-06-01' existing = {
  name: vnetName
  // 若VNet在其他资源组,取消下方注释并替换资源组名称
  // scope: resourceGroup('target-vnet-resource-group')
}

// 提取目标子网ID(这里使用VNet中的第一个子网,可根据实际调整)
var targetSubnetId = vNet.properties.subnets[0].id

2. 配置符合要求的App Service Plan

函数应用必须使用Premium v3 (Pv3) 或 Elastic Premium (EP) SKU的App Service Plan,且需启用reserved属性:

resource appServicePlan 'Microsoft.Web/serverfarms@2023-01-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: 'P1v3'
    tier: 'PremiumV3'
    size: 'P1v3'
    family: 'Pv3'
    capacity: 1
  }
  properties: {
    reserved: true // 必须设置,用于VNet集成
  }
}

3. 部署带VNet注入的函数应用

直接在函数应用的属性中指定子网ID,同时保留reserved: true:

resource azFunction 'Microsoft.Web/sites@2023-01-01' = {
  name: functionName
  location: location
  properties: {
    enabled: true
    serverFarmId: appServicePlan.id
    reserved: true // 与Plan的reserved属性对应,必须设置
    virtualNetworkSubnetId: targetSubnetId // 必须指定子网ID,而非VNet ID
    publicNetworkAccess: 'Disabled' // 可选,按需禁用公网访问
    siteConfig: {
      vnetRouteAllEnabled: true // 可选,强制所有出站流量通过VNet
    }
  }
}

之前配置失败的原因

  • 选项1/2:选项1错误使用了VNet ID而非子网ID;选项2的配置逻辑本身正确,但可能因App Service Plan不符合要求(非Premium SKU或未设置reserved: true)导致失效。
  • 选项3/4:使用了传统VNet集成(isSwift: false),这与UI中的「Enable network injection」不是同一机制,传统集成需单独创建连接资源,且功能逻辑与Swift集成不同。

验证要点

  1. 子网必须已委托给Microsoft.Web/serverFarms(你的配置已满足此要求)。
  2. 目标子网需至少有6个可用IP地址(Swift VNet集成会预留IP资源)。
  3. 若VNet在其他资源组,需确保部署Bicep的身份拥有该资源组的读取权限。
  4. 函数应用部署后,可在Azure门户的「网络」>「VNet集成」中查看状态,确认是否与UI创建的效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:05:09