Модули Терраформ — это способ инкапсулировать повторно используемую бизнес-логику, чтобы СУХОЙ. Например, вы можете использовать модуль для определения Дженкинс setup, а затем вызывайте этот модуль каждый раз, когда вам нужен сервер Jenkins. Другими словами, вы можете создавать экземпляры модулей столько раз, сколько вам нужно для достижения одного и того же результата.
С другой стороны, рабочие пространства Terraform — это способ изолировать состояние terraform между средами. Например, вы не хотите смешивать состояние производственной и промежуточной сред.
На практике мы высоко рекомендую писать модули для все. Вот почему у нас закончилось 100+ модулей. Написание модулей похоже на написание «функций» на других языках. Как правило, считается плохой практикой помещать всю логику в одну функцию или область действия; модули помогают нам избежать этого.
Рабочие пространства в принципе хороши, но на практике мы рекомендуем делиться ничего между производственной и промежуточной средами, включая состояние терраформирования. Рабочие пространства нарушают этот принцип. Таким образом, мы проектируем вещи так, чтобы состояние производства оставалось на производственном счете, а промежуточное состояние — на промежуточном счете. Мы достигаем этого с помощью нашего terraform-aws-tfstate-backend
модуль.
———
Для справки, «мы» относится к Cloud Posse, компании, предоставляющей профессиональные услуги DevOps. Я основатель. Выраженные мнения являются нашими собственными и могут не отражать взгляды сообщества в целом. :)