直接回答:IaC 是把服务器、网络、数据库等基础设施的定义写成代码,纳入版本管理,用工具自动创建和变更,替代在控制台手工点击。Terraform 是其中代表,用声明式的 HCL 描述"要什么",由它计算差异并调用各云厂商 API 完成收敛。
resource "aws_security_group" "web" {
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
解决的核心问题:一是环境一致性——开发、测试、生产用同一份代码实例化,消除"测试能过生产挂"的配置漂移;二是变更可追溯——每次基础设施变更都是一次 code review 和 git commit,出问题可回滚、可审计;三是可重复与效率——重建整套环境从几天缩到一条 terraform apply;四是灾难恢复和多云复制的成本大幅降低。
实践要点:state 文件是 Terraform 的核心——它记录真实资源与代码的映射,必须用远端后端(如 S3+DynamoDB 锁)共享并加锁,禁止本地提交,更不能手改;用 workspace 或目录隔离多环境;控制台上手工改过的资源要通过 import 或刷新纳管,否则下次 apply 会被"纠正"回去,这在生产上就是事故。IaC 不是银弹:apply 删除资源和创建一样自动化,生产变更必须走 plan 评审,敏感资源加 prevent_destroy 生命周期保护。
追问方向:Terraform 的 state 漂移(drift)怎么检测?Pulumi 用通用语言写 IaC 相比 HCL 有何优劣?IaC 和 GitOps 是什么关系?
(约 480 字)