====== 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" } }