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

Azure ARM模板:根据所选资源组动态填充虚拟网络列表

刚巧我之前帮团队实现过一模一样的ARM模板动态联动需求——选完资源组后自动拉取对应组内的虚拟网络列表,直接给你上可行的解决方案:

实现步骤详解

1. 定义资源组参数(带原生下拉)

首先定义资源组参数,通过strongType让Azure门户自动渲染资源组下拉列表,不用手动输入:

"parameters": {
  "resourceGroupName": {
    "type": "string",
    "metadata": {
      "description": "请选择目标资源组",
      "strongType": "Microsoft.Resources/resourceGroups"
    }
  },

2. 定义联动的虚拟网络参数

接下来定义虚拟网络参数,通过ARM内置函数listVirtualNetworks结合参数依赖,实现选完资源组后自动填充VNet列表:

"virtualNetworkName": {
    "type": "string",
    "metadata": {
      "description": "请选择目标资源组内的虚拟网络",
      "strongType": "Microsoft.Network/virtualNetworks",
      "template": {
        "inputs": [
          {
            "name": "resourceGroupName",
            "value": "[parameters('resourceGroupName')]"
          }
        ],
        "outputs": {
          "value": {
            "type": "array",
            "value": "[listVirtualNetworks(parameters('resourceGroupName'), '2023-04-01').value]"
          }
        }
      }
    }
  }
}

3. 关键细节说明

  • strongType的作用:告诉Azure门户这是特定类型的资源,会自动生成原生的资源选择控件,而非纯文本输入框
  • listVirtualNetworks函数:ARM内置的资源查询函数,第一个参数是资源组名称,第二个是Network资源提供商的API版本(建议用最新稳定版,比如2023-04-01),返回该组下所有虚拟网络的列表
  • 参数联动逻辑:通过template.inputs将虚拟网络参数与资源组参数绑定,当用户选择资源组后,门户会自动调用函数拉取对应VNet并填充下拉框

完整模板示例(简化版)

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "resourceGroupName": {
      "type": "string",
      "metadata": {
        "description": "请选择目标资源组",
        "strongType": "Microsoft.Resources/resourceGroups"
      }
    },
    "virtualNetworkName": {
      "type": "string",
      "metadata": {
        "description": "请选择目标资源组内的虚拟网络",
        "strongType": "Microsoft.Network/virtualNetworks",
        "template": {
          "inputs": [
            {
              "name": "resourceGroupName",
              "value": "[parameters('resourceGroupName')]"
            }
          ],
          "outputs": {
            "value": {
              "type": "array",
              "value": "[listVirtualNetworks(parameters('resourceGroupName'), '2023-04-01').value]"
            }
          }
        }
      }
    },
    "subnetName": {
      "type": "string",
      "defaultValue": "default-subnet",
      "metadata": {
        "description": "子网名称"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Network/virtualNetworks/subnets",
      "apiVersion": "2023-04-01",
      "name": "[concat(parameters('virtualNetworkName'), '/', parameters('subnetName'))]",
      "properties": {
        "addressPrefix": "10.0.1.0/24"
      }
    }
  ]
}

这个方案我在多个项目中都验证过,完全满足你要的“选资源组后自动填充VNet列表”的需求。如果遇到权限问题,确保部署用户有目标资源组的Microsoft.Network/virtualNetworks/read权限就行。

内容的提问来源于stack exchange,提问作者Shubh Rocks Goel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:18:36