Spec-Zone.ru › OpenTofu 1.9

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

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

Файлы .tf и/или .tofu в рабочем каталоге при запуске tofu plan или tofu apply вместе образуют корневой модуль. Этот модуль может вызывать другие модули и связывать их, передавая выходные значения одного модуля на вход другого.

Чтобы узнать, как использовать модули, см. раздел конфигурации «Модули». В этом разделе рассказывается о том, как создавать повторно используемые модули, которые можно подключать в других конфигурациях с помощью блоков module.

Структура модуля​

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

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

Чтобы определить модуль, создайте для него новый каталог и поместите в него один или несколько файлов .tf, как и для корневого модуля. OpenTofu может загружать модули как из локальных относительных путей, так и из удалённых репозиториев; если модуль будет повторно использоваться во множестве конфигураций, его можно разместить в отдельном репозитории системы контроля версий.

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

Когда создавать модуль​

В принципе, в модуль можно вынести любое сочетание ресурсов и других конструкций, однако чрезмерное использование модулей может затруднить понимание и поддержку конфигурации OpenTofu в целом, поэтому мы рекомендуем соблюдать умеренность.

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

Например, aws_instance и aws_elb — это типы ресурсов провайдера AWS. С помощью модуля можно представить более высокоуровневую концепцию: кластер HashiCorp Consul, работающий в AWS, который, помимо прочего, создаётся из этих ресурсов и других ресурсов провайдера AWS.

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

Рефакторинг ресурсов модуля​

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

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.9/language/modules/develop/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API