Создание и использование модулей Bicep

Завершено

Модули представляют собой независимые файлы Bicep. Обычно они содержат наборы ресурсов, которые развертываются одновременно. Модули можно использовать из любого другого шаблона Bicep.

Используя модули, вы можете повторно использовать код Bicep, и вы можете сделать файлы Bicep более читаемыми и понятными, так как они ориентированы на определенное задание. Затем основные шаблоны соединяют несколько модулей.

Преимущества модулей

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

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

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

Возможность повторного использования

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

Diagram that shows a template referencing three modules: application, database, and networking. The networking module is then reused in another template.

Вы даже можете совместно использовать модули в масштабах отдела, организации или сообщества Azure. Дополнительные сведения о совместном использовании модулей Bicep см. в следующем модуле Microsoft Learn.

Инкапсуляция

Модули помогают объединять связанные определения ресурсов. Например, при определении приложения «Функции Azure» обычно развертывается приложение, план размещения для приложения и учетная запись хранения для метаданных приложения. Эти три компонента определяются по отдельности, но они представляют логическую группу ресурсов. Поэтому, возможно, лучше определить их как модуль.

После этого вашему основному шаблону не потребуются сведения о том, как развертывается приложение-функция. Это обязанность модуля.

Сочетаемость

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

Diagram that shows a template referencing two modules and passing the output from one to the parameter of another.

Совет

Модули Bicep можно рассматривать как стоительные блоки, которые можно комбинировать разными способами в соответствии с требованиями развертывания.

Функция

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

Создание модуля

Модуль — это стандартный файл Bicep. Он создается так же, как и любой другой файл Bicep.

Как правило, не рекомендуется создавать модуль для каждого развертываемого ресурса. Качественный модуль Bicep обычно определяет несколько связанных ресурсов. Однако если у вас есть сложный ресурс с большим количеством конфигураций, может потребоваться создать один модуль, чтобы инкапсулировать сложность. Такой подход позволяет упростить основные шаблоны и избежать их перегруженности.

Разделение существующего шаблона Bicep на модули

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

Визуализатор Bicep позволяет разместить весь файл Bicep в перспективе. Визуализатор включен в расширение Bicep для Visual Studio Code.

Чтобы просмотреть визуализатор, откройте Visual Studio Code Обозреватель, выберите и удерживайте (или щелкните правой кнопкой мыши) файл Bicep, а затем выберите "Открыть визуализатор Bicep". Визуализатор отображает графическое представление ресурсов в файле Bicep. Он включает строки между ресурсами для отображения зависимостей, обнаруженных Bicep.

С помощью визуализатора можно разделять файлы. Рассмотрим, показывает ли визуализация какие-либо кластеры ресурсов. Возможно, имеет смысл переместить все эти кластеры в модуль одновременно.

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

Вложенные модули

Модули могут включать другие модули. С помощью этой методики вложения можно создать несколько модулей, которые развертывают небольшие наборы ресурсов, а затем объединить их в крупные модули, определяющие сложные топологии ресурсов. Шаблон объединяет эти элементы в развертываемый артефакт.

Совет

Хотя можно вкладывать несколько слоев модулей, это может быть довольно сложной задачей. Если вы получаете сообщение об ошибке или что-то еще пошло не так, то становится сложно решить, что именно нужно исправить, если у вас много уровней вложенности.

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

Выберите подходящие имена файлов

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

Использование модуля в шаблоне Bicep

Чтобы использовать модуль в шаблоне Bicep, можно использовать ключевое слово module, например:

module appModule 'modules/app.bicep' = {
  name: 'myApp'
  params: {
    location: location
    appServiceAppName: appServiceAppName
    environmentType: environmentType
  }
}

Определение модуля включает в себя следующие компоненты:

  • ключевое слово module;
  • Символическое имя, например appModule. Это имя используется в этом файле Bicep всякий раз, когда вы ссылаетесь на модуль. Символическое имя никогда не отображается в Azure.
  • Путь модуля, например modules/app.bicep. Обычно это путь к файлу Bicep в локальной файловой системе. В следующем модуле Microsoft Learn вы узнаете о том, как можно совместно использовать модули с помощью реестров и спецификаций шаблонов, использующих собственные форматы путей к модулям.

    Совет

    Можно также использовать шаблон JSON Azure Resource Manager (шаблон ARM) в качестве модуля. Такая возможность особенно полезна, если имеется набор шаблонов, которые еще не перенесены в Bicep.

  • Свойство name, которое указывает имя слота развертывания. Дополнительные сведения о развертываниях см. в следующем разделе.
  • Свойство params, в котором можно указать значения для параметров, которых ожидает модуль. Дополнительные сведения о параметрах модуля см. в следующем модуле.

Как работают модули

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

Развертывания

В Azure развертывание — это специальный ресурс, представляющий операцию развертывания. Развертывания — это ресурсы Azure, имеющие тип ресурса Microsoft.Resources/deployments. При отправке развертывания Bicep создается или обновляется ресурс развертывания. Аналогичным образом при создании ресурсов на портале Azure создается ресурс развертывания от вашего имени.

Однако не все изменения в ресурсах Azure создают или используют развертывания. Например, если для изменения существующего ресурса используется портал Azure, обычно он не создает развертывание для внесения такого изменения. Если для развертывания или настройки ресурсов используются сторонние инструменты, такие как Terraform, они могут не создавать развертывания.

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

При использовании модулей Bicep создает отдельное развертывание для каждого модуля. Свойство name, указанное для модуля, преобразуется в имя развертывания. При развертывании файла Bicep, который содержит модуль, создается несколько ресурсов развертывания: один для родительского шаблона и по одному для каждого модуля.

Например, предположим, что вы создаете файл Bicep с именем main.bicep. Он определяет модуль с именем myApp. При развертывании файла main.bicep создается два развертывания. Первое называется main, и оно создает другое развертывание с именем myApp, которое содержит ресурсы приложения.

Diagram that shows two Bicep files, each of which has a separate deployment name.

Можно получить список и просмотреть сведения о ресурсах развертывания, чтобы отслеживать состояние развертываний Bicep или просматривать историю развертываний. Однако при повторном использовании одного и того же имени для развертывания Azure перезаписывает последнее развертывание с тем же именем. Если вы хотите вести журнал развертывания, убедитесь, что для каждого развертывания используется уникальное имя. Вы можете включить в имя дату и время развертывания, чтобы сделать его уникальным.

Созданные шаблоны ARM JSON

При развертывании Bicep-файла Bicep преобразует его в шаблон JSON ARM. Такое преобразование также известно как транспилирование. Модули, используемые шаблоном, встраиваемые в JSON-файл. Независимо от того, сколько модулей включено в шаблон, будет создан только один файл JSON.

В примере, описанном в предыдущем разделе, Bicep создает отдельный JSON-файл, даже если изначально существовало два файла Bicep.

Diagram that shows two Bicep files, which are transpiled into a single JSON file.