ARM 模板的范围函数
资源管理器提供以下函数,这些函数用于获取 Azure 资源管理器模板(ARM 模板)中的部署范围值:
若要从参数、变量或当前部署获取值,请参阅 Deployment value functions(部署值函数)。
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"
}
}
后续步骤
- 有关 ARM 模板中各部分的说明,请参阅了解 ARM 模板的结构和语法。
- 若要合并多个模板,请参阅部署 Azure 资源时使用链接模板和嵌套模板。
- 若要在创建资源类型时迭代指定的次数,请参阅 ARM 模板中的资源迭代。
- 若要了解如何部署已创建的模板,请参阅使用 ARM 模板和 Azure PowerShell 部署资源。