3.0 KiB
3.0 KiB
Структура Terraform проекта
Почему важно разделять манифесты
Если ресурсы не зависят друг от друга, лучше разделять их по разным папкам или разным state. Тогда сбой одного ресурса не блокирует применение остальных.
Если ресурсы взаимозависимы (например, сеть -> ВМ), их стоит держать вместе, чтобы Terraform применял изменения в правильном порядке.
Важно: все .tf в папке объединяются
Terraform рассматривает все .tf в одной папке как единый конфигурационный файл. Это значит:
- Все ресурсы и переменные в папке находятся в одном graph.
- Ошибка одного ресурса может остановить
applyдля всех остальных. - При
destroyTerraform будет удалять все ресурсы из этой папки.
Рекомендуемая структура
- Один каталог = один независимый стек.
- Для каждого стека отдельные
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 его не создавал.
Общий подход:
- Создать ресурс в
.tfс корректными аргументами. - Выполнить
terraform import. - Сделать
terraform planи убедиться, что нет изменений.
Важно:
- Импорт добавляет ресурс в state, но не создает его.
- После импорта нужно обязательно сверить параметры в
.tf.
Удаление ресурсов
Удаление зависит от того, где находится ресурс:
- Если ресурс прописан в
.tf, Terraform удалит его приdestroy. - Если ресурс удален из
.tf, Terraform удалит его при следующемapply.
Рекомендация: перед удалением делать plan, чтобы увидеть список ресурсов, которые будут удалены.
Что делать при ошибках
- Разделяйте независимые ресурсы по разным папкам.
- Проверяйте
planпередapply. - Для проблемного ресурса работайте в его отдельном стеке.