Terraform 多环境管理
当你开始用 Terraform 管理生产环境时,第一个问题是:如何安全地管理多个环境?
dev 环境需要快速迭代,可以接受频繁重建;staging 要尽可能接近生产;production 则是红线地带,每一次变更都需要 triple-check。
但问题是:这些环境的配置有什么不同?状态如何隔离?变量如何管理?这就是多环境管理的核心挑战。
环境管理的挑战
漂移问题
手动变更导致状态与代码不一致。
变量冲突
错误的做法:共用变量文件
状态污染
核心策略
策略一:Workspace 隔离
每个
优点:
- 同一套代码,不同配置
- 状态完全隔离
- 简单易用
缺点:
- 切换 workspace 可能混淆
- 需要额外的机制防止误操作
策略二:目录隔离(推荐)
优点:
- 物理隔离,风险可控
- Git 权限可以独立设置
- 状态文件不会混淆
缺点:
- 代码更新需要同步到多个环境
- 需要良好的模块化设计
目录隔离最佳实践
环境配置
environments/prod/main.tf
环境变量
environments/prod/variables.tf
tfvars 文件
environments/prod/terraform.tfvars
environments/dev/terraform.tfvars
environments/staging/terraform.tfvars
变量继承模式
基础配置 + 环境覆盖
base_config.auto.tfvars
environments/prod/override.auto.tfvars
变量验证
environments/prod/variables.tf
CI/CD 集成
GitHub Actions
.github/workflows/terraform.yml
审批流程
.github/workflows/terraform-prod.yml
敏感数据管理
AWS Secrets Manager
从
SOPS 加密
.sops.yaml(SOPS
环境变量注入
variables.tf
环境 promotion
代码 promotion
代码从 dev 开始,经过 staging,最终到 prod。模块更新通过版本标签管理。
基础设施 promotion
常见问题
问题一:如何同步多个环境
解决方案
使用 CI/CD 流水线,在 staging 通过后自动部署到 staging,prod 需要手动审批。
问题二:状态漂移怎么处理
问题三:如何回滚环境
总结
Terraform 多环境管理的核心原则:
- 状态隔离:每个环境独立状态,S3 key 使用环境前缀
- 代码复用:通过 modules 共享代码
- 变量分层:基础配置 + 环境覆盖
- 敏感数据:使用 Vault/Secrets Manager/SOPS
- 审批流程:生产环境必须有人工审批
- 自动化:CI/CD 流水线确保一致性
下一步
想了解 Pulumi vs Terraform 的对比?请阅读 Pulumi vs Terraform。