$ man terraform | less
Это не справочник по полям ресурсов, а карта команд CLI. Каждая карточка: команда, что делает, линк в KB. Сгруппировано по тому, что обычно делают подряд.
Можно распечатать. Ctrl/Cmd + P даст одностраничный layout без навигации.
Главный цикл. Без этих трёх жизни в Terraform нет.
terraform initСкачать провайдеры и модули, создать .terraform.lock.hcl.
kb · tf-initterraform init -upgradeПеречитать модули и провайдеры заново; нужно при смене version/source.
kb · tf-init-modulesterraform init -backend-config=...Подсунуть параметры backend без редактирования HCL (CI, multi-env).
kb · tf-remote-backend-s3terraform planDiff между HCL и state. Ничего не меняет. Запускай сколько хочешь.
kb · tf-planterraform plan -out=plan.tfplanСохранить план как артефакт; apply из файла гарантирует тот же расклад.
kb · tf-plan-apply-citerraform plan -detailed-exitcodeExit 0 значит нет изменений, 2 значит есть, 1 значит ошибка. Для drift detection и CI.
kb · tf-drift-detectionterraform apply -auto-approveПрименить план без подтверждения. В CI обязательно из plan.tfplan.
kb · tf-applyterraform apply plan.tfplanПрименить сохранённый план без ре-планирования, точная копия.
kb · tf-plan-apply-citerraform destroyСнести всё что в state. В проде почти никогда; в обучении постоянно.
kb · tf-destroystate это память Terraform. Двигать осторожно, делать backup.
terraform show -json | jqРаспечатать state в JSON. Базовый инструмент для verify и отладки.
kb · tf-stateterraform state listАдреса всех ресурсов в state. Префикс module.X означает ресурс модуля.
kb · tf-stateterraform state show ADDRПолное содержимое одного ресурса в state, с sensitive-полями.
kb · tf-state-manipulationterraform state mv A BПереименовать в state без destroy. Альтернатива: moved-блок.
kb · tf-moved-blockterraform state rm ADDRУбрать из state, не трогая облако. Альтернатива: removed-блок.
kb · tf-removed-blockterraform import ADDR IDЗатащить в state существующий ресурс из облака.
kb · tf-state-importimport { to = ADDR id = "..." }Декларативный import (TF 1.5+). Plan покажет до apply, в отличие от CLI.
kb · tf-state-importmoved { from = A to = B }Переименование без destroy при рефакторинге кода.
kb · tf-moved-blockremoved { from = A lifecycle { destroy = false } }TF 1.7+: убрать ресурс из state, оставить в облаке.
kb · tf-removed-blockГигиена HCL. Хорошие команды без последствий, плохие с последствиями.
terraform fmt -recursiveКаноничное форматирование. -check для CI.
kb · tf-fmtterraform validateПроверка синтаксиса и типов без обращения к облаку.
kb · tf-validateterraform consoleREPL для выражений, type() и быстрого чтения state.
kb · tf-consoleterraform graph | dot -Tsvg > graph.svgГраф зависимостей. Цикл? -draw-cycles.
kb · tf-graphterraform apply -replace=ADDRПринудительно пересоздать ресурс. Каскадно отзовётся на зависимости.
kb · tf-replace-targetterraform apply -target=ADDRАварийный «выкатить только это». Не штатный workflow.
kb · tf-replace-targetterraform output -raw NAMEПрочитать output без кавычек. Для скриптов и pipe.
kb · tf-outputterraform workspace select devПереключиться на named workspace. Не для multi-env в проде.
kb · tf-workspaceКогда план непонятен или apply падает: порядок действий.
TF_LOG=DEBUG terraform planУровни: TRACE, DEBUG, INFO, WARN, ERROR. TRACE показывает HTTP-вызовы провайдера.
kb · tf-log-debugTF_LOG_PATH=tf.log TF_LOG=DEBUG terraform applyЛоги в файл, не в stderr. Для разбора инцидентов и тикетов.
kb · tf-log-debugterraform plan -no-color | grep -E "^( [+~-]|Plan:)"Фильтровать diff: только строки изменений и сводка.
kb · tf-plan-diffterraform show plan.tfplanПрочитать бинарный план человеком. -json подходит для машин.
kb · tf-plan-diffterraform refreshОбновить state из облака, не меняя HCL. Полезно при drift.
kb · tf-drift-detectionterraform force-unlock LOCK_IDСнять зависший lock state. Только если уверен что никто не работает.
kb · tf-common-errorsterraform graph -draw-cycles | dot -TsvgПодсветить циклы в графе зависимостей. Cycle Error берётся отсюда.
kb · tf-common-errorsНативные тесты, mock-провайдеры, terratest. Что и когда.
terraform testПрогнать .tftest.hcl из корня конфигурации и из tests/ (дефолтный test-directory). TF 1.6+.
kb · tf-test-frameworkterraform test -filter=tests/plan.tftest.hclТолько один файл. Удобно при отладке assert.
kb · tf-test-frameworkmock_provider "aws" { ... }Без облака. Любые ресурсы становятся фейком, assert работают.
kb · tf-test-mocksgo test -timeout 30m ./...Terratest. Поднимает реальную инфру, гонит проверки, сносит.
kb · terratest-basicsterraform-compliance -p plan.json -f features/BDD-policy через Gherkin. Альтернатива OPA для нетехнических ревьюверов.
kb · terraform-compliancefmt → validate → tflint → checkov → trivy → OPA. По возрастанию строгости.
tflint --recursiveСтилевые и логические правила по HCL. AWS-ruleset идёт отдельно.
kb · tf-fmt-validate-cicheckov -d .Статический security-сканер HCL и plan.json. Suppression задаётся в комментах.
kb · tf-checkovtrivy config .Замена tfsec; на HCL и plan.json. CIS-проверки в одном инструменте.
kb · tf-trivy-tfsecconftest test --policy policies/ plan.jsonOPA/Rego: deny-правила по plan.json. Для policy-gate в CI.
kb · tf-policy-as-codepre-commit installХуки fmt/validate/tflint/checkov на git commit. Никакого «забыл прогнать».
kb · tf-fmt-validate-citerraform output -json | jq '. | walk(...)'Sensitive в output редактируется, но в state виден. Не клади секреты.
kb · tf-sensitiveTerragrunt, CDKTF, Infracost, OpenTofu. Когда основ мало.
terragrunt run-all planPlan по всем стек-модулям. dependency-блоки разруливают порядок.
kb · tf-terragruntcdktf init --template typescriptСтартовый CDKTF-проект. Затем cdktf synth → plain HCL.
kb · tf-cdktfinfracost breakdown --path .Оценка стоимости плана. В CI считает diff между PR и main.
kb · tf-cost-infracosttofu init && tofu applyOpenTofu. CLI идентичен, state совместим. Provider тот же.
kb · tf-opentofu-parityrover -tfPath terraform -workingDir .Веб-визуализатор графа и плана. Удобно для презентаций ревью.
kb · tf-rover-visualization