Terraform Cheatsheet - Infrastructure as Code Command Reference
Essential Terraform IaC commands for the complete lifecycle from init to destroy, organized by scenario. Copy directly for your infrastructure.
Back to SysOps核心工作流 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 -jsonJSON 格式输出状态,方便 jq 处理
TF_LOG=DEBUG terraform apply开启 DEBUG 级别日志输出
TF_LOG=TRACE terraform planTRACE 级别日志,最详细信息
TF_LOG_PATH=./tf.log terraform apply将日志输出到指定文件
export TF_LOG=WARN设置日志级别(TRACE/DEBUG/INFO/WARN/ERROR)
💡 Tips
- terraform plan never modifies resources, safe to run anytime
- Store sensitive values in variables, never hardcode in .tf files
- Use terraform fmt to standardize code format across your team
- State files contain sensitive information, never commit to Git
- Use remote backends (S3 + DynamoDB) for team collaboration and state locking