Поделиться через


Развертывание ресурсов в ресурсных группах с помощью 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 словом, должны быть развернуты на том же уровне, что и развертывание. Для развертывания группы ресурсов это означает, что все resource объявления в файле Bicep должны быть развернуты в той же группе ресурсов или в качестве дочернего или расширенного ресурса ресурса в той же группе ресурсов, что и развертывание.

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

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

Вы можете развернуть ресурс из Bicep-файла, ориентированного на группу ресурсов, на следующих уровнях:

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

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

// resource deployed to target resource group
resource exampleResource 'Microsoft.Storage/storageAccounts@2023-04-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)
}

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

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

To deploy resources to a subscription, add a module. Use the [Свойство области подпискиfunction](bicep-functions-scope.md#subscription) to set its.

Чтобы развернуть в текущей подписке, используйте 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)
}

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

Чтобы создать ресурсы у арендатора, добавьте модуль. Используйте функцию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@2023-04-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@2023-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@2023-04-01' = {
  name: storageName
  location: storageLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

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

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

Следующие шаги

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