如何使用ARM模板将NSG应用于现有子网

时间:2018-10-30 07:20:16

标签: azure arm-template

我正在使用ARM模板创建新的NSG,并在同一ARM模板上更新子网。我希望能够使用“引用”获取子网addressprefix,但是这样做时,我总是会检测到循环依赖。有什么办法解决吗?我的子网臂模板部分如下所示:

      {
        "name": "[parameters('subnetName')]",
        "properties": {
          "addressPrefix": "[reference(resourceId(variables('ResourceGroupName'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnetName')), '2018-03-01').addressPrefix]",
          "networkSecurityGroup": {
            "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('NSGName'))]"
          }
        }
      },

1 个答案:

答案 0 :(得分:1)

以下是有关如何将NSG应用于现有子网的链接:

Apply a NSG to an existing subnet

此模板使用链接模板来解决循环引用,但是您也可以使用嵌套模板在同一ARM模板中执行相同操作(请参见Using linked and nested templates when deploying Azure resources

这是一个使用嵌套模板执行相同操作的ARM模板:

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
  "contentVersion": "1.0.0.1",
  "parameters": {
    "virtualNetworkName": {
      "type": "string",
      "metadata": {
        "description": "The name of the existing VNet"
      }
    },
    "subnetName": {
      "type": "string",
      "defaultValue": "default",
      "metadata": {
        "description": "The name of the existing subnet."
      }
    },
    "nsgName": {
      "type": "string",
      "metadata": {
        "description": "The name of the new nsg."
      }
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Network/networkSecurityGroups",
      "name": "[parameters('nsgName')]",
      "location": "[resourceGroup().location]",
      "apiVersion": "2018-03-01",
      "properties": {

      }
    },
    {
      "apiVersion": "2017-08-01",
      "name": "apply-nsg-to-subnet",
      "type": "Microsoft.Resources/deployments",
      "resourceGroup": "[resourceGroup().name]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('nsgName'))]"
      ],
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "apiVersion": "2018-03-01",
              "type": "Microsoft.Network/virtualNetworks/subnets",
              "name": "[concat(parameters('virtualNetworkName'), '/', parameters('subnetName'))]",
              "location": "[resourceGroup().location]",
              "properties": {
                "addressPrefix": "[reference(resourceId(resourceGroup().name, 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnetName')), '2018-03-01').addressPrefix]",
                "networkSecurityGroup": {
                  "id": "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('nsgName'))]"
                }
              }
            }
          ]
        }
      }
    }
  ],
  "outputs": {}
}