terraform-skill
Terraform 基础设施即代码最佳实践
作者
"Anton Babenko"
分类
开发工具安装
下载并解压到你的 skills 目录
复制命令,发送给 OpenClaw 自动安装:
Terraform Skill - 基础设施即代码最佳实践指南
技能概述
基于 terraform-best-practices.com 和企业实战经验,提供 Terraform 和 OpenTofu 的全方位指导,涵盖测试策略、模块设计、CI/CD 集成和生产环境部署模式。
适用场景
1. 创建 Terraform/OpenTofu 配置和模块
当你需要编写新的基础设施代码时,技能提供模块结构设计、命名规范、资源块排序等最佳实践指导。包括资源模块、基础设施模块和组合层的分层设计原则,帮助你构建可维护、可复用的 IaC 代码库。
2. 搭建和优化 IaC 测试体系
技能帮你选择合适的测试策略:从免费的静态分析(validate、fmt、tflint),到 Terraform 1.6+ 的原生测试框架,再到 Terratest 集成测试。提供测试金字塔方法论,平衡测试覆盖率和成本,包括 Mock Provider 的低成本测试方案。
3. 构建基础设施 CI/CD 流水线
指导你建立完整的 CI/CD 工作流:格式检查 → 验证 → 测试 → Plan → Apply。提供 GitHub Actions、GitLab CI 和 Atlantis 的集成模板,以及成本优化策略(PR 验证使用 Mock、主分支运行集成测试、自动清理测试资源)。
4. 多环境部署架构设计
支持企业级多环境(dev、staging、prod)部署方案,涵盖模块与环境分离、目录结构组织、跨账号/跨区域部署模式。提供 locals 依赖管理、moved 块无状态重构等高级技巧。
核心功能
1. 测试框架决策与实施
提供测试决策矩阵,根据你的 Terraform 版本、团队技能和成本预算,推荐最适合的测试方案。包含 Terraform 1.6+ 原生测试框架的最佳实践,以及 1.7+ Mock Provider 的低成本单元测试指南。
2. 代码结构规范
严格定义资源块和变量块的排序规范,确保代码一致性。涵盖 count vs for_each 使用场景、模块层次结构设计、命名约定(资源、变量、文件),以及现代 Terraform 特性(try()、optional()、cross-variable validation)的应用。
3. 生产环境安全与合规
集成 Trivy、Checkov 等安全扫描工具,提供密钥管理(AWS Secrets Manager/Parameter Store)、状态文件加密、最小权限安全组等安全最佳实践。包含 OPA 和 Sentinel 的策略即代码合规检查方案。
4. 版本管理与迁移
提供 Terraform 与 OpenTofu 的功能对比和迁移指南,涵盖版本约束语法(~>、>=、精确版本)、Provider/Module 版本锁定策略、升级工作流。支持 Terraform 1.0-1.5、1.6+、1.7+ 各版本的差异化指导。
常见问题
Terraform 和 OpenTofu 有什么区别?应该选哪个?
Terraform 和 OpenTofu 在功能上高度兼容,OpenTofu 是 Terraform 的开源分支。主要区别在于许可证(HashiCorp BSL vs Mozilla MPL)和社区治理。对于新项目,如果关注许可证自由度和社区开放治理,建议选择 OpenTofu;如果企业已使用 HashiCorp 产品生态,可继续使用 Terraform。本技能完全支持两者,并在 Quick Reference 中提供了详细对比。
如何为 Terraform 代码编写测试?
推荐根据 Terraform 版本和需求选择:Terraform 1.6+ 使用原生 terraform test 命令(免费、内置);复杂集成测试 使用 Terratest;安全合规 使用 OPA/Sentinel;成本敏感 使用 1.7+ 的 Mock Provider。技能提供测试金字塔方法论:底层静态分析(validate、tflint、trivy)→ 中层模块隔离测试 → 顶层端到端环境测试。
Terraform 模块应该如何组织结构?
推荐采用三层目录结构:environments/(环境特定配置)、modules/(可复用模块)、examples/(使用示例兼集成测试)。模块分为资源模块(单一逻辑资源组)→ 基础设施模块(多资源模块组合)→ 组合层(跨区域/账号)。文件命名规范:main.tf(主资源)、variables.tf(输入变量)、outputs.tf(输出)、versions.tf(Provider 版本)。
count 和 for_each 分别什么时候使用?
count:适用于布尔条件开关(count = condition ? 1 : 0)或固定数量的相同资源复制。for_each:适用于列表可能重排序/删除元素(避免资源意外重建)、通过 key 引用资源、多个命名资源的场景。核心原则:需要稳定资源地址时用 for_each,简单开关用 count。
如何搭建 Terraform 的 CI/CD 流水线?
标准工作流分为四个阶段:Validate(格式检查 + 语法验证 + lint)→ Test(运行自动化测试)→ Plan(生成执行计划供审查)→ Apply(执行变更,生产环境需审批)。成本优化策略:PR 验证使用 Mock Provider(免费)、主分支运行真实集成测试(控制成本)、自动清理测试资源。技能提供 GitHub Actions、GitLab CI 和 Atlantis 的完整模板。
Terraform 代码如何进行安全扫描?
推荐使用 Trivy(误报少、速度快)和 Checkov(规则丰富)进行静态安全扫描。常见检查项:硬编码密钥、默认 VPC 使用、缺少加密、安全组 0.0.0.0/0 开放。配合 pre-commit hooks 在代码提交前自动执行。密钥管理应使用 AWS Secrets Manager/Parameter Store 或类似服务,避免明文存储在变量中。
Terraform 多环境部署的最佳实践是什么?
核心原则:分离环境配置与可复用模块。使用 environments/ 目录存储 dev、staging、prod 的环境特定配置,modules/ 存储通用模块。模块版本管理:生产环境锁定精确版本(version = "5.1.2"),开发环境允许补丁更新(version = "~> 5.1")。使用 Workspaces 或独立后端隔离状态文件,跨环境使用统一的模块结构确保一致性。
注意:本技能专注于 Terraform/OpenTofu 代码层面的最佳实践,不涵盖云平台具体 API 参考或通用语法问题(Claude 已内置支持)。对于 Provider 特定配置,请参考官方文档。