如何使用ARM模板将子网从一个资源组部署到位于不同资源组的现有虚拟网络中?

时间:2018-05-16 08:54:43

标签: azure azure-resource-manager subnet azure-virtual-network

我正在开发Azure资源管理器模板,目前我使用NSG和UDR为NSG,路由表和子网开发了ARM模板。

我编写了以下代码行,用于将子网以及NSG和UDR添加到现有虚拟网络中。

"resources": [{
  "apiVersion": "2017-10-01",
  "type": "Microsoft.Network/virtualNetworks/subnets",
  "copy": {
    "name": "subnetCopy",
    "mode": "serial",
    "count": "[length(parameters('subnetNames'))]"
  },
  "name": "[ concat( parameters('existingVNETName'), '/', parameters('subnetNames')[copyIndex()] ) ]",
  "location": "[resourceGroup().location]",
  "properties": {
    "addressPrefix": "[parameters('subnetAddresses')[copyIndex()]]",
    "networkSecurityGroup": {
      "id": "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('subnetNSGs')[copyIndex()])]"
    },
    "routeTable": {
      "id": "[resourceId('Microsoft.Network/routeTables', parameters('subnetUDRs')[copyIndex()])]"
    }
  }
}]

仅当虚拟网络NSG和UDR位于同一资源组中时,上述代码才有效。但每当我将上述代码部署到不同的资源组时,我就会收到“此资源组中找不到虚拟网络资源”这样的错误。实际上,虚拟网络位于其他资源组中,位置相同。

有人可以根据我的上述要求建议我如何修改上述代码吗?

1 个答案:

答案 0 :(得分:1)

模板部署具有resourceGroup范围 - 因此您必须将该模板部署到参数('existingVNETName')所在的同一resourceGroup。您还需要部署到现有vnet所在的同一位置,它可能不在[resourceGroup()。location] ...

要检查几件事。