Развертывание группы ресурсов с помощью файлов Bicep

В этой статье показано, как задать область с помощью Bicep при развертывании в группе ресурсов.

Поддерживаемые ресурсы

Большинство ресурсов можно развернуть в группе ресурсов. Список доступных ресурсов находится в справочнике по шаблонам ARM.

Область — набор

По умолчанию файл Bicep ограничивается группой ресурсов. Если вы хотите задать область явным образом, используйте следующую команду:

targetScope = 'resourceGroup'

Но установка целевой области в группе ресурсов не требуется, так как эта область используется по умолчанию.

Команды развертывания

Для развертывания в группе ресурсов используются команды развертывания группы ресурсов.

Для Azure CLI используется команда az deployment group create. В следующем примере выполняется развертывание шаблона для создания группы ресурсов. Группа ресурсов, указанная в параметре --resource-group, является целевой группой ресурсов.

az deployment group create \
  --name demoRGDeployment \
  --resource-group ExampleGroup \
  --template-file main.bicep \
  --parameters storageAccountType=Standard_GRS

Более подробные сведения о командах и параметрах развертывания для развертывания шаблонов ARM приведены в следующих статьях:

Области развертывания

При развертывании в группе ресурсов можно развернуть ресурсы:

  • целевая группа ресурсов для развертывания;
  • другие группы ресурсов в той же подписке или других подписках;
  • любую подписку в клиенте;
  • клиенте для группы ресурсов.

Ресурс расширения можно ограничить целевым объектом, который отличается от целевого объекта развертывания.

Пользователь, развертывающий шаблон, должен иметь доступ к указанной области.

В этом разделе показано, как указать различные области. Такие различные области можно объединить в один шаблон.

Область для целевой группы ресурсов

Чтобы развернуть ресурсы в целевой группе ресурсов, их нужно добавить в файл Bicep.

// resource deployed to target resource group
resource exampleResource 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  ...
}

Пример шаблона находится в разделе Развертывание в целевую группу ресурсов.

Использование другой группы ресурсов

Чтобы развернуть ресурсы в группе ресурсов, которая не является целевой, добавьте модуль. Используйте функцию resourceGroup, чтобы задать свойство scope для этого модуля.

Если группа ресурсов находится в другой подписке, укажите идентификатор подписки и имя группы ресурсов. Если группа ресурсов находится в той же подписке, что и текущее развертывание, укажите только имя группы ресурсов. Если вы не укажете подписку в функции resourceGroup, будет использоваться текущая подписка.

В примере ниже показан модуль, предназначенный для группы ресурсов в другой подписке.

param otherResourceGroup string
param otherSubscriptionID string

// module deployed to different subscription and resource group
module exampleModule 'module.bicep' = {
  name: 'otherSubAndRG'
  scope: resourceGroup(otherSubscriptionID, otherResourceGroup)
}

В примере ниже показан модуль, предназначенный для группы ресурсов в той же подписке.

param otherResourceGroup string

// module deployed to resource group in the same subscription
module exampleModule 'module.bicep' = {
  name: 'otherRG'
  scope: resourceGroup(otherResourceGroup)
}

Пример шаблона находится в разделе Развертывание в несколько групп ресурсов.

Область действия для подписки

Чтобы развернуть ресурсы в подписке, добавьте модуль. Используйте функцию subscription, чтобы задать его свойство scope.

Для развертывания в текущей подписке используйте функцию subscription без параметра.


// module deployed at subscription level
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription()
}

Чтобы выполнить развертывание в другой подписке, укажите идентификатор подписки в качестве параметра в функции subscription.

param otherSubscriptionID string

// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(otherSubscriptionID)
}

Пример шаблона см. в статье Создание группы ресурсов с помощью Bicep.

Область для клиента

Чтобы создать ресурсы в клиенте, добавьте модуль. Используйте функцию tenant, чтобы задать его свойство scope.

Пользователь, развертывающий шаблон, должен иметь необходимый доступ для развертывания в клиенте.

Следующий пример включает модуль, развернутый в клиенте.

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

Вместо использования модуля можно задать область tenant() для некоторых типов ресурсов. В следующем примере выполняется развертывание группы управления в клиенте.

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

// ManagementGroup deployed at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2020-05-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

Дополнительные сведения находятся в Обзоре группы управления.

Развертывание в целевую группу ресурсов

Чтобы развернуть ресурсы в целевую группу ресурсов, определите эти ресурсы в разделе шаблона resources. Следующий шаблон создает учетную запись хранения в группе ресурсов, указанной в операции развертывания.

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Развертывание в нескольких группах ресурсов

Можно выполнить развертывание в несколько групп ресурсов с использованием одного файла Bicep.

Примечание

В рамках одного развертывания можно выполнять развертывание в 800 группах ресурсов. Как правило, это ограничение означает, что для развертывания используется одна группа ресурсов из родительского шаблона и не более 799 групп ресурсов из вложенных или связанных развертываний. Но если родительский шаблон содержит только вложенные или связанные шаблоны и сам не развертывает ресурсы, то вложенные или связанные развертывания могут включать до 800 групп ресурсов.

Следующий пример создает две учетные записи хранения. Первая учетная запись хранения развертывается в той группе ресурсов, которая указана в операции развертывания. Вторая учетная запись хранения развертывается в группе ресурсов, которая указана в параметрах secondResourceGroup и secondSubscriptionID:

@maxLength(11)
param storagePrefix string

param firstStorageLocation string = resourceGroup().location

param secondResourceGroup string
param secondSubscriptionID string = ''
param secondStorageLocation string

var firstStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
var secondStorageName = '${storagePrefix}${uniqueString(secondSubscriptionID, secondResourceGroup)}'

module firstStorageAcct 'storage.bicep' = {
  name: 'storageModule1'
  params: {
    storageLocation: firstStorageLocation
    storageName: firstStorageName
  }
}

module secondStorageAcct 'storage.bicep' = {
  name: 'storageModule2'
  scope: resourceGroup(secondSubscriptionID, secondResourceGroup)
  params: {
    storageLocation: secondStorageLocation
    storageName: secondStorageName
  }
}

Оба модуля используют один и тот же файл Bicep с именем storage.bicep.

param storageLocation string
param storageName string

resource storageAcct 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  name: storageName
  location: storageLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

Создать группу ресурсов

Сведения о создании групп ресурсов см. в статье Создание группы ресурсов с помощью Bicep.

Дальнейшие действия

Сведения о других областях приведены в следующих статьях: