资源 [parameters('mgName')] Location 必须是表达式或 'global'

Resource [parameters('mgName')] Location must be an expression or 'global'

我正在试验 Azure 管理组 Arm 模板。

正如你在这个 link 中看到的,我有这个 Arm 模板:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string",
      "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Management/managementGroups",
      "apiVersion": "2021-04-01",
      "name": "[parameters('mgName')]",
      "scope": "/",
      "location": "eastus",
      "properties": {}
    }
  ],
  "outputs": {
    "output": {
      "type": "string",
      "value": "[parameters('mgName')]"
    }
  }
}

另存为mg.json,效果很好。

稍后我开始尝试使用 Test-AzTemplate (https://github.com/Azure/arm-ttk) 验证和测试 Arm 模板。当我 运行 以下命令测试 Arm 模板时:

Test-AzTemplate -TemplatePath .\mg.json

我得到这个测试错误:

[-] Resources Should Have Location (3 ms)
    Resource [parameters('mgName')] Location must be an expression or 'global'

现在当我移除"location": "eastus",行表单Arm模板时,测试没有失败并通过了测试。

我的问题:

Management Group Arm 中的这个位置是否需要?以及为什么当它是 Microsoft 文档的一部分时它会失败!有什么想法吗?

管理组中不需要

位置。正如您可以查看此 Azure Create Management Group REST API documentation,此处不需要位置。

这就是为什么在模板中您可以删除位置或提供 'global' 作为值,正如测试命令输出指定的那样。