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


Краткое руководство. Создание нескольких экземпляров ресурсов в Bicep

Узнайте, как использовать разные синтаксисы for для создания нескольких экземпляров ресурсов в Bicep. Хотя в этой статье показано только создание нескольких экземпляров ресурсов, для определения копий модуля, переменной, свойства или выходных данных можно использовать эти же методы. Дополнительные сведения см. в статье Циклы Bicep.

Эта статья включает следующие разделы:

Необходимые компоненты

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Сведения о настройке среды для разработки Bicep см. в разделе Установка средств Bicep. После этого у вас будет Visual Studio Code и расширение Bicep. У вас также есть последняя версия Azure CLI или модуля Azure PowerShell.

Создание одного экземпляра

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

  • Слишком длинное имя учетной записи хранения. Имя учетной записи хранения должно содержать от 3 до 24 символов и состоять только из цифр и строчных букв.
  • Имя учетной записи хранения не является уникальным. Имя учетной записи хранения должно быть уникальным в Azure.

В следующем файле Bicep определена одна учетная запись хранения:

param rgLocation string = resourceGroup().location

resource createStorage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

Сохраните файл Bicep локально, а затем разверните его с помощью Azure CLI или Azure PowerShell:

resourceGroupName = "{provide-a-resource-group-name}"
templateFile="{provide-the-path-to-the-bicep-file}"

az group create --name $resourceGroupName --location eastus

az deployment group create --resource-group $resourceGroupName --template-file $templateFile

Использование целочисленного индекса

Цикл for с индексом используется в следующем примере для создания двух учетных записей хранения:

param rgLocation string = resourceGroup().location
param storageCount int = 2

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for i in range(0, storageCount): {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

output names array = [for i in range(0,storageCount) : {
  name: createStorages[i].name
} ]

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

Используйте идентификатор индекса, начинающийся с нуля (0)

В range() первое число — это начальное число, а второе — число раз выполнения цикла. Таким образом, если изменить его на диапазон(3,2), вы также получите две учетные записи хранения:

Используйте идентификатор индекса, начинающийся с трех (3)

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

"outputs": {
  "names": {
    "type": "Array",
    "value": [
      {
        "name": "0storage52iyjssggmvue"
      },
      {
        "name": "1storage52iyjssggmvue"
      }
    ]
  }
},

Использование элементов массива

Вы можете выполнить цикл для массива. В следующем примере показан массив строк.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for name in storageNames: {
  name: '${name}str${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

Цикл использует все строки массива в качестве части имен учетных записей хранения. В этом случае создается две учетные записи хранения:

Используйте массив строк

Вы также можете выполнить цикл для массива объектов. Цикл задает не только имена учетных записей хранения, но и их SKU.

param rgLocation string = resourceGroup().location
param storages array = [
  {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
]

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for storage in storages: {
  name: '${storage.name}obj${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: storage.skuName
  }
  kind: 'StorageV2'
}]

Цикл создает две учетных записи хранения. SKU учетной записи хранения с именем, которое начинается на fabrikam, — Premium_LRS.

Используйте массив строк

Использование массива и индекса

В таких же случаях вы можете объединить цикл массива с циклом индекса. В следующем примере показано, как использовать массив и номер индекса для соглашения об именовании.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for (name, i) in storageNames: {
  name: '${i}${name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

После развертывания предыдущего примера создаются две учетные записи хранения, похожие на следующие:

Используйте массив строк и номер индекса

Использование объекта Dictionary

Для итерации по элементами в объекте Dictionary используйте функцию items, которая преобразует объект в массив. Получить свойства объектов можно с помощью свойства value.

param rgLocation string = resourceGroup().location

param storageConfig object = {
  storage1: {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  storage2: {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
}

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for config in items(storageConfig): {
  name: '${config.value.name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: config.value.skuName
  }
  kind: 'StorageV2'
}]

Цикл создает две учетных записи хранения. SKU учетной записи хранения с именем, которое начинается на fabrikam, — Premium_LRS.

Используйте объект словаря

Цикл с условием

Для ресурсов и модулей можно добавить выражение if с синтаксисом цикла для условного развертывания коллекции.

param rgLocation string = resourceGroup().location
param storageCount int = 2
param createNewStorage bool = true

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for i in range(0, storageCount): if(createNewStorage) {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

Дополнительные сведения см. в статье Условное развертывание в Bicep.

Очистка ресурсов

Если ресурсы Azure больше не нужны, используйте Azure CLI или модуль Azure PowerShell, чтобы удалить группу ресурсов, созданную для краткого руководства.

resourceGroupName = "{provide-the-resource-group-name}"

az group delete --name $resourceGroupName

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