Ответ
Категорически не рекомендуется. Хранение terraform.tfstate в обычном Git-репозитории (GitLab/GitHub) — это антипаттерн по нескольким критическим причинам:
- Безопасность: State-файл может содержать в открытом виде чувствительные данные: пароли БД, приватные ключи, plaintext-секреты. Попадание этого файла в Git — серьезная утечка.
- Конфликты: При работе в команде несколько инженеров могут одновременно изменить инфраструктуру. Без механизма блокировок это приведет к порче state-файла и рассинхронизации с реальной инфраструктурой.
- Надежность: Git не предназначен для хранения часто изменяемых бинарных файлов большого размера.
Правильные решения (в порядке предпочтения):
1. Использовать удаленный бэкенд с блокировками:
- Terraform Cloud/Enterprise: Нативное решение, предоставляет UI, управление доступом, Sentinel для политик.
- AWS S3 + DynamoDB (стандарт для AWS): S3 хранит state, DynamoDB обеспечивает пессимистичные блокировки.
Пример конфигурации бэкенда для AWS:
# backend.tf
terraform {
backend "s3" {
bucket = "my-company-terraform-state-prod"
key = "network/terraform.tfstate" # Путь к state
region = "eu-west-1"
encrypt = true # Обязательно шифрование
dynamodb_table = "terraform-state-locks" # Таблица для блокировок
}
}
2. Для очень простых, личных проектов можно рассмотреть бэкенд http с самописным сервером, но S3 — надежнее.
Итог: Всегда настраивайте удаленный state с блокировками. Это основа безопасной и командной работы с Terraform.