0

我想创建一个 ARM 模板来部署以下内容:

  1. 资源组
  2. 资源组中的 Log Analytics 工作区 + 在其上启用 Sentinel
  3. 用于启用 MSSP 访问 Sentinel 的 Lighthouse 代码

要执行第三步,我需要使用 subscriptionDeploymentTemplate.json 架构,但对于两个我也需要资源组,所以我想使用 deploymentTemplate.json 架构。

我有单独做这些东西的代码,但我想把它们放在一起创建一个大模板文件。

问题是,当我将 LAW + Sentinel 启用代码放入 Microsoft.Resources/deployment 资源时,我的代码不起作用。我想将其部署为嵌套模板,因此我可以使用 deploymentTemplate.json 模式。当我将代码放入此资源时,它会在模板验证期间产生错误。它说:“部署模板验证失败:'资源'Microsoft.OperationalInsights/workspaces/workspace_name'未在模板中定义。”

但是当没有嵌套时,相同的代码也可以工作。那么,在嵌套的情况下依赖函数不起作用是否正常?对我来说,在其他类型的资源的情况下似乎没有问题。但是在这里,当我尝试部署“Microsoft.OperationalInsights/workspaces”然后部署“Microsoft.OperationsManagement/solutions”时它不起作用。

代码的相关部分:

"resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-10-01",
      "name": "sentinelDeployment",
      "resourceGroup": "[parameters('rgName')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "rgAssignment",
            "resourceGroup": "[parameters('rgName')]",
            "properties":{
                "mode":"Incremental",
                "template":{
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "resources": [
                      {
                        "type": "Microsoft.OperationalInsights/workspaces",
                        "apiVersion": "2020-08-01",
                        "name": "[parameters('workspaceName')]",
                        "location": "[parameters('location')]",
                        "properties": {
                          "retentionInDays": "[parameters('dataRetention')]",
                          "sku": {
                            "name": "PerGB2018"
                          },
                          "workspaceCapping": {
                              "dailyQuotaGb": "[parameters('dailyCap')]"
                          }
                        }
                      },
                      {
                        "type": "Microsoft.OperationsManagement/solutions",
                        "apiVersion": "2015-11-01-preview",
                        "name": "[format('SecurityInsights({0})', parameters('workspaceName'))]",
                        "location": "[parameters('location')]",
                        "properties": {
                          "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]"
                        },
                        "plan": {
                          "name": "[format('SecurityInsights({0})', parameters('workspaceName'))]",
                          "product": "OMSGallery/SecurityInsights",
                          "publisher": "Microsoft",
                          "promotionCode": ""
                        },
                        "dependsOn": [
                          "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]"
                        ]
                      }
                    ]
                }
            }
            }   
          ]
        }
      }
    }
  ]

因此,如果我将这些资源放在“Microsoft.Resources/deployments”类型中,则似乎在模板验证期间,dependsOn 不起作用。

正常吗?如果是这样,是否有我可以用来解决此问题的解决方法?或者将这三件事实现到 1 个 ARM 模板中的最佳方法是什么。

4

1 回答 1

0

依赖于部署的范围,嵌套创建一个单独的/不同的部署。

当您从一个部署中获取资源并将其嵌套到另一个部署中时,您需要将dependsOn 从依赖于资源更改为依赖于资源移动到的部署。

所以你在哪里:

"dependsOn": [
   "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace_name'))]"
]

将其更改为:

"dependsOn": [
   "[resourceId(parameters('rgName'), 'Microsoft.Resources/deployments', 'name-of-the-deployment-where-you-create-the-workspace')]"
]

请注意,确切的语法可能会因您组织事物的方式而略有不同,但主要是取决于嵌套部署,而不是资源。

如果这没有帮助 - 发布您的整个模板,我们可以提供更精确的指导。

于 2021-07-14T15:23:07.893 回答