Ответ
Команда terraform taint — это устаревший, но все еще встречающийся в legacy-коде способ принудительно пометить управляемый ресурс в state-файле Terraform как "испорченный" (tainted). Это заставляет Terraform запланировать удаление и последующее повторное создание этого конкретного ресурса при следующем выполнении terraform apply, даже если его конфигурация в коде (*.tf) не изменилась.
Зачем это нужно? Например, если виртуальная машина вошла в нерабочее состояние из-за внутренних проблем (повреждение ОС, неудачные ручные изменения), но ее инфраструктурный код корректен. Пересоздание — быстрый способ вернуть её в "чистое" состояние.
Пример старого синтаксиса:
terraform taint aws_instance.my_web_server
Эта команда только изменяет метаданные в terraform.tfstate. Сам ресурс в облаке не меняется до запуска apply.
Критические недостатки и современная альтернатива:
-
Устаревание: Начиная с Terraform v0.15.2, команда
taintсчитается устаревшей (deprecated). -
Рекомендуемая замена: Флаг
-replaceв командахplanиapply.# Планируем замену конкретного ресурса terraform plan -replace="aws_instance.my_web_server" # Непосредственно выполняем замену terraform apply -replace="aws_instance.my_web_server"Этот подход более явный, безопасный и лучше интегрирован в рабочий процесс планирования.
-
Ограниченная область действия:
taintработает только на уровне ресурса, но не на уровне модуля. -
Потенциальная опасность: Слепое использование
taintдля ресурсов с данными (например, БД) может привести к потере информации, если не настроены механизмы резервного копирования или сохранения томов.
Практический совет: В новом коде используйте исключительно terraform apply -replace=".". Если вы поддерживаете старый код с taint, запланируйте его рефакторинг. Всегда анализируйте план (terraform plan) после пометки ресурса, чтобы убедиться в отсутствии нежелательных побочных эффектов.