Terraform CLI 命令速查
本篇按用途分组收录 terraform CLI 的高频命令与参数,适用于 Terraform 1.9+,随用随查。完整参数以 terraform <命令> -help 为准。
初始化与验证
| 命令 | 作用 | 示例 |
|---|---|---|
terraform init | 初始化工作目录:安装 provider、下载模块、配置 backend | terraform init |
terraform init -upgrade | 升级 provider 和模块到版本约束允许的最新版,更新锁文件 | terraform init -upgrade |
terraform init -migrate-state | 更换 backend 时把现有状态迁移到新后端 | terraform init -migrate-state |
terraform validate | 校验配置语法与类型,不访问远端状态 | terraform validate |
terraform fmt | 按官方风格格式化代码,-recursive 递归子目录 | terraform fmt -recursive |
改完配置先过两道关
提交前固定执行 terraform fmt -recursive 和 terraform validate,一个管格式、一个管语法,能把大部分低级错误挡在 plan 之前。
规划与执行
| 命令 | 作用 | 示例 |
|---|---|---|
terraform plan | 生成执行计划,预览增删改,不落任何变更 | terraform plan |
terraform plan -out | 把计划存入文件,供 apply 原样执行 | terraform plan -out=tfplan |
terraform plan -target | 只对指定资源及其依赖做规划 | terraform plan -target=aws_instance.web |
terraform plan -var / -var-file | 命令行传变量或指定变量文件,可多次叠加 | terraform plan -var="region=cn-north-1" -var-file=prod.tfvars |
terraform plan -refresh-only | 只刷新状态与真实资源对齐,不规划配置变更 | terraform plan -refresh-only |
terraform apply | 执行变更;带上计划文件则不再二次确认 | terraform apply tfplan |
terraform apply -auto-approve | 跳过交互确认直接执行,CI 流水线用 | terraform apply -auto-approve |
terraform apply -target | 只应用指定资源,绕过整体规划 | terraform apply -target=module.network |
terraform apply -replace | 强制销毁并重建指定资源 | terraform apply -replace=aws_instance.web |
terraform destroy | 销毁当前配置管理的全部资源 | terraform destroy |
-target 只作临时手段
-target 会让部分资源脱离整体依赖关系执行,容易造成状态与配置不一致。定位问题时临时用,常规变更一律走完整 plan/apply。
状态管理
| 命令 | 作用 | 示例 |
|---|---|---|
terraform state list | 列出状态中的所有资源地址 | terraform state list |
terraform state show | 查看某个资源在状态中的完整属性 | terraform state show aws_instance.web |
terraform state mv | 在状态中移动/重命名资源地址,不碰真实资源 | terraform state mv aws_instance.web aws_instance.app |
terraform state rm | 把资源移出状态(不再纳管),真实资源保留 | terraform state rm aws_instance.old |
terraform state pull | 拉取远端状态到本地输出,常用于备份 | terraform state pull > tfstate.backup |
terraform import | 把已存在的真实资源导入状态纳管 | terraform import aws_instance.web i-0123456789abcdef0 |
terraform taint | 标记资源下次 apply 时强制重建 | terraform taint aws_instance.web |
terraform untaint | 取消 taint 标记 | terraform untaint aws_instance.web |
taint 已不建议使用
taint/untaint 自 0.15.2 起标记为废弃,官方推荐改用 terraform apply -replace=<地址>:意图写进计划里,可审查、可复核,不会留下隐藏的状态标记。
查看与输出
| 命令 | 作用 | 示例 |
|---|---|---|
terraform show | 以可读格式查看状态文件或计划文件内容 | terraform show tfplan |
terraform output | 查看全部 output 的值 | terraform output |
terraform output -json | 以 JSON 输出,便于脚本解析和管道处理 | terraform output -json | jq .lb_dns.value |
terraform graph | 输出 DOT 格式依赖图,配 Graphviz 渲染成图 | terraform graph | dot -Tpng > graph.png |
工作区
| 命令 | 作用 | 示例 |
|---|---|---|
terraform workspace list | 列出所有工作区,星号标出当前所在 | terraform workspace list |
terraform workspace new | 新建工作区,状态相互隔离 | terraform workspace new staging |
terraform workspace select | 切换到指定工作区 | terraform workspace select prod |
调试
| 命令 | 作用 | 示例 |
|---|---|---|
TF_LOG 环境变量 | 设日志级别:TRACE/DEBUG/INFO/WARN/ERROR,排障时最常用 | TF_LOG=DEBUG terraform plan |
-input=false | 禁止交互询问,配合 CI 防止流水线卡在等待输入 | terraform apply -input=false -auto-approve |