使用ARM模板创建NIC时如何引用另一个虚拟网络/资源组的子网

时间:2019-03-05 15:17:09

标签: json azure arm-template azure-template

我正在尝试为资源组中的VM创建一个NIC。我遇到的问题是我正在尝试引用Azure中另一个资源组的子网。因此,我必须使用ARM模板中的订阅级别部署来引用它。

"subnetref": "[concat(subscription().id, '/resourceGroups/', parameters('HUB Network RG'), '/providers/Microsoft.Network/virtualNetworks/', parameters('HUB VNet'), '/virtualNetworks/subnets', parameters('HUB DC Subnet'))]"

上面是我要创建的子网引用变量。然后,我在下面找到要创建的VM NIC。

{
    "type": "Microsoft.Network/networkInterfaces",
    "name": "[variables('nicnamedc1')]",
    "location": "[variables('location')]",
    "apiVersion": "2018-10-01",
    "properties": {
        "ipConfigurations": [
            {
                "name": "ipconfig1",
                "properties": {
                    "privateIPAllocationMethod": "Dynamic",
                    "subnet": {
                        "id": "[variables('subnetRef')]"
                    }
                }
            }
        ]
    }
},

然后我得到以下错误。

  

New-AzDeployment:14:54:23-资源   Microsoft.Network/networkInterfaces'before-nic'失败并显示消息   '{“错误”:{       “ code”:“ InvalidRequestFormat”,       “ message”:“无法解析请求。”,       “细节”: [         {           “ code”:“ InvalidJsonReferenceFormat”,           “消息”:“参考ID / subscriptions / 404422c0-743d-4459-9db0-01892d0c7348 / resourceGroups / hu   b-network-rg / providers / Microsoft.Network / virtualNetworks / bsrgh-hub-vnetvirtualNetworks / subnetsdomain   格式不正确。该ID应参考资源   类型为virtualNetworks / subnets。路径   properties.ipConfigurations [0] .properties.subnet。”

我认为它抱怨的是我在顶部使用subnetref变量的格式。有没有更好的方法可以做到这一点,或者我在某个地方出错了?

1 个答案:

答案 0 :(得分:1)

您忘记了代码中的/

"subnetref": "[concat(subscription().id, '/resourceGroups/', parameters('HUB Network RG'), '/providers/Microsoft.Network/virtualNetworks/', parameters('HUB VNet'), '/virtualNetworks/subnets/', parameters('HUB DC Subnet'))]"

但是最好使用resourceId()函数:

resourceId(parameters('HUB Network RG'), 'Microsoft.Network/virtualNetworks/subnets', parameters('HUB VNet'), parameters('HUB DC Subnet'))

它更短,更不容易出错