ARM 模板的范围函数

资源管理器提供以下函数,这些函数用于获取 Azure 资源管理器模板(ARM 模板)中的部署范围值:

若要从参数、变量或当前部署获取值,请参阅 Deployment value functions(部署值函数)。

提示

我们建议使用 Bicep,因为它提供与 ARM 模板相同的功能,并且该语法更易于使用。 有关详细信息,请参阅范围函数。

managementGroup

managementGroup()

返回一个对象,该对象具有当前部署中管理组的属性。

在 Bicep 中使用 managementGroup 范围函数。

备注

managementGroup() 只能对管理组部署使用。 它返回部署操作的当前管理组。 用于获取当前管理组的属性。

返回值

一个包含当前管理组的属性的对象。

管理组示例

以下示例返回当前管理组的属性。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "mgInfo": "[managementGroup()]"
  },
  "resources": [],
  "outputs": {
    "mgResult": {
      "type": "object",
      "value": "[variables('mgInfo')]"
    }
  }
}

将返回:

"mgResult": {
  "type": "Object",
  "value": {
    "id": "/providers/Microsoft.Management/managementGroups/examplemg1",
    "name": "examplemg1",
    "properties": {
      "details": {
        "parent": {
          "displayName": "Tenant Root Group",
          "id": "/providers/Microsoft.Management/managementGroups/00000000-0000-0000-0000-000000000000",
          "name": "00000000-0000-0000-0000-000000000000"
        },
        "updatedBy": "00000000-0000-0000-0000-000000000000",
        "updatedTime": "2020-07-23T21:05:52.661306Z",
        "version": "1"
      },
      "displayName": "Example MG 1",
      "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
    },
    "type": "/providers/Microsoft.Management/managementGroups"
  }
}

下一个示例将创建新的管理组,并使用此函数设置父管理组。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string",
      "defaultValue": "[format('mg-{0}', uniqueString(newGuid()))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Management/managementGroups",
      "apiVersion": "2020-05-01",
      "scope": "/",
      "name": "[parameters('mgName')]",
      "properties": {
        "details": {
          "parent": {
            "id": "[managementGroup().id]"
          }
        }
      }
    }
  ],
  "outputs": {
    "newManagementGroup": {
      "type": "string",
      "value": "[parameters('mgName')]"
    }
  }
}

resourceGroup

resourceGroup()

返回表示当前资源组的对象。

在 Bicep 中使用 resourceGroup 范围函数。

返回值

返回的对象采用以下格式:

{
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
  "name": "{resourceGroupName}",
  "type":"Microsoft.Resources/resourceGroups",
  "location": "{resourceGroupLocation}",
  "managedBy": "{identifier-of-managing-resource}",
  "tags": {
  },
  "properties": {
    "provisioningState": "{status}"
  }
}

仅对包含由其他服务托管的资源的资源组返回 managedBy 属性。 对于托管应用程序、Databricks 和 AKS,该属性的值为管理资源的资源 ID。

备注

resourceGroup() 函数不能用于在订阅级别部署的模板中。 它只能用于部署到资源组的模板中。 可以在以资源组为目标的链接模板或嵌套模板(具有内部范围)中使用 resourceGroup() 函数,即使父模板部署到订阅,也是如此。 在这种情况下,链接模板或嵌套模板将在资源组级别进行部署。 若要详细了解如何在订阅级别部署中将资源组作为目标,请参阅将 Azure 资源部署到多个订阅或资源组

resourceGroup 函数的一个常见用途是在与资源组相同的位置中创建资源。 以下示例使用资源组位置作为默认参数值。

"parameters": {
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
}

还可以使用 resourceGroup 函数将资源组中的标记应用于资源。 有关详细信息,请参阅应用资源组中的标记

使用嵌套模板部署到多个资源组时,可以指定用于评估 resourceGroup 函数的作用域。 有关详细信息,将 Azure 资源部署到多个订阅或资源组

资源组示例

以下示例返回资源组的属性。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "resourceGroupOutput": {
      "type": "object",
      "value": "[resourceGroup()]"
    }
  }
}

上述示例返回采用以下格式的对象:

{
  "id": "/subscriptions/{subscription-id}/resourceGroups/examplegroup",
  "name": "examplegroup",
  "type":"Microsoft.Resources/resourceGroups",
  "location": "chinaeast",
  "properties": {
    "provisioningState": "Succeeded"
  }
}

订阅

subscription()

返回有关当前部署的订阅的详细信息。

在 Bicep 中,使用 subscription 范围函数。

返回值

该函数返回以下格式:

{
  "id": "/subscriptions/{subscription-id}",
  "subscriptionId": "{subscription-id}",
  "tenantId": "{tenant-id}",
  "displayName": "{name-of-subscription}"
}

备注

使用嵌套模板部署到多个订阅时,可以指定评估 subscription 函数的范围。 有关详细信息,将 Azure 资源部署到多个订阅或资源组

订阅示例

以下示例显示了在 outputs 节中调用的 subscription 函数。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "subscriptionOutput": {
      "type": "object",
      "value": "[subscription()]"
    }
  }
}

tenant

tenant()

返回用户的租户。

在 Bicep 中使用 tenant 范围函数。

备注

tenant() 可与任何部署范围配合使用。 它始终返回当前租户。 使用此函数获取当前租户的属性。

设置链接模板或扩展资源的范围时,请使用以下语法:"scope": "/"

返回值

一个具有有关当前租户的属性的对象。

租户示例

以下示例返回租户的属性。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "tenantInfo": "[tenant()]"
  },
  "resources": [],
  "outputs": {
    "tenantResult": {
      "type": "object",
      "value": "[variables('tenantInfo')]"
    }
  }
}

将返回:

"tenantResult": {
  "type": "Object",
  "value": {
    "countryCode": "CN",
    "displayName": "Contoso",
    "id": "/tenants/00000000-0000-0000-0000-000000000000",
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
  }
}

后续步骤