В этой статье приводятся сведения об использовании синтаксиса for для итерации по элементам в коллекции. Эта функция поддерживается, начиная с версии 0.3.1. С помощью циклов можно определить несколько копий ресурса, модуля, переменной, свойства или выходных данных. Циклы позволяют избежать повторения синтаксиса в файле Bicep и динамически настроить количество копий, создаваемых во время развертывания. Краткое руководство см. в статье Создание нескольких экземпляров.
Чтобы использовать циклы для создания нескольких ресурсов или модулей, каждый экземпляр должен иметь уникальное значение для свойства name. Для создания имен можно использовать значение индекса или уникальные значения в массивах или коллекциях.
Использование целочисленного индекса. Этот вариант работает в случае, если нужно создать определенное количество экземпляров. Функция range создает массив целых чисел, который начинается с начального индекса и содержит указанное количество элементов. В цикле целочисленный индекс можно использовать для изменения значений. Дополнительные сведения см. в разделе Целочисленный индекс.
Использование элементов в массиве. Этот вариант работает в случае, если нужно создать экземпляр для каждого элемента в массиве. В цикле значение текущего элемента массива можно использовать для изменения значений. Дополнительные сведения см. в разделе Элементы массива.
Bicep
[for <item> in <collection>: {
...
}]
Использование элементов в объекте Dictionary. Этот вариант работает в случае, если нужно создать экземпляр для каждого элемента в объекте. Функция items преобразует объект в массив. В цикле свойства объекта можно использовать для создания значений. Дополнительные сведения см. в разделе Объект Dictionary.
Bicep
[for <item> initems(<object>): {
...
}]
Использование целочисленного индекса и элементов в массиве. Этот вариант работает в случае, если нужно создать экземпляр для каждого элемента в массиве, но при этом требуется текущий индекс для создания еще одного значения. Дополнительные сведения см. в разделе Массив и индекс цикла.
Bicep
[for (<item>, <index>)in <collection>: {
...
}]
Добавление условного развертывания. Этот вариант работает в случае, если нужно создать несколько экземпляров, но для каждого из них требуется выполнять развертывание, только если условие истинно. Дополнительные сведения см. в разделе Цикл с условием.
Bicep
[for <item> in <collection>: if(<condition>) {
...
}]
Ограничения цикла
При использовании циклов в Bicep действуют следующие ограничения:
Циклы Bicep работают только со значениями, которые можно определить в начале развертывания.
Цикл не может содержать отрицательное число итераций или больше 800 итераций.
Нельзя использовать цикл для вложенного дочернего ресурса. Дочерние ресурсы следует изменить на ресурсы верхнего уровня. См. раздел Итерация дочерних ресурсов.
Чтобы выполнить цикл на нескольких уровнях свойств, используйте функцию лямбда-карты.
Целочисленный индекс
Для простого примера использования индекса создайте переменную, которая содержит массив строк.
Получаемыми выходными данными является массив со следующими значениями:
JSON
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
В следующем примере создается заданное в параметре storageCount число учетных записей хранения. Пример возвращает три свойства для каждой учетной записи хранения.
В следующем примере создается одна учетная запись хранения для каждого имени, указанного в параметре storageNames. Обратите внимание, что свойство name для каждого экземпляра ресурса должно быть уникальным.
Следующий пример выполняет итерацию по массиву для определения свойства. Он создает две подсети в виртуальной сети. Обратите внимание, что имена подсети должны быть уникальными.
Для итерации по элементами в объекте Dictionary используйте функцию items, которая преобразует объект в массив. Получить свойства объектов можно с помощью свойства value. Обратите внимание, что имена ресурсов nsg должны быть уникальными.
По умолчанию ресурсы Azure развертываются параллельно. При использовании цикла для создания нескольких экземпляров типа ресурса, развертывание всех этих экземпляров происходит одновременно. Порядок, в котором они создаются, не гарантируется. Количество ресурсов, развертываемых параллельно, не ограничено, за исключением общего ограничения в 800 ресурсов в файле Bicep.
Вам может не потребоваться одновременное обновление всех экземпляров типа ресурса. Например, при обновлении рабочей среды может потребоваться дифференцировать обновления, чтобы только определенное число элементов могло быть обновлено в любой момент времени. Вы можете указать, что подмножество экземпляров будет объединяться в пакеты и развертываться одновременно. Остальные экземпляры ожидают пока этот пакет будет готов.
Чтобы последовательно развернуть экземпляры ресурса, добавьте декоратор batchSize. Задайте его значение, равное количеству экземпляров для одновременного развертывания. Создается зависимость от предыдущих экземпляров в цикле, поэтому он не начинает выполнение следующего пакета до завершения предыдущего.
Для последовательного развертывания задайте в качестве размера пакета значение 1.
Декоратор batchSize находится в пространстве имен sys. Если вам важно не путать этот декоратор с другими элементами с таким же именем, добавьте к нему префикс sys: @sys.batchSize(2).
Итерация дочерних ресурсов
Чтобы создать несколько экземпляров дочернего ресурса, оба из следующих файлов Bicep будут работать.
Функция шаблона references ARM возвращает массив объектов, представляющих состояния среды выполнения коллекции ресурсов. В Bicep нет явной функции ссылок. Вместо этого использование символьной коллекции используется напрямую, а во время создания кода Bicep преобразует его в шаблон ARM, который использует функцию ссылок на шаблон ARM. Для функции перевода, которая преобразует символьные коллекции в шаблоны ARM с помощью функции ссылок, необходимо иметь Bicep CLI версии 0.20.X или более поздней. Кроме того, symbolicNameCodegen в bicepconfig.json файле параметр должен быть представлен и задан в trueзначение .
Выходные данные двух примеров в целочисленном индексе можно записать следующим образом:
Обратите внимание, что в предыдущем шаблоне languageVersion JSON ARM необходимо задать 1.10-experimentalзначение, а элемент ресурса — это объект вместо массива.
Следующие шаги
Дополнительные сведения о создании Bicep-файлов см . в файле.
Создайте расширенные шаблоны Bicep с помощью условий для условного развертывания ресурсов и использования циклов для развертывания нескольких экземпляров ресурсов.