核心用法
本 Skill 聚焦 Terraform 基础设施即代码(IaC)的高阶使用技巧,系统梳理了从状态管理到模块设计的 7 大核心领域:
1. 状态管理:强制使用远程后端(S3/GCS/Terraform Cloud)替代本地 state,启用 DynamoDB 等状态锁定机制防止并发冲突;严禁手动编辑 state,需通过 terraform state mv/rm/import 操作。
2. Count vs for_each:明确区分 count(索引驱动,删除会导致连锁重建)与 for_each(键稳定,适合动态资源),后者需配合 toset() 转换列表。
3. 生命周期规则:涵盖 prevent_destroy(防误删)、create_before_destroy(零停机部署)、ignore_changes(忽略外部漂移)及 replace_triggered_by(强制重建触发器)。
4. 依赖管理:强调隐式依赖(资源引用)与显式 depends_on 的适用场景,特别指出数据源在 plan 阶段即执行可能引发的时序问题。
5. 模块与变量:强制版本锁定、显式类型约束、敏感标记及校验块,避免 "any" 类型滥用;模块输出需逐层透传。
6. 常见陷阱:包括 destroy 不可逆、plan≠apply 成功保障、重命名资源需用 moved 块或 state mv、避免 provisioners 等。
7. 导入机制:支持 CLI import 与 TF 1.5+ 声明式 import 块,需手工匹配配置后验证。
显著优点
- 事故预防导向:针对状态损坏、并发冲突、误删等高频故障提供明确规避方案
- 版本特性覆盖:包含 Terraform 1.5+ 的
import块等新特性 - 工程实践深度:超越基础语法,聚焦团队协作与生产环境稳定性
潜在局限性
- 依赖 Terraform CLI 环境,对 Cloud/Enterprise 版本差异未详细区分
- 未涉及 Terraform Cloud/Enterprise 特有的团队权限、成本估算等企业级功能
- 部分建议(如 "禁用 provisioners")需配合外部配置管理工具(Ansible/Cloud-init)才能实现完整工作流
适合人群
- 已掌握 Terraform 基础、需规避生产陷阱的中高级用户
- 平台/SRE 工程师负责制定团队 IaC 规范
- 从个人实验向团队协作迁移的 Terraform 使用者
常规风险
- 状态安全风险:state 文件明文存储密钥,需配合后端加密与 IAM 管控
- 执行风险:
terraform destroy无回滚机制,-target误操作可能导致依赖资源级联删除 - 版本锁定风险:模块版本未 pin 可能导致非预期破坏性更新