Практика Terraform и OpenTofu: plan, state и изменения без сюрпризов
Самый неприятный момент в инфраструктуре как код — увидеть замену ресурса, который вы собирались только переименовать. Команда выполняет написанное, но результат расходится с намерением автора. Эта подборка посвящена чтению плана и связи конфигурации с состоянием: что именно меняется, почему и как это проверить до применения.
Как работать с подборкой
Работайте в отдельном учебном проекте с ресурсами, которые можно восстановить. Сохраните исходную конфигурацию и резервную копию состояния по правилам своего backend. Для облачных упражнений заранее посмотрите стоимость выбранных ресурсов. Начинайте с plan: применять изменение имеет смысл после того, как вы можете объяснить каждую операцию.
Ниже — статьи с объяснениями и примерами. Практические эксперименты выполняются в вашем учебном окружении; это не встроенный автоматический экзамен.
1. Понять, что предлагает план
Разберите коды завершения, принудительную замену и невозможность вычислить ключи коллекции заранее. Хорошая тренировка — сначала записать ожидаемые операции на бумаге, затем сравнить их с plan.
- CI считает terraform plan ошибкой при найденных изменениях: detailed-exitcode
- Terraform и OpenTofu хотят пересоздать ресурс: как разобраться с планом
- Invalid for_each argument: почему ключи ресурсов должны быть известны до apply
2. Изменить структуру конфигурации
Переименование и перестройка списка не обязательно означают изменение реальной инфраструктуры. Проверьте, как адреса ресурсов связаны с состоянием, прежде чем реорганизовывать рабочий модуль.
- Удаление элемента списка пересоздаёт ресурсы: count и стабильные ключи for_each
- Как переименовать ресурс Terraform или OpenTofu без пересоздания: moved
- Как добавить существующий ресурс в Terraform или OpenTofu через import
3. Сохранить согласованное состояние
Общий backend, блокировки и внешние изменения становятся важны, когда инфраструктуру меняет больше одного человека. Отработайте эти ситуации отдельно: они требуют разных действий.
- Terraform и OpenTofu: что делать с блокировкой state после оборванного запуска
- Смена backend: чем migrate-state отличается от reconfigure
- Ручное изменение в облаке: что показывает refresh-only в Terraform и OpenTofu
4. Сделать окружение воспроизводимым
Разберитесь с выбором provider, lock-файлом и данными в state. Пометка sensitive управляет отображением значений, но сама по себе не превращает хранилище состояния в безопасное место для любого секрета.
- Модуль Terraform использует не тот provider: передаём alias явно
- Lock-файл Terraform и OpenTofu: фиксируем версии и проверяем обновление провайдера
- Sensitive скрывает вывод, но что остаётся в state Terraform и OpenTofu
Соберите результат в одну рабочую процедуру
Для итогового упражнения возьмите небольшой ресурс, измените его адрес в конфигурации и докажите по плану, что инфраструктура не будет пересоздана. Затем добавьте внешний дрейф в учебном окружении и объясните, какое состояние вы хотите считать правильным. Важен предсказанный результат, а не количество выполненных apply.
Продолжить обучение
Продолжение с модулями, состоянием и инфраструктурным проектом — в программе курса Terraform и OpenTofu: инфраструктура как код. На странице курса — программа, условия доступа и покупки. Сопоставьте их со своей ближайшей рабочей задачей.
Если пока не хватает базы или нужен соседний инструмент, выберите другой маршрут в путеводителе по практике DevOps.
Продолжить на практике
- Terraform и OpenTofu: инфраструктура как код ↗
Описывайте инфраструктуру в коде, проверяйте изменения до применения и работайте со state без сюрпризов. HCL, модули, remote state, импорт, CI и различия Terraform/OpenTofu — на воспроизводимом учебном окружении.
