ARM 模板 - 在两个嵌套模板之间创建依赖关系

时间:2021-01-01 13:42:11

标签: azure-resource-manager arm-template

我有两个嵌套部署:

一个用于部署托管标识的资源组 A。

第二个,用于部署 Keyvault 并为资源组 A 中的 ManagedIdentity 设置访问策略的资源组 B。


我希望资源组 B 的嵌套部署依赖于资源组 A 的嵌套部署。 (我的主模板正在部署到资源组 C)


我试过了:

"dependsOn": [
                "[variables('resourceGroupADeploymentName')]"
              ],

但我一直失败: 未找到资源组“A”下的资源“Microsoft.ManagedIdentity/userAssignedIdentities/managedIdentityA”。

过了一会儿,我看到在资源组 A 中创建了 ManagedIdentityA - 所以这意味着dependsOn 不起作用并且resourceGroupB 部署没有等待ResourceGroupA 部署。

我也尝试过使用dependsOn resourceId,但是没有用。 (并将dependsOn 添加到ResourceGroupB 内的实际KeyVault 资源部署中)


知道如何让资源组 B 中的资源依赖于资源组 A 中的资源吗?


这是我用于 resourceGroupB 的 ARM 模板:

{
      "name": "resourceGroupBDeploymentName",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "[variables('resourceDeploymentApiVersion')]",
      "resourceGroup": "[parameters('B')]",
      "subscriptionId": "[parameters('S')]",
      "dependsOn": [
            "[variables('resourceGroupADeploymentName')]"
      ],
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.KeyVault/vaults/accessPolicies",
              "name": "[concat(parameters('deploymentKvName'), '/add')]",
              "apiVersion": "[variables('kvApiVersion')]",
              "properties": {
                "accessPolicies": [
                  {
                    "tenantId": "[parameters('S')]",
                    "objectId": "[reference(variables('ManagedIdentityResourceGroupA'), '2018-11-30').principalId]",
                    "permissions": {
                        "keys": [],
                        "secrets": [],
                        "certificates": [
                            "Get"
                        ]
                      }
                    }
                  ]
              }
            }           
            }          
          ]
        }
      }
    }

这是我用于 resourceGroupA 的 ARM 模板:

{
      "name": "[variables('ManagedIdentityResourceGroupA')]",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "[variables('resourceDeploymentApiVersion')]",
      "resourceGroup": "[parameters('A')]",
      "subscriptionId": "[parameters('S')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "name": "[variables('ManagedIdentityResourceGroupA')]",
              "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
              "apiVersion": "2018-11-30",
              "tags": {},
              "location": "[resourceGroup().location]"
            }
          ]
        }
      }
    },

1 个答案:

答案 0 :(得分:0)

我认为目前还没有办法解决这个问题。依赖项仅在同一资源组中起作用。您可以使用部署脚本资源来运行一个脚本来检查状态并且可以作为一个dependsOn