嵌套的 ARM 模板和dependsOn

Kam*_*nov 5 azure azure-rm-template

我正在使用我的 ARM 模板创建一组 NSG 规则,并尝试更新子网以在嵌套的 ARM 模板中使用这些 NSG 规则。模板部署失败,并显示“正在进行对此或相关资源的另一操作”。我尝试在嵌套模板中使用“dependsOn”功能,但这并不能解决问题。我试图给出 NSG 名称和 resourceId()

"[resourceId('Microsoft.Network/networkSecurityGroups', variables('NSGName'))]",

没有运气的依赖。在尝试更新子网之前,是否有更好的方法来等待 NSG 规则准备就绪?

模板:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "virtualNetName": {
      "type": "string",
    },
    "subnetName": {
      "type": "string",
    }
  },
  "variables": {
    "NSGName": parameters('subnetName')
    "ResourceGroupName": "[resourceGroup().name]"
  },
  "resources": [
    {
      "apiVersion": "2017-11-01",
      "type": "Microsoft.Network/networkSecurityGroups",
      "name": "[variables('NSGName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "securityRules": [
          {
            "name": "Allow-Inbound-RDP",
            "properties": {
              "protocol": "Tcp",
              "sourcePortRange": "*",
              "destinationPortRange": "3389",
              "sourceAddressPrefix": "192.168.0.1/24",
              "destinationAddressPrefix": "*",
              "access": "Allow",
              "priority": 4050,
              "direction": "Inbound"
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2017-08-01",
      "name": "apply-nsg-to-subnet",
      "type": "Microsoft.Resources/deployments",
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkSecurityGroups', variables('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('virtualNetName'), '/', parameters('subnetName'))]",
              "properties": {
                "addressPrefix": "[reference(resourceId(variables('ResourceGroupName'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetName'), parameters('subnetName')), '2018-03-01').addressPrefix]",
                "networkSecurityGroup": {
                  "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('NSGName'))]"
                }
              }
            }
          ]
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我相信一个 NSG 和一个子网更新会顺利通过,但当我用八个更新时就不行了。

4c7*_*b41 5

您的嵌套部署本身需要依赖于它(另一个嵌套部署),这意味着您需要添加:

[resourceId('Microsoft.Network/networkSecurityGroups', variables('NSGName'))].

内部部署资源不能依赖于部署之外的任何内容(并且因为它嵌套在父级中的所有内容都在它之外)。

  • 不,您的嵌套部署需要依赖于它,而不是子网\vnet INSIDE 嵌套部署 (2认同)