Bicep 的范围函数

本文介绍用于获取范围值的 Bicep 函数。

managementGroup

managementGroup()

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

managementGroup(identifier)

返回一个用于将范围设置为管理组的对象。

命名空间:az

备注

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

managementGroup(identifier) 可用于任何部署范围,但仅在获取范围对象时使用。 若要检索管理组的属性,不能传递管理组标识符。

参数

参数 必选 Type 说明
标识符 字符串 要部署到的管理组的唯一标识符。 请不要使用管理组的显示名称。 如果未提供值,则返回当前管理组。

返回值

一个用于在模块扩展资源类型上设置 scope 属性的对象。 或者,包含当前管理组的属性的对象。

管理组示例

以下示例将模块的范围设置为管理组。

param managementGroupIdentifier string

module  'mgModule.bicep' = {
  name: 'deployToMG'
  scope: managementGroup(managementGroupIdentifier)
}

下一个示例将返回当前管理组的属性。

targetScope = 'managementGroup'

var mgInfo = managementGroup()

output mgResult object = 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": "00000000-0000-0000-0000-000000000000"
    },
    "type": "/providers/Microsoft.Management/managementGroups"
  }
}

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

targetScope = 'managementGroup'

param mgName string = 'mg-${uniqueString(newGuid())}'

resource newMG 'Microsoft.Management/managementGroups@2020-05-01' = {
  scope: tenant()
  name: mgName
  properties: {
    details: {
      parent: {
        id: managementGroup().id
      }
    }
  }
}

output newManagementGroup string = mgName

resourceGroup

resourceGroup()

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

resourceGroup(resourceGroupName)

resourceGroup(subscriptionId, resourceGroupName)

返回一个用于将范围设置为资源组的对象。

命名空间:az

备注

resourceGroup 函数具有两种不同的用法。 一种用法是在模块扩展资源类型上设置范围。 另一种用法是获取有关当前资源组的详细信息。 该函数的调用方式确定了其用法。 用于设置 scope 属性时,它将返回范围对象。

resourceGroup() 可用于设置范围,或获取有关资源组的详细信息。

resourceGroup(resourceGroupName)resourceGroup(subscriptionId, resourceGroupName) 只可用于设置范围。

parameters

参数 必选 Type 说明
resourceGroupName 字符串 要部署到的资源组的名称。 如果未提供值,则返回当前资源组。
subscriptionId 字符串 要部署到的订阅的唯一标识符。 如果未提供值,则返回当前订阅。

返回值

用于设置范围时,该函数将返回一个对于模块或扩展资源类型的 scope 属性有效的对象。

用于获取有关资源组的详细信息时,该函数将返回以下格式:

{
  "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。

资源组示例

以下示例将模块的范围设置为资源组。

param resourceGroupName string

module exampleModule 'rgModule.bicep' = {
  name: 'exampleModule'
  scope: resourceGroup(resourceGroupName)
}

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

output resourceGroupOutput object = resourceGroup()

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

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

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

param location string = resourceGroup().location

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

订阅

subscription()

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

subscription(subscriptionId)

返回一个用于将范围设置为订阅的对象。

命名空间:az

备注

subscription 函数具有两种不同的用法。 一种用法是在模块扩展资源类型上设置范围。 另一种用法是获取有关当前订阅的详细信息。 该函数的调用方式确定了其用法。 用于设置 scope 属性时,它将返回范围对象。

subscription(subscriptionId) 只可用于设置范围。

subscription() 可用于设置范围,或获取有关订阅的详细信息。

parameters

参数 必选 Type 说明
subscriptionId 字符串 要部署到的订阅的唯一标识符。 如果未提供值,则返回当前订阅。

返回值

用于设置范围时,该函数将返回一个对于模块或扩展资源类型的 scope 属性有效的对象。

用于获取有关订阅的详细信息时,该函数将返回以下格式:

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

订阅示例

以下示例将模块的范围设置为订阅。

module exampleModule 'subModule.bicep' = {
  name: 'deployToSub'
  scope: subscription()
}

下一个示例返回订阅的详细信息。

output subscriptionOutput object = subscription()

tenant

tenant()

返回一个用于将范围设置为租户的对象。

返回用户的租户。

命名空间:az

备注

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

返回值

一个用于在模块扩展资源类型上设置 scope 属性的对象。 或者,具有有关当前租户的属性的对象。

租户示例

以下示例演示一个已部署到租户的模块。

module exampleModule 'tenantModule.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

下一个示例将返回租户的属性。

var tenantInfo = tenant()

output tenantResult object = tenantInfo

将返回:

"tenantResult": {
  "type": "Object",
  "value": {
    "countryCode": "US",
    "displayName": "Contoso",
    "id": "/tenants/00000000-0000-0000-0000-000000000000",
    "tenantId": "00000000-0000-0000-0000-000000000000"
  }
}

某些资源需要设置属性的租户 ID。 可以使用租户函数检索租户 ID,而不必将租户 ID 作为参数传递。

resource kv 'Microsoft.KeyVault/vaults@2021-06-01-preview' = {
  name: 'examplekeyvault'
  location: 'chinanorth'
  properties: {
    tenantId: tenant().tenantId
    ...
  }
}

后续步骤

若要详细了解部署范围,请参阅: