手工在云控制台上点击创建资源——管理 3 台服务器时还能应付,但跨多个云厂商管理上百个资源时就是运维灾难。Terraform 用代码来定义和管理基础设施。

核心理念:声明式 vs 命令式

命令式(Ansible 风格):你告诉机器每一步怎么做。
声明式(Terraform 风格):你描述目标状态,Terraform 计算如何达成。

这意味着你可以反复执行 terraform apply——如果资源已经处于目标状态,不会做任何变更。这叫做幂等性,是 IaC 的基石。

第一个 Terraform 项目

以在 Cloudflare 上配置 DNS 为例:

定义资源(resource + provider),然后 terraform init 下载插件、terraform plan 预览变更、terraform apply 执行变更。

状态文件(State)—— Terraform 的灵魂

Terraform 通过 terraform.tfstate 文件记录真实基础设施与配置之间的映射。丢失状态文件意味着 Terraform 不知道哪些资源归自己管。

生产环境必须使用远程状态存储(S3/Azure/GCS):多人协作共享状态、不依赖本地文件、状态锁防并发冲突。

变量验证

Terraform 支持变量验证——在编译期就拦截无效的输入值,这在生产环境中极其重要。比如限定环境变量只能是 dev/staging/prod 三者之一。

模块化:DRY 原则

当多个项目需要相同的基础设施结构时,用模块替代复制粘贴。一个 web_server 模块可以让 10 个服务复用同一个经过验证的基础设施模板。

总结

Terraform 用声明式代码替代手工点击,用状态文件追踪资源,用 plan/apply 保障安全性。从 Cloudflare DNS 到 AWS 完整架构——基础设施即代码不是时髦词汇,它是规模化的唯一出路。