Azure ARM模板不同的资源组依赖关系问题

时间:2018-11-27 19:39:34

标签: json azure templates

我有一个模板,可以在VNET的专用资源组中部署新模板。我想在VNET的子网中部署网络接口,但是将网络接口放在其自己的单独资源组中。运行模板时,出现以下错误。我确定这是一个依赖关系问题,但是dependsOn参数对我不起作用...有什么想法吗?

收到的错误

  "error": {
    "code": "InvalidResourceReference",
    "message": "Resource /subscriptions/{removed-subscription-id}/resourceGroups/vnet-resource-group/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/subnet-1 referenced by resource /subscriptions/{removed-subscription-id}/resourceGroups/test-rg-1/providers/Microsoft.Network/networkInterfaces/my-first-nic was not found. Please make sure that the referenced resource exists, and that both resources are in the same region.",
    "details": []
  }
}

模板

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vnetName": {
      "type": "string",
      "defaultValue": "my-vnet"
    },
    "vnetResourceGroup": {
      "type": "string",
      "defaultValue": "vnet-resource-group"
    },
    "nicResourceGroup": {
      "type": "string",
      "defaultValue": "nic-resource-group"
    }
  },
  "variables": {
    "vnetID": "[resourceId(parameters('vnetResourceGroup'), 'Microsoft.Network/virtualNetworks', parameters('vnetName'))]",
    "subnetID": "[concat(variables('vnetID'),'/subnets/','subnet-1')]"
  },
  "resources": [
    {
      "apiVersion": "2017-05-10",
      "name": "vnetNestedTemplate",
      "type": "Microsoft.Resources/deployments",
      "resourceGroup": "[parameters('vnetResourceGroup')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
              "apiVersion": "2018-06-01",
              "name": "my-vnet",
              "type": "Microsoft.Network/virtualNetworks",
              "location": "[resourceGroup().location]",
              "properties": {
                "addressSpace": {
                  "addressPrefixes": [
                    "10.0.0.0/16"
                  ]
                },
                "subnets": [
                  {
                    "name": "subnet-1",
                    "properties": {
                      "addressPrefix": "10.0.0.0/24"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    },
    {
      "apiVersion": "2017-05-10",
      "name": "nestedNicTemplate",
      "type": "Microsoft.Resources/deployments",
      "resourceGroup": "[parameters('nicResourceGroup')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
              "apiVersion": "2015-06-15",
              "type": "Microsoft.Network/networkInterfaces",
              "name": "my-first-nic",
              "location": "[resourceGroup().location]",
              "dependsOn": [
                "[resourceId(parameters('vnetResourceGroup'), 'Microsoft.Network/virtualNetworks', parameters('vnetName'))]"
              ],
              "properties": {
                "ipConfigurations": [
                  {
                    "name": "ipconfig1",
                    "properties": {
                      "privateIPAllocationMethod": "Static",
                      "subnet": {
                        "id": "[variables('subnetID')]"
                      },
                      "privateIpAddress": "10.0.0.5"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

您需要添加:

"dependsOn": [
    "vnetNestedTemplate"
]

到第二个部署。在模板中,您只能依赖同一模板中的源。由于您要调用嵌套部署,因此它不在同一模板中(而是在嵌套模板中)。

ps。也许您只是显示了一个过于简化的示例,但为此没有必要使用嵌套部署(ESPECIALLY INLINE)。
pps。我建议不要使用INLINE嵌套部署,因为它们确实具有怪异的机制