Модуль на приложение или модуль на вычислительную систему, сеть или хранилище? — Инфраструктура как код

#design-patterns #module #terraform #cloud #infrastructure-as-code

Вопрос:

Этот вопрос не ограничивается каким-либо инструментом, это общий вопрос.

Предположим, что у нас есть следующие компоненты в простом проекте. Типичное трехуровневое приложение.

  • 3 Изображения докера API
  • 1 Компонент пользовательского интерфейса
  • 1 База данных

Я разработал свои модули Терраформирования, пропорциональные этому. Это означает, что 3 модуля терраформирования 1 модуль для создания кластера. API, пользовательский интерфейс, база данных. Например,

  • cluster.tf — Создает кластер
  • api1.tf — Создает приложение и другие необходимые ресурсы для приложения
  • api2.tf
  • api3.tf
  • ui.tf — Создает CDN, ресурсы для обслуживания статических файлов
  • database.tf — Создает управляемые экземпляры базы данных

Если мы добавим еще одно приложение API, я буду api4.tf. Легче масштабировать.

Является ли это рекомендуемым шаблоном?

Другой способ сделать это -,

  • compute.tf — Создает кластер и все 3 приложения
  • network.tf — Создает подсети и т. Д
  • storage.tf — Создает том хранилища, экземпляр базы данных
  • authentication.tf

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

Есть какие-нибудь предложения?