ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何写出可复用Terraform模块:terraform-skill的模块分层与命名规范完整教程

如何写出可复用Terraform模块:terraform-skill的模块分层与命名规范完整教程 如何写出可复用Terraform模块terraform-skill的模块分层与命名规范完整教程【免费下载链接】terraform-skillTerraform OpenTofu Skill for AI Agents - testing, modules, CI/CD, and production patterns项目地址: https://gitcode.com/gh_mirrors/te/terraform-skill本教程面向新手基于 AI 编码代理的最佳实践技能terraform-skill带你掌握如何写出可复用的 Terraform 模块核心讲透三件事——模块分层资源模块 → 基础设施模块 → 组合层、标准目录结构以及变量、输出、模块的命名规范。先搞懂可复用 Terraform 模块的价值在哪 terraform-skill 的核心理念是作用域越小模块越好用。把大而全的配置拆成小模块后你立刻获得三大好处好处说明⚡ 更快的 plan/apply2000 行的大文件规划要 10 分钟以上拆分后每个模块独立运行 更小的故障半径一个模块出错只影响该模块管理的资源不会波及全局 团队并行开发网络、计算、存储各自独立不同团队可同时修改互不冲突所有细节都可以在 module-patterns.md 中找到这是 terraform-skill 中关于模块开发最重要的参考文档。模块分层三原则从资源模块到组合层terraform-skill 把 Terraform 模块划分为3 个层级这是可复用模块的骨架层级适用场景复用性典型例子资源模块Resource Module单一逻辑组、紧耦合的资源⭐⭐⭐ 极高VPC 子网、安全组 规则基础设施模块Infrastructure Module为同一目的组合多个资源模块⭐⭐ 中等完整的 Web 应用栈组合层Composition完整环境可跨多区域/多账号⭐ 环境专属dev / staging / prod层级关系一句话记住资源 → 资源模块 → 基础设施模块 → 组合层。3 个问题判断你的代码该放哪层拿不准该建哪种模块时按顺序问 3 个问题出自 module-patterns.md 的决策树这是环境专属配置吗→ 是 → 放组合层如environments/prod/它组合了多项基础设施职责吗→ 是 → 基础设施模块如modules/web-application/它是一组聚焦的关联资源吗→ 是 → 资源模块如modules/vpc/、modules/rds/ 记住一句话模块提供抽象组合层提供具体值。环境相关的取值生产用db.r5.xlarge、多可用区、30 天备份全部写在组合层而不是硬编码进模块。标准目录结构一套文件布局走天下terraform-skill 要求所有模块使用统一的文件布局这也是 Terraform Registry 发布模块的规范结构my-module/ ├── main.tf # 资源定义 ├── variables.tf # 输入变量带描述 ├── outputs.tf # 输出值带描述 ├── versions.tf # 运行时与 Provider 版本约束 ├── README.md # 使用文档 ├── examples/ │ ├── minimal/ # 最小示例 │ └── complete/ # 完整示例 └── tests/ # 测试文件几个新手最容易踩的坑 ✅terraform.tfvars和backend.tf只允许出现在组合层模块内严禁出现✅examples/目录身兼两职既是文档也是集成测试夹具✅ 可选文件locals.tf复杂计算、data.tf数据源单独成文✅ 公共模块需要LICENSEMIT 或 Apache 2.0内部私有模块可选模块与变量命名规范一次命名长期受益模块命名跟着 Terraform Registry 走模块类型命名格式示例公共模块terraform-PROVIDER-NAMEterraform-aws-vpc、terraform-aws-eks私有模块ORG-terraform-PROVIDER-NAMEacme-terraform-aws-rds变量与资源命名带上上下文这是新手代码和可复用模块最直观的区别——永远不要用泛化名字✅ 推荐❌ 避免原因vpc_cidr_blockcidr前缀带上下文跨模块不歧义database_instance_classinstance_class一看就知道属于哪个资源aws_instance.web_serveraws_instance.main描述性命名plan 输出更可读补充两条高频规则来自 SKILL.mdthis只留给真正的单例资源。同一个类型有多个资源时this会立刻失去意义标准文件名固定四件套main.tf、variables.tf、outputs.tf、versions.tf跨模块导航成本最低输入输出契约让模块自带说明书可复用模块的接口设计比资源本身更重要。terraform-skill 的契约要求非常明确输入变量variables.tf✅ 永远写description让用户不用看实现就懂用途✅ 显式声明type尽早暴露类型错误✅ 用validation块约束取值范围如实例类型只能是 t3.micro/small/medium✅ 机密值标记sensitive true✅ 优先使用 1.3 的optional()类型化默认值代替无类型的map(any)输出值outputs.tf✅ 永远写description说明用途✅ 相关值打包成对象返回如把id、private_ip、public_dns合并为一个connection_info✅ 只暴露稳定的子集不要把整个 Provider 对象透传出去✅ 机密输出显式标记sensitive true更多 HCL 层面的写法块顺序、countvsfor_each、版本管理见 code-patterns.md。四大反模式别让模块复用性归零 上帝模块一个模块建 VPC、EC2、RDS、S3、IAM……难以测试、难以复用、难以维护。修法按单一职责拆成networking、compute、database等独立模块硬编码环境值模块里写死instance_type m5.large、Environment production模块就被锁死在生产环境。修法全部参数化环境值交给组合层用for_each循环环境在根模块里for_each [dev, staging, prod]创建所有环境——无法分离状态文件故障半径巨大。修法每个环境独立根模块 独立状态滥用terraform_remote_state它只应用于团队所有权边界不同团队、不同发布节奏。同一团队的模块之间优先用模块输出接线发布前检查清单8 步收尾模块交付或发布前按 module-patterns.md 的 Release Checklist 逐项确认运行时Terraform/OpenTofu与 Provider 选择明确版本下限写在required_version公共/私有定位已定影响命名与 LICENSEexamples/至少包含minimal与complete两个示例测试覆盖了validation块——拒绝用例和正常用例同等重要README 文档化全部输入/输出Description → Usage → Inputs → Outputs消费方代码用version锁定模块版本防上游破坏性升级.gitignore排除.terraform/、*.tfstate*、*.tfvars公共模块附带 LICENSE 文件测试策略的完整决策矩阵原生terraform testvs Terratest见 testing-frameworks.md。延伸学习路径资料内容SKILL.md技能总入口核心原则、工作流、诊断路由表module-patterns.md模块架构、契约、反模式、发布清单本文主线code-patterns.md块顺序、countvsfor_each、moved块、版本管理testing-frameworks.md静态分析、原生测试、Terratest、Mock Providerquick-reference.md命令速查表、决策流程图、模块开发工作流README.md项目总览安装方式、能力范围、适用代理清单把先分层、再命名、后契约的顺序刻进习惯你的 Terraform 模块就能真正做到跨项目、跨团队、跨环境复用。【免费下载链接】terraform-skillTerraform OpenTofu Skill for AI Agents - testing, modules, CI/CD, and production patterns项目地址: https://gitcode.com/gh_mirrors/te/terraform-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表