kb/workflow
Повседневный цикл работы: plan → review → apply → state → repeat. Что делать когда ресурс «застрял» (taint, -replace), как безопасно сносить (destroy + -target), как читать «No changes» и почему оно, главный инвариант terraform.
Флаги `-replace=<address>` и `-target=<address>` ограничивают apply одним ресурсом. `-replace` пересоздаёт ресурс (заменяет устаревший `terraform taint`). `-target` применяет только к указанному ресурсу, это аварийный инструмент, не повседневный.
`terraform console`, интерактивная REPL: вводишь выражение HCL, получаешь значение. Можно проверить функции (`upper("foo")`), типы (`type(var.x)`), пощупать state (`aws_s3_bucket.demo.arn`). Не меняет ничего, только читает.
`terraform fmt` приводит HCL к каноничному виду: одинаковые отступы, выровненные `=`, без лишних пустых строк. Запускается на одной папке по умолчанию, рекурсивно, с флагом `-recursive`. В CI используют `-check -diff` чтобы упасть на неформатированных файлах.
`terraform graph` выводит directed graph (DAG) зависимостей ресурсов в формате Graphviz dot. Из него видно, что от чего зависит, и почему Terraform делает что-то именно в таком порядке. Используется при дебаге cycle-ошибок и для понимания крупных проектов.
`terraform validate` проверяет HCL на синтаксис и базовую логику: неизвестные аргументы, неправильные типы, ссылки на несуществующие ресурсы. Не ходит в облако, не трогает state: быстрая проверка. В CI запускается после `init -backend=false` и перед `plan`.