Terraform: файл состояния tfstate

Файл terraform.tfstate содержит текущее состояние инфраструктуры. Если его неправильно хранить, возможны конфликты и повреждение данных.

Локально (terraform.tfstate в репозитории)

  • Потеря данных, если разработчик сменит машину.
  • Конфликты, если несколько человек применяют terraform apply.
  • Невозможно откатиться к старому состоянию.
  • Не поддерживает блокировки (terraform lock).
  • Возможны проблемы с одновременным доступом.

🟠 S3 + DynamoDB (AWS) → Самый популярный способ

S3 хранит tfstate, а DynamoDB предотвращает конфликты.

terraform {
  backend "s3" {
    bucket         = "my-terraform-state"
    key            = "prod/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}

🟠 Terraform Cloud/Enterprise → Официальное SaaS-решение

Terraform Cloud хранит tfstate в облаке HashiCorp.

terraform {
  backend "remote" {
    hostname     = "app.terraform.io"
    organization = "my-org"
    workspaces {
      name = "my-workspace"
    }
  }
}

🟠 Google Cloud Storage (GCS) + Firestore (GCP)

Для GCP аналог AWS S3 — это Google Cloud Storage (GCS), а DynamoDB заменяется Firestore.

terraform {
  backend "gcs" {
    bucket  = "my-tfstate-bucket"
    prefix  = "terraform/state"
  }
}

🟠 Azure Storage + Azure CosmosDB (Azure)

Для Azure можно использовать Azure Storage и блокировки через Azure CosmosDB.

terraform {
  backend "azurerm" {
    resource_group_name  = "my-rg"
    storage_account_name = "myterraformstate"
    container_name       = "tfstate"
    key                  = "prod.terraform.tfstate"
  }
}