用途
Terraform Skill 是一个面向 Claude 的技能,用于在涉及 Terraform 或 OpenTofu 的工作中提供系统性指导,覆盖测试、模块、CI/CD 与生产环境模式。其内容基于 terraform-best-practices.com 与企业实践经验。
适用场景包括:
- 创建新的 Terraform 或 OpenTofu 配置或模块
- 为 IaC 代码搭建测试基础设施
- 在多种测试方案之间做选择(validate、plan、测试框架)
- 设计多环境部署结构
- 为基础设施即代码实现 CI/CD
- 审查或重构既有 Terraform/OpenTofu 项目
- 在模块模式或状态管理方案之间做选择
不适用场景:基础 Terraform/OpenTofu 语法问题、Provider 专属 API 参考、与 Terraform/OpenTofu 无关的云平台问题。
主要能力
代码结构与命名
技能给出模块层级:资源模块(单一逻辑资源组,如 VPC + 子网、安全组 + 规则)、基础设施模块(面向某一用途的资源模块集合)、组合(跨区域/账户的完整基础设施)。目录结构建议将 environments/(prod、staging、dev)与 modules/(可复用模块)分离,并用 examples/ 同时作为文档与集成测试夹具。命名上建议资源使用描述性名称,单例资源使用 "this",变量在需要时加语境前缀(如 var.vpc_cidr_block)。
代码结构标准
资源块排序:count 或 for_each 放最前(后接空行),随后是其他参数,tags 作为最后一个实际参数,depends_on 在 tags 之后,lifecycle 放最后。变量块排序:description(始终必填)、type、default、validation、nullable。
count 与 for_each 的取舍
布尔条件用 count = condition ? 1 : 0;固定数量复制用 count;条目可能被重排或删除时用 for_each = toset(list) 以获得稳定资源地址;需要按 key 引用时用 for_each = map。技能指出用 count 删除中间可用区会重建后续所有子网,而 for_each 只影响被删除项。
用 locals 管理依赖
技能演示用 locals 中的 try() 提示删除顺序,避免销毁基础设施时子网在 CIDR 块之后删除导致报错,并减少显式 depends_on。
测试策略
技能提供测试决策矩阵:快速语法检查用 terraform validate、fmt;提交前校验用 validate、tflint、trivy、checkov;Terraform 1.6+ 简单逻辑用原生测试框架;1.6 之前或具备 Go 经验用 Terratest;安全合规重点用 OPA、Sentinel;成本敏感流程用 Mock Provider(1.7+);多云复杂场景用 Terratest + 真实基础设施。并给出基础设施测试金字塔:静态分析(廉价)、集成测试(中等)、端到端测试(昂贵)。原生测试建议先用 Terraform MCP 校验 schema,选择 command = plan 或 apply,并正确处理 set 类型块(不能用 [0] 索引,需用 for 表达式或 apply 物化)。
模块开发
标准模块结构包含 README.md、main.tf、variables.tf、outputs.tf、versions.tf、examples/(minimal、complete)与 tests/。变量应始终包含 description、显式类型约束、合理默认值、复杂约束的 validation 块,敏感值用 sensitive = true。输出应包含 description,敏感输出标记 sensitive = true。
CI/CD 与安全
推荐工作流阶段:Validate(格式检查 + 语法校验 + lint)、Test(自动化测试)、Plan(生成并审查执行计划)、Apply(执行变更,生产需审批)。成本优化策略包括:PR 校验使用 mocking、集成测试仅在 main 分支运行、实现自动清理、为所有测试资源打标签。安全方面建议使用 trivy config . 与 checkov -d . 做静态扫描,避免在变量中存储密钥、使用默认 VPC、跳过加密、将安全组开放到 0.0.0.0/0。
版本管理与现代特性
版本约束建议:Terraform 固定次版本(required_version = "~> 1.9"),Provider 固定主版本(version = "~> 5.0"),生产模块固定精确版本,开发模块允许补丁更新。技能列出 1.0+ 特性:try()(0.13+)、nullable = false(1.1+)、moved 块(1.1+)、optional() 带默认值(1.3+)、原生测试(1.6+)、Mock Provider(1.7+)、Provider 函数(1.8+)、跨变量校验(1.9+)、只写参数(1.11+)。
使用方式
该技能采用渐进式披露:核心信息在主文件中,详细指南按需加载。参考文件包括 Testing Frameworks、Module Patterns、CI/CD Workflows、Security & Compliance、Quick Reference。当需要某主题的详细信息时,引用相应指南,Claude 会按需加载以提供完整指导。
适用场景与限制
适用于 Terraform 与 OpenTofu 的配置编写、模块设计、测试选型、CI/CD 搭建、安全合规与版本管理。Terraform 与 OpenTofu 均被完整支持。限制:不用于基础语法问答、Provider 专属 API 参考、与 Terraform/OpenTofu 无关的云平台问题。
许可
本技能采用 Apache License 2.0 许可,版权归 Anton Babenko(© 2026)所有。