Рекомендуется ли использовать GitLab или GitHub для хранения Terraform state file?

«Рекомендуется ли использовать GitLab или GitHub для хранения Terraform state file?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Категорически не рекомендуется. Хранение terraform.tfstate в обычном Git-репозитории (GitLab/GitHub) — это антипаттерн по нескольким критическим причинам:

  1. Безопасность: State-файл может содержать в открытом виде чувствительные данные: пароли БД, приватные ключи, plaintext-секреты. Попадание этого файла в Git — серьезная утечка.
  2. Конфликты: При работе в команде несколько инженеров могут одновременно изменить инфраструктуру. Без механизма блокировок это приведет к порче state-файла и рассинхронизации с реальной инфраструктурой.
  3. Надежность: 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.