Рефакторинг состояния с помощью moved и removed
Безопасно переименовывайте и перестраивайте ресурсы без уничтожения инфраструктуры, используя команды управления состоянием и декларативные блоки moved и removed.
«Рефакторинг состояния с помощью moved и removed» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Проблема переименования
Когда Вы переименовываете ресурс в конфигурации, Terraform видит, что старый адрес исчез, а новый появился. По умолчанию ресурс будет уничтожен и создан заново, что может привести к простою или потере данных.
Инструменты рефакторинга состояния позволяют сообщить Terraform, что ресурс просто переместился.
Проверка состояния
Начните со списка объектов, отслеживаемых в состоянии. Команда terraform state list показывает адрес каждого управляемого ресурса.
terraform state listИмперативная команда state mv
Классический подход — terraform state mv, который переписывает адрес ресурса в состоянии. Здесь мы переименовываем экземпляр с aws_instance.web на aws_instance.app.
terraform state mv aws_instance.web aws_instance.appНедостаток state mv
state mv — это ручное однократное действие CLI. Оно не записывается в код, поэтому коллегам, выполняющим то же изменение на своих машинах, придётся повторить его. В совместной работе это легко приводит к ошибкам.
Декларативные блоки moved
Блок moved записывает переименование в конфигурации. Terraform автоматически применяет его для всех во время следующего планирования, после чего блок можно удалить.
moved {
from = aws_instance.web
to = aws_instance.app
}Перемещение в модуль
Блоки moved также позволяют поместить ресурсы в модуль. Целевой адрес включает путь к модулю.
moved {
from = aws_instance.app
to = module.compute.aws_instance.app
}Проверка с помощью плана
После добавления блока moved выполните terraform plan. При правильном перемещении не будет уничтожения или создания — только изменение адреса. Если Вы по-прежнему видите замену, блок составлен неправильно.
terraform planУдаление из состояния
Иногда нужно, чтобы Terraform перестал управлять ресурсом, не уничтожая реальную инфраструктуру. Для этого используется императивная команда terraform state rm.
terraform state rm aws_instance.legacyДекларативные блоки removed
В новых версиях Terraform поддерживается блок removed. С параметром lifecycle { destroy = false } он удаляет ресурс из состояния, оставляя реальную инфраструктуру нетронутой.
removed {
from = aws_instance.legacy
lifecycle {
destroy = false
}
}Разделение файлов состояния
В больших проектах команда terraform state mv -state-out может перемещать ресурсы между отдельными файлами состояния. Это удобно при разделении монолита на стеки, применяемые независимо.
terraform state mv -state-out=network.tfstate \
aws_vpc.main aws_vpc.mainРезервные копии и безопасность
Перед изменением состояния Terraform записывает файл .backup. Тем не менее при использовании удалённых серверных хранилищ всегда проверяйте, не заблокировано ли состояние коллегой, прежде чем выполнять ручные операции, чтобы избежать повреждения.
Быстрая проверка
Проверьте свои знания о рефакторинге.
Итоги: безопасный рефакторинг состояния
Теперь Вы можете перестраивать инфраструктуру, не уничтожая её:
state mvиstate rmдля императивных изменений.- Блоки
movedдля декларативного переименования. - Блоки
removed, чтобы забыть ресурс, не уничтожая его. - Всегда проверяйте план: в нём не должно быть замены.
Часто задаваемые вопросы
Урок «Рефакторинг состояния с помощью moved и removed» бесплатный?
Да — полный текст урока «Рефакторинг состояния с помощью moved и removed» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Рефакторинг состояния с помощью moved и removed»?
Безопасно переименовывайте и перестраивайте ресурсы без уничтожения инфраструктуры, используя команды управления состоянием и декларативные блоки moved и removed. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Рефакторинг состояния с помощью moved и removed»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Удалённые хранилища состояния
- Блокировка состояния и согласованность
- Импорт существующих ресурсов
- Рефакторинг состояния с помощью moved и removed