基础设施即代码

IaC 工具对比

工具类型语言最适合
Terraform / OpenTofu基础设施供应HCL多云基础设施、状态管理
Ansible配置管理YAML服务器配置、应用部署、无代理
Pulumi基础设施供应Python/TS/Go/C#偏好真实语言的开发者、复杂逻辑
AWS CloudFormation基础设施供应JSON/YAML纯 AWS、深度服务集成
AWS CDK基础设施供应TS/Python/Java纯 AWS、编程式方法
HelmK8s 配置YAML + 模板Kubernetes 应用打包

Terraform 项目结构

infra/ ├── environments/ │ ├── dev/ │ │ ├── main.tf │ │ ├── variables.tf │ │ └── terraform.tfvars │ └── prod/ │ ├── main.tf │ └── terraform.tfvars ├── modules/ │ ├── vpc/ │ │ ├── main.tf │ │ ├── variables.tf │ │ └── outputs.tf │ ├── eks/ │ └── rds/ └── shared/ ├── backend.tf └── providers.tf

IaC 最佳实践

实践描述
远程状态状态存储在 S3/GCS,用 DynamoDB 加锁
按环境分离状态dev/staging/prod 使用独立状态文件
模块化VPC、EKS、RDS 等可复用模块
固定所有版本固定提供商和模块版本
先计划再应用始终审查 plan;CI 在 PR 中自动展示 plan
密钥管理IaC 中不存储密钥;使用 Vault、AWS SSM 等
资源标签统一标签:环境、团队、成本中心、创建人
漂移检测定期运行 terraform plan 检测手动变更