Files
tf_provider/docs/30_registry/guides/terraform-structure.md
T
2026-06-30 15:45:24 +04:00

3.0 KiB

Структура Terraform проекта

Почему важно разделять манифесты

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

Если ресурсы взаимозависимы (например, сеть -> ВМ), их стоит держать вместе, чтобы Terraform применял изменения в правильном порядке.

Важно: все .tf в папке объединяются

Terraform рассматривает все .tf в одной папке как единый конфигурационный файл. Это значит:

  • Все ресурсы и переменные в папке находятся в одном graph.
  • Ошибка одного ресурса может остановить apply для всех остальных.
  • При destroy Terraform будет удалять все ресурсы из этой папки.

Рекомендуемая структура

  • Один каталог = один независимый стек.
  • Для каждого стека отдельные main.tf, variables.tf, outputs.tf.
  • Для разных окружений использовать разные каталоги.

Пример:

project/
  stacks/
    vm-a/
      main.tf
      variables.tf
    vm-b/
      main.tf
      variables.tf
    edge/
      main.tf
      variables.tf

Импорт ресурсов

Импорт используется, когда ресурс уже существует, но Terraform его не создавал.

Общий подход:

  1. Создать ресурс в .tf с корректными аргументами.
  2. Выполнить terraform import.
  3. Сделать terraform plan и убедиться, что нет изменений.

Важно:

  • Импорт добавляет ресурс в state, но не создает его.
  • После импорта нужно обязательно сверить параметры в .tf.

Удаление ресурсов

Удаление зависит от того, где находится ресурс:

  • Если ресурс прописан в .tf, Terraform удалит его при destroy.
  • Если ресурс удален из .tf, Terraform удалит его при следующем apply.

Рекомендация: перед удалением делать plan, чтобы увидеть список ресурсов, которые будут удалены.

Что делать при ошибках

  • Разделяйте независимые ресурсы по разным папкам.
  • Проверяйте plan перед apply.
  • Для проблемного ресурса работайте в его отдельном стеке.