← 中文资源

简体中文版本

基础设施即代码

基础设施即代码用版本化配置文件描述网络、计算和托管服务,使环境可复现、可评审,并由自动化工具创建。

阅读英文原文

声明、计划、应用

基础设施即代码把环境定义变成存储在版本库中的文件。典型流程分三步:描述期望资源,生成对比期望与实际的计划,再应用计划。工具把创建的资源记录在状态文件中,后续运行据此知道声明与真实资源的对应关系。这样基础设施变更也能像应用代码一样走代码评审。

resource "aws_s3_bucket" "logs" {
  bucket = "acme-logs-prod"
  tags = { Environment = "prod", ManagedBy = "terraform" }
}

何时使用

当环境需要存在多份、故障后需要重建、或者变更需要审计时,就应使用 IaC。云网络、托管数据库、IAM 策略和 CI runner 收益最大。只有一台一次性虚拟机时,搭建成本可能超过收益。与手工控制台操作相比,IaC 第一次变更更慢,第一百次变更则快得多。

权衡

状态文件成为关键资产:必须远程存储、应用时加锁,并因其可能包含敏感值而受保护。Provider 与云 API 存在滞后,升级需要测试。团队还必须抵制绕过流程的临时改动,否则下一次计划会提出破坏性的意外变更。

示例与常见误解

某初创公司用同一模块加不同变量定义预发与生产环境,事故后重建预发只需一条命令加一次评审。常见误解是认为 IaC 必然幂等且安全:如果没人读计划,一次替换数据库的变更依然是破坏性的。相关概念包括不可变基础设施、GitOps 与 CI/CD。