Bicep 的范围函数

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

managementGroup

managementGroup()

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

managementGroup(identifier)

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

命名空间:az

注解

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

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

参数

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

返回值

用于在模块扩展资源类型上设置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": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
    },
    "type": "/providers/Microsoft.Management/managementGroups"
  }
}

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

targetScope = 'managementGroup'

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

resource newMG 'Microsoft.Management/managementGroups@2023-04-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) 只能用于设置范围。

参数

参数 必选 类型 DESCRIPTION
资源组名称 字符串 要部署到的资源组的名称。 如果未提供值,则返回当前资源组。
订阅编号 字符串 要部署到的订阅的唯一标识符。 如果未提供值,则返回当前订阅。

返回值

用于设置范围时,该函数返回对 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

注解

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

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

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

参数

参数 必选 类型 DESCRIPTION
订阅编号 字符串 要部署到的订阅的唯一标识符。 如果未提供值,则返回当前订阅。

返回值

用于设置范围时,该函数返回对 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()

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

返回用户的租户。

命名空间: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": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
  }
}

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

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

后续步骤

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