🏗️ Terraform State
State file, Backend, Remote State, State commands
📄 Что такое Terraform State?
`terraform.tfstate` — реальное состояние инфраструктуры. Terraform хранит маппинг ресурсов и метаданные. State — это "мозг" Terraform. Sensitive data может храниться в state (пароли, API keys) — храните в безопасном месте!
☁️ Remote Backend
Хранение state удалённо (необходимо для работы в команде). Backends: S3 + DynamoDB (locking), Azure Blob, GCS, Terraform Cloud. State locking — только один человек может выполнять apply одновременно. State encryption.
🔧 State Commands
`terraform state list` — список ресурсов. `terraform state show` — детали ресурса. `terraform state mv` — переименование/перемещение ресурса. `terraform state rm` — удаление из state (без воздействия на инфраструктуру). `terraform import` — добавление существующего ресурса в state.
🔒 State Locking
Предотвращение одновременного apply. S3 backend + DynamoDB LockTable. Если lock завис: `terraform force-unlock LOCK_ID`. Terraform Cloud — встроенный locking.
💡 Ключевые моменты
- State = маппинг реальной инфраструктуры <> Terraform
- Remote backend: необходим для команды (S3+DynamoDB)
- State locking: предотвращение одновременного apply
- terraform state rm: удаление из state (инфраструктура остаётся)
- terraform import: импорт существующего ресурса
- Sensitive data в state — требуется шифрование backend
📋 Пример кода
# Remote Backend (S3 + DynamoDB)
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "prod/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-lock"
encrypt = true
}
}
# State buyruqlari
terraform state list
terraform state show aws_instance.web
terraform state mv aws_instance.old aws_instance.new
terraform state rm aws_instance.to_remove
terraform import aws_instance.existing i-1234567890abcdef0
🎯 Советы для экзамена
- `terraform state rm` — не удаляет инфраструктуру, только убирает из state
- `terraform import` — добавляет существующий ресурс в state, но не создаёт .tf файл (нужно писать вручную)
- S3 backend: bucket = state, DynamoDB = lock — нужны ОБА
- Цель state locking: предотвратить конфликт при одновременном `apply` двумя людьми
- Добавлять terraform.tfstate в Git — ОШИБКА: риск утечки sensitive data и конфликты
⚠️ Частые ошибки
- Думать, что `terraform state rm` удаляет инфраструктуру — он лишь останавливает отслеживание Terraform
- Работа команды с локальным state — у каждого свой state, конфликты неизбежны
- Создавать атрибут LockID в DynamoDB table вручную — Terraform создаёт его автоматически
🧠 Для запоминания: "S3=Store, DynamoDB=Lock" — для Remote backend нужны оба сервиса. "rm=remove tracking, import=add tracking"
Проверьте себя по теме «Terraform State»
Бесплатные интерактивные тесты, пробный экзамен и полные уроки — на платформе CertMaster.
Начать бесплатно →