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