Terraform 命令速查表 - Terraform 基础设施即代码常用命令大全

Terraform 基础设施即代码的必备命令都在这里了,从初始化到销毁完整生命周期,按场景分类整理,直接复制使用。

系统与运维·共 53 条命令·最后更新 2026-07-21
返回 系统与运维

核心工作流 Core Workflow 7

terraform init
初始化工作目录,下载 Provider 和模块
terraform plan
预览变更,显示将创建/修改/销毁的资源
terraform apply
执行变更,应用基础设施修改
terraform destroy
销毁所有由配置管理的基础设施
terraform fmt
格式化 .tf 文件为标准格式
terraform validate
验证配置文件语法和内部一致性
terraform apply -auto-approve
自动批准执行(CI/CD 使用)

状态管理 State Management 9

terraform state list
列出状态文件中所有资源
terraform state show <resource>
查看指定资源的详细状态
terraform state mv <src> <dst>
移动资源在状态中的地址
terraform state rm <resource>
从状态中移除资源(不销毁实际资源)
terraform state pull
拉取远程状态到本地 stdout
terraform state push
推送本地状态到远程后端
terraform import <address> <id>
将已有资源导入 Terraform 管理
terraform taint <resource>
标记资源为"损坏",下次 apply 会重建
terraform untaint <resource>
取消资源的"损坏"标记

变量与输出 Variables & Outputs 8

variable "region" {\n type = string\n default = "us-east-1"\n}
定义变量(类型、默认值)
var.region
引用已定义的变量
TF_VAR_region=us-west-2
通过环境变量设置变量
terraform plan -var="region=us-west-2"
通过命令行参数设置变量
output "ip" {\n value = aws_instance.web.public_ip\n}
定义输出值
terraform output
查看所有输出值
terraform output -json
以 JSON 格式查看输出值
locals {\n name = "${var.prefix}-web"\n}
本地局部变量,简化表达式

模块使用 Modules 6

module "vpc" {\n source = "terraform-aws-modules/vpc/aws"\n version = "5.0.0"\n}
引用 Registry 模块,指定版本
module "vpc" {\n source = "./modules/vpc"\n}
引用本地模块(相对路径)
module "vpc" {\n source = "git::https://example.com/vpc.git"\n}
引用 Git 仓库中的模块
module.vpc.vpc_id
引用模块的输出值
terraform init -upgrade
升级模块至最新允许版本
terraform get
下载和更新模块

远程后端 Remote Backends 6

terraform {\n backend "s3" {\n bucket = "my-tf-state"\n key = "prod/terraform.tfstate"\n region = "us-east-1"\n }\n}
S3 后端存储状态文件
terraform {\n backend "s3" {\n dynamodb_table = "tf-lock"\n }\n}
DynamoDB 状态锁防并发
data "terraform_remote_state" "db" {\n backend = "s3"\n config = {\n bucket = "shared-state"\n key = "db/terraform.tfstate"\n }\n}
跨配置读取远程状态
data.terraform_remote_state.db.outputs.db_endpoint
引用远程状态的输出值
terraform init -reconfigure
重新配置后端(迁移状态)
terraform init -migrate-state
将状态文件迁移到新后端

高级功能 Advanced Features 9

terraform workspace new staging
创建新的工作空间
terraform workspace list
列出所有工作空间
terraform workspace select staging
切换到指定工作空间
resource "aws_instance" "web" {\n for_each = var.subnets\n}
for_each 通过集合批量创建资源
resource "aws_instance" "web" {\n count = var.instance_count\n}
count 通过计数批量创建资源
depends_on = [aws_s3_bucket.data]
显式依赖,确保创建顺序
lifecycle {\n create_before_destroy = true\n}
生命周期策略:先创建后销毁
lifecycle {\n prevent_destroy = true\n}
生命周期策略:防止意外销毁
lifecycle {\n ignore_changes = [tags]\n}
生命周期策略:忽略特定属性变更

调试与排障 Debugging 8

terraform console
交互式控制台,测试表达式
terraform graph | dot -Tpng > graph.png
生成资源依赖关系图
terraform show
查看当前状态的可读输出
terraform show -json
JSON 格式输出状态,方便 jq 处理
TF_LOG=DEBUG terraform apply
开启 DEBUG 级别日志输出
TF_LOG=TRACE terraform plan
TRACE 级别日志,最详细信息
TF_LOG_PATH=./tf.log terraform apply
将日志输出到指定文件
export TF_LOG=WARN
设置日志级别(TRACE/DEBUG/INFO/WARN/ERROR)

💡 提示

  • terraform plan 永远不会修改资源,放心使用
  • 将敏感信息放在变量中,不要硬编码在 .tf 文件里
  • 使用 terraform fmt 统一代码格式,团队协作必备
  • state 文件包含敏感信息,切勿提交到 Git
  • 使用 remote backend(如 S3+ DynamoDB)实现团队协作和状态锁