Что такое команда `terraform taint`?

«Что такое команда `terraform taint`?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Команда 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) после пометки ресурса, чтобы убедиться в отсутствии нежелательных побочных эффектов.