DevOps Bootcamp · Урок

Управление состоянием Terraform и удалёнными серверными модулями

Разберитесь в состоянии Terraform, настройте защищённые удалённые серверные модули, работайте с блокировкой состояния и избегайте его повреждения в совместных конвейерах IaC

Урок 4 из 413 шагов

«Управление состоянием Terraform и удалёнными серверными модулями» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Что такое состояние Terraform

Terraform записывает созданные им объекты в файл состояния (terraform.tfstate). Он сопоставляет Вашу конфигурацию с реальными облачными ресурсами.

Без состояния Terraform не знал бы, какие ресурсы уже существуют, и мог бы создать дубликаты или не обновить ресурс.

Почему локальное состояние не подходит командам

По умолчанию состояние хранится на локальном диске. При работе команды или в CI это создаёт проблемы:

  • Другие участники не видят Ваше состояние
  • Параллельные запуски повреждают файл
  • Файл содержит секреты в открытом виде, и его можно случайно добавить в репозиторий

Решение — удалённое хранилище состояния.

Удалённые хранилища состояния

Удалённое хранилище состояния сохраняет состояние в общем надёжном месте, например в бакете S3, Azure Blob, GCS или Terraform Cloud.

Благодаря этому каждый запуск конвейера получает единый источник достоверных данных о текущей инфраструктуре.

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

Блокировка состояния

Если два запуска конвейера одновременно выполняют применение изменений, они могут повредить состояние. Блокировка состояния предотвращает это, разрешая только одну запись за раз.

При использовании хранилища S3 таблица DynamoDB обеспечивает блокировку. Terraform Cloud блокирует состояние автоматически.

  backend "s3" {
    bucket         = "my-tf-state"
    key            = "prod/terraform.tfstate"
    dynamodb_table = "tf-locks"
  }

Шифрование состояния

Файлы состояния часто содержат конфиденциальные значения, например пароли и ключи. Всегда шифруйте состояние при хранении.

Для хранилища S3 включите шифрование бакета и задайте encrypt = true в конфигурации хранилища.

  backend "s3" {
    bucket  = "my-tf-state"
    key     = "prod/terraform.tfstate"
    encrypt = true
  }

Рабочие пространства для сред

Рабочие пространства Terraform позволяют одной конфигурации управлять несколькими файлами состояния — по одному для каждой среды.

Переключайтесь между ними, чтобы среда тестирования и рабочая среда никогда не использовали одно и то же состояние.

terraform workspace new staging
terraform workspace select production

Планирование и применение изменений в CI

В конвейере запускайте terraform plan, чтобы предварительно просмотреть изменения (часто для запросов на слияние), и terraform apply, чтобы применить их (после слияния в основную ветку).

Сохраните план в файл, чтобы при применении использовались именно проверенные изменения.

terraform plan -out=tfplan
terraform apply -auto-approve tfplan

Проверка состояния

Вы можете запросить состояние и увидеть, какие ресурсы отслеживает Terraform.

  • terraform state list — список управляемых ресурсов
  • terraform state show <addr> — сведения об одном ресурсе

Не редактируйте состояние вручную — вместо этого используйте команды.

terraform state list
terraform state show aws_instance.web

Импорт существующих ресурсов

Если ресурс был создан не в Terraform, передайте его под управление с помощью terraform import, а не создавайте заново.

Это предотвращает разрушительное дублирование при внедрении IaC в существующую инфраструктуру.

terraform import aws_s3_bucket.logs my-existing-bucket

Обработка расхождений

Расхождение возникает, когда кто-то вручную изменяет инфраструктуру и фактическое состояние больше не соответствует сохранённому состоянию.

Регулярно запускайте terraform plan, чтобы обнаруживать расхождения, а затем либо повторно применяйте конфигурацию для восстановления, либо обновляйте конфигурацию в соответствии с фактическим состоянием.

Никогда не добавляйте состояние в репозиторий

Даже при использовании удалённого хранилища убедитесь, что локальные файлы состояния и планы игнорируются Git. Они содержат секреты.

Хороший файл .gitignore защищает от случайной утечки данных.

# .gitignore
*.tfstate
*.tfstate.*
tfplan
.terraform/

Быстрая проверка

Проверьте, насколько хорошо Вы поняли состояние Terraform.

Повторение

Вы научились безопасно управлять состоянием Terraform.

  • Состояние сопоставляет конфигурацию с реальными ресурсами; никогда не редактируйте его вручную
  • Удалённые хранилища состояния обеспечивают общий доступ к состоянию для команды и CI
  • Блокировка и шифрование защищают от повреждения и утечек
  • Рабочие пространства изолируют среды; plan обнаруживает расхождения

Надёжное управление состоянием — основа стабильных конвейеров IaC.

Можно начать бесплатно

Изучай DevOps Bootcamp с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
142
Уроки
568

Часто задаваемые вопросы

Урок «Управление состоянием Terraform и удалёнными серверными модулями» бесплатный?

Да — полный текст урока «Управление состоянием Terraform и удалёнными серверными модулями» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Управление состоянием Terraform и удалёнными серверными модулями»?

Разберитесь в состоянии Terraform, настройте защищённые удалённые серверные модули, работайте с блокировкой состояния и избегайте его повреждения в совместных конвейерах IaC Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Управление состоянием Terraform и удалёнными серверными модулями»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. IaC с Terraform и GitHub Actions
  2. Управление облачными ресурсами
  3. Автоматизация обновлений инфраструктуры
  4. Управление состоянием Terraform и удалёнными серверными модулями
← Назад к DevOps Bootcamp