Terraform: файл состояния tfstate
Где хранить tfstate, если много разработчиков?
Файл terraform.tfstate
содержит текущее состояние инфраструктуры. Если его неправильно хранить, возможны конфликты и повреждение данных.
🚩 Плохие решения
Локально (terraform.tfstate
в репозитории)
- Потеря данных, если разработчик сменит машину.
- Конфликты, если несколько человек применяют
terraform apply
. - Невозможно откатиться к старому состоянию.
- Не поддерживает блокировки (
terraform lock
). - Возможны проблемы с одновременным доступом.
🚩 Лучшие решения для хранения `tfstate`
🟠 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" } }