🚀 Terraform 第20天:使用自定义 Terraform 模块构建生产基础设施

发布: (2025年12月26日 GMT+8 00:33)
4 min read
原文: Dev.to

Source: Dev.to

🧠 什么是 Terraform 模块?

Terraform 模块是一个可复用、独立的 Terraform 代码包。

模块中的典型文件:

  • main.tf – 资源
  • variables.tf – 输入
  • outputs.tf – 暴露的值

Terraform 将每个目录视为一个模块。

模块可以帮助你:

  • 封装复杂性
  • 强制执行标准
  • 重用基础设施模式
  • 在团队和环境之间清晰扩展

🧩 Terraform 模块的类型

1️⃣ 公共模块

  • 可从 Terraform Registry 获取
  • 由提供者或社区维护
  • 不能在内部修改

2️⃣ 合作伙伴模块

  • 由 HashiCorp 与合作伙伴共同管理
  • 已验证且可用于生产
  • 仍然受外部控制

3️⃣ 自定义模块 (Day 20 的重点)

  • 由你或你的组织创建并维护
  • 完全掌控代码、版本、安全和更新

生产系统在很大程度上依赖自定义模块。

🏗 根模块 vs 自定义模块

🔹 根模块

  • Terraform 项目的入口点
  • 执行 terraform initterraform apply 的位置
  • 编排整个基础设施
  • 引用并连接自定义模块

🔹 自定义模块

  • 作为子目录存放在根模块内部
  • 每个模块承担单一职责
  • 彼此之间不直接通信
  • 根模块充当中心协调者

📂 典型项目结构(Day 20 风格)

terraform-project/
├── main.tf          # Root module
├── variables.tf
├── outputs.tf
├── modules/
   ├── vpc/
   ├── main.tf
   ├── variables.tf
   └── outputs.tf
   ├── eks/
   ├── main.tf
   ├── variables.tf
   └── outputs.tf
   ├── iam/
   └── secrets/

每个模块封装一个单独的基础设施领域。

🔁 模块之间的交互(非常重要)

自定义模块之间永远不直接通信。所有交互都通过根模块完成:

  1. 根模块调用自定义模块。
  2. 传递输入变量。
  3. 自定义模块创建资源。
  4. 自定义模块暴露输出。
  5. 根模块使用这些输出。
  6. 将输出作为输入传递给其他模块。

这确保了:

  • 松耦合
  • 清晰的依赖流
  • 可维护的架构

🔗 示例:VPC → EKS 依赖流

  • VPC 模块输出 vpc_id
  • 根模块捕获 vpc_id
  • 根模块将 vpc_id 传递给 EKS 模块。
  • EKS 资源在正确的 VPC 中创建。

随着基础设施的增长,这种模式能够平滑扩展。

📥 模块化设计中的变量与输出

变量

  • 定义模块期望的输入。
  • 由根模块传入。
  • 让模块保持灵活。

输出

  • 定义模块暴露的内容。
  • 被根模块使用。
  • 实现模块间的协同。

模块的行为类似函数:输入 → 处理 → 输出

🏁 结论

Day 20 将 Terraform 从学习模式转向架构模式。本节重点强调:

  • Terraform 不仅仅是管理资源。
  • Terraform 关乎系统设计。
  • 自定义模块是生产 IaC 的支柱。

掌握模块化的 Terraform 架构后,你就能构建大型、可维护、企业级的云平台——这正是 Terraform 在真实世界中的使用方式。

Back to Blog

相关文章

阅读更多 »

Terraform 堆栈

概述:一组可投入生产的 Terraform Stacks,展示了跨完整应用程序、多区域 fan‑out 和 Kubernetes 平台的企业模式。

Terraform 模块故障排除指南

Yency Christopher https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.c...