在 ARM 模板中使用 dependsOn 属性

using dependsOn property in ARM Template

我在部署其他资源之前先部署 VNET。它确实部署了第一个 VNET 模板,但在部署其他模板时出错,因为它表示子网处于配置状态,即资源正在更新。

我正在使用嵌套模板并尝试在 ARM 中使用 dependsOn 属性,但无法正常工作。是否可以在资源级别使用它?

"resources": [
    {
      "apiVersion": "2017-05-10",
      "name": "vNet_ResourceUnit",
      "type": "Microsoft.Resources/deployments",
      "resourceGroup": "[resourceGroup().name]",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[variables('vnetTemplateUrl')]",
          "contentVersion": "1.0.0.0"
        },
        "parameters": {
          "hyphenBasedPrefix": {
            "value": "[variables('hyphenBasedPrefix')]"
          },
          "baseTemplateUrl": {
            "value": "[parameters('baseTemplateUrl')]"
          },
          "vnetObject": {
            "value": "[variables('vnet')]"
          }
        }
      }
    },
    {
      "apiversion": "2017-05-10",
      "name": "keyVault_resourceunit",
      "type": "microsoft.resources/deployments",
      "resourcegroup": "[resourcegroup().name]",
      "dependsOn": [
        ------
      ],
      "properties": {
        "mode": "incremental",
        "templatelink": {
          "uri": "[variables('keyVaultTemplateUrl')]",
          "contentversion": "1.0.0.0"
        },
        "parameters": {
          "hyphenbasedprefix": {
            "value": "[variables('hyphenbasedprefix')]"
          },
          "basetemplateurl": {
            "value": "[parameters('basetemplateurl')]"
          },
          "keyvaultobject": {
            "value": "[variables('keyvault')]"
          },
          "vnetObject": {
            "value": "[variables('vnet')]"
          }
        }
      }
    }
  ]

如何在资源级别使用此处的 dependsOn 属性?我确实尝试使用最后一个模板:

"[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName'))]"

但是它不起作用。 我如何在 'keyVault_resourceunit' 本身中使用它?

您需要等待部署完成,而不是部署中的资源(因为它们在不同的部署中,模板对它们一无所知)。

"[resourceId('Microsoft.Resources/deployments', 'vNet_ResourceUnit')]"

不要在依赖项中使用资源 ID,而是尝试使用资源对象的名称,即您问题中代码第 3 行的值“vNet_ResourceUnit”。

"dependsOn": [
  "vNet_ResourceUnit"
]

其作用是让 arm 进程等待资源部署(名为“vNet_ResourceUnit”)完全完成,然后再开始 keyVault_resourceunit 部署。