Pull to refresh

Comments 7

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

А зачем вызывать модуль несколько раз?

  • (в случае террагрант модуля) если только для dependency - то можно прописать, какой модуль от какого зависит и это запустит модуль только один раз (когда это нужно). Что хорошо в террагранте - можно запустить только один модуль, но дать аргумент для вызова всех dependency modules: terragrunt run-all plan --terragrunt-source-update --terragrunt-non-interactive --terragrunt-include-external-dependencies

  • (в случае терраформ модуля) можно прописать разные версии терраформ модуля в разных террагран модулях и кеш терраформ модулей будет создан для каждого террагрант модуля по отдельности

Да всё очень просто. Берём модуль для создания AWS RDS, их готовых не так и много. При вызове он создаст одну базу, например Postgres 13. Вызываем второй раз - создаёт другую базу, например Aurora. Или опять же Postgres, но версии 12. Соответственно у нас есть aws-rds.tf в котором вызываем модуль столько раз, сколько разных баз нужно создать. Но это не укладывается в концепцию Terragrunt. Они сразу говорят, что нужно вызвать модуль один раз, куда в качествет параметров нужно передать списк баз и настроек. Это значит, нужно переписать модуль. Так себез затея, переписать почти все модули, что уже используются.

Это так. Но тут есть за и против:

  • если нужно только одну базу данных и нет проблем inputs задать со стандартными именами переменных - то можно использовать open source терраформ модули

  • если нужно создать много и разных баз данных, то я обычно делаю следующее:

    • (в меньшинстве своем - потому что может возникнуть проблема с breaking changes updates of terraform module) или использую стандартную терраформ библиотеку

    • (чаще) или использую свой терраформ модуль. Это дает возможность скомпоновать input в виде array/ map с нужными данными (DRY / common values / мои собственные конвенции).

      • за: В случае множества динамичных ресурсов - это себя окупает по времени,

      • против: добавляет нужду все это поддерживать, а не использовать уже существующее. Хотя наш терраформ модуль может быть и оберткой на open source module

    • (лучше всего) отдельный террагрант модуль на каждую базу данных.

      • за:

        • бласт радиус,

        • свой tfstate на каждый такой модуль,

        • если надо что-то поменять в одном модуле - то надо запустить только его и не все остальное

        • можно заморозить версии террагрант модуля - для каждого свою версию (хорошо для отладки модуля)

      • против:

        • очень много hcl файлов?

Спасибо - очень хорошая статья.

Единственное - про backend: это уже не так, можно создавать терраформ модули без пустого блока backend

им бы еще какой туториал бы сделать по тому как юзать TG и по нарастающей сложности - а то сколько смотрел, но из за их документации котора не очень и очень простых примеров - не осилил:(

Sign up to leave a comment.