1. 课程导论:什么是Terraform模块化设计、为什么需要CI/CD服务目录、课程目标与学习路径
1.1 什么是Terraform模块化设计
Terraform 模块化设计是将基础设施代码按照功能、职责或业务边界拆分为可复用、可组合、可版本化的独立单元(Module)的架构方法。每个模块封装一组关联的资源、变量、输出和配置逻辑,通过标准化的输入输出接口与其他模块交互。
| 维度 | 单体 Terraform 配置 | 模块化设计 |
|---|---|---|
| 代码组织 | 单文件或少量文件,资源混排 | 按服务/组件拆分独立目录 |
| 复用性 | 复制粘贴,难以维护 | 通过 source 引用,版本化发布 |
| 抽象层级 | 暴露所有资源细节 | 隐藏内部实现,暴露必要接口 |
| 变更影响 | 全局 apply,风险集中 | 局部变更,影响范围可控 |
| 团队协作 | 文件锁冲突频繁 | 模块独立开发,并行交付 |
核心原则:模块化 = 封装 + 组合 + 版本化。每个模块只做一件事,并做好一件事(Single Responsibility Principle)。
1.2 为什么需要CI/CD服务目录
随着组织规模扩大,平台团队面临的核心挑战是:如何在不成为瓶颈的前提下,为多个业务团队提供标准化、合规、可自服务的基础设施环境。CI/CD 服务目录(Service Catalog)正是解决这一矛盾的架构模式。
服务目录定义:一个可搜索、可浏览、可一键部署的标准化基础设施服务清单。每个服务目录项对应一个经过审核的 Terraform 模块,附带版本、文档、输入参数和合规策略。
引入 CI/CD 服务目录的五大驱动力:
- 消除重复劳动:每个团队不再各自编写 VPC、Kubernetes 集群或数据库配置,直接从目录选择标准模板。
- 内置合规与安全:所有模块经过安全扫描、策略即代码(Policy as Code)验证,默认满足组织合规基线。
- 降低认知门槛:应用开发者无需成为 Terraform 专家,通过简单参数即可创建完整环境。
- 版本管理与回滚:每个模块版本对应一个经过 CI 测试的制品,支持语义化版本控制和快速回退。
- 审计与成本追踪:所有部署记录关联到服务目录项,便于成本分摊、资源审计和容量规划。
| 对比维度 | 传统 IaC 模式 | CI/CD 服务目录模式 |
|---|---|---|
| 交付方式 | 手动编写配置,PR 审批 | 自服务门户,一键部署 |
| 标准化程度 | 各团队自行定义,差异大 | 平台统一维护,版本一致 |
| 变更流程 | 人工审核,周期长 | CI 流水线自动验证 + 审批 |
| 环境一致性 | 开发/测试/生产配置漂移 | 同一模块版本,多环境复用 |
| 团队效率 | 平台团队成为瓶颈 | 应用团队自助,平台赋能 |
1.3 课程目标与学习路径
本课程旨在帮助 DevOps 工程师、平台工程师和架构师掌握从零构建企业级 Terraform 模块化 CI/CD 服务目录的完整方法论与实践技能。
课程核心目标:学完本课程后,你能够独立设计、实现并维护一套支持多团队、多环境、多云的 Terraform 服务目录体系。
具体学习目标:
- 掌握 Terraform 模块化设计原则、目录结构规范和版本管理策略。
- 学会使用 Terraform Registry、Git 子目录或 OCI 制品仓库作为模块注册中心。
- 构建 CI 流水线实现模块的 lint、format、validate、plan 和安全扫描。
- 构建 CD 流水线实现环境的自动部署、审批、通知和状态同步。
- 集成策略即代码(OPA / Sentinel)确保所有部署符合组织合规要求。
- 设计服务目录门户(Backstage / Port / 自建)实现团队自服务。
- 建立成本标签、资源审计和漂移检测机制,实现持续治理。
学习路径与章节地图:
| 阶段 | 章节范围 | 核心产出 |
|---|---|---|
| 基础篇 | 第 1-5 章 | 模块化设计原则、目录结构、版本管理 |
| 构建篇 | 第 6-12 章 | CI 流水线、模块测试、注册中心搭建 |
| 交付篇 | 第 13-20 章 | CD 流水线、审批流、多环境部署 |
| 治理篇 | 第 21-25 章 | 策略即代码、成本管理、漂移检测 |
| 进阶篇 | 第 26-30 章 | 多云目录、自服务门户、生产运营 |
前置要求:建议具备基础的 Terraform 使用经验(了解 main.tf、variables.tf、outputs.tf 基本结构),熟悉 Git 工作流和 CI/CD 基本概念。无需精通所有云服务商,课程以 AWS 为主,但原则适用于 AWS / Azure / GCP。
推荐学习方式:
- 每章先阅读概念部分,理解 Why 和 What。
- 跟随代码示例动手实践,建议准备一个独立的 AWS 账号或使用 LocalStack。
- 完成每章末尾的“动手练习”和“思考题”,巩固理解。
- 在 GitHub 上创建自己的服务目录仓库,边学边构建。