terraform 是声明式 iac 工具,通过 hcl 配置定义资源期望状态,自动处理依赖、执行顺序与状态同步;依托 provider 插件对接多云平台,经 plan 预览后 apply 部署,并以 state 文件为唯一事实源,支持模块化、多环境与 ci/cd 协作。

Terraform 通过声明式配置文件管理云基础设施,核心是把“要什么”写清楚,而不是一步步教它“怎么做”。它自动处理依赖、执行顺序和状态同步,让部署可重复、可追溯、跨环境一致。
定义资源:用 HCL 写清楚你要的基础设施
HCL(HashiCorp Configuration Language)是 Terraform 的配置语言,语法简洁直观。你只需描述资源类型、名称和关键参数,Terraform 自动解析依赖关系并生成执行计划。
- 例如创建一个 Azure 虚拟网络:
resource "azurerm_virtual_network" "example" {
name = "my-vnet"
address_space = ["10.0.0.0/16"]
location = "East US"
resource_group_name = azurerm_resource_group.example.name
}
- 所有云资源都按类似方式定义:AWS EC2、GCP Bucket、阿里云 VPC 等,只需换用对应 provider 的资源类型;
- 避免硬编码值,把 region、instance_type、cidr_block 等提取为变量,方便多环境复用;
- 每个资源块都有唯一标识(如 azurerm_virtual_network.example),其他资源可通过该标识引用其属性。
对接云平台:配置 Provider 并完成认证
Provider 是 Terraform 与云服务商交互的插件。必须先声明并配置好,才能创建真实资源。
- 在 provider.tf 中指定云厂商和认证方式,例如 Azure:
provider "azurerm" {
features {}
}
- 认证推荐使用 Azure CLI 登录(az login),或设置服务主体环境变量(AZURE_CLIENT_ID 等),避免在配置中明文写密钥;
- 运行 terraform init 下载并初始化 provider 插件,这是每次新建项目或更新 provider 后的必做步骤。
预览与部署:先看计划再动手
Terraform 的关键优势在于“所见即所得”——所有变更都经过显式预览,杜绝误操作。
- terraform plan 会对比当前状态文件(state)与配置文件,列出将新增、修改、销毁的资源;
- 输出类似 Plan: 2 to add, 1 to change, 0 to destroy.,支持加 -out=plan.tfplan 保存为二进制计划文件;
- terraform apply 执行计划,输入 yes 或直接加 -auto-approve(CI/CD 中常用);
- 首次运行后,Terraform 自动生成 terraform.tfstate 记录实际资源映射,后续所有操作都基于此状态。
提升工程能力:模块化与多环境管理
单个配置文件难以支撑生产级项目。模块(module)是组织代码的核心单元,相当于基础设施的“函数”。
- 将 VPC、EKS、RDS 等通用能力封装成独立模块,定义清晰的 variables.tf(输入)和 outputs.tf(输出);
- 根模块通过 module "vpc" { source = "./modules/vpc" ... } 调用,传入环境特定参数;
- 配合工作区(terraform workspace)或目录隔离(dev/、prod/),实现一套代码、多套环境;
- 搭配版本控制系统(Git)和 CI/CD 流水线,可实现代码提交即触发 plan 审核与 apply 部署。











