用途
本技能提供 Terraform 模块设计与组织的最佳实践参考,帮助把基础设施代码拆分为可复用模块,并在多环境下管理状态与配置。
主要能力
目录结构模式
- 模块分层分离:
modules/存放可复用模块(按 networking、compute、data 等分类),environments/存放各环境配置(dev、staging、prod,各自包含 main.tf、terraform.tfvars、backend.tf),global/存放跨环境资源(IAM、Route53)。 - Terragrunt-based DRY:根
terragrunt.hcl统一后端与 provider 配置,各环境通过 include 继承公共配置,各模块目录下的terragrunt.hcl声明模块来源与输入。
模块设计原则
- 单一职责:一个模块只负责一类资源(如 VPC 模块只处理 VPC),避免“全栈一体”模块。
- 输入/输出设计:变量带有 type、description、default 和 validation 校验(如实例类型正则匹配、环境名枚举校验);输出仅暴露其他模块需要的值。
- 条件资源:通过
count = var.enable_monitoring ? 1 : 0等方式按开关创建资源。
状态管理
- 远程状态:使用 S3 后端配合 DynamoDB 锁表,并开启加密。
- 状态拆分策略:按环境、按层(network/compute/data)、按团队、按生命周期拆分,资料中给出各自的优点与缺点(如按环境隔离性好但跨环境引用需数据源,按层减少爆炸半径但引用管理复杂)。
- 跨状态引用:通过
terraform_remote_state数据源读取其他状态文件的输出。
标签策略
用 locals 定义 common_tags(Environment、Project、ManagedBy、Team、CostCenter),再通过 merge 合并资源专属标签。
反模式与解决方案
- 巨型状态文件 → 按层拆分;
- 硬编码值 → 变量 + tfvars;
- 模块内定义 provider → provider 只在根配置;
- 用 count 做复杂条件 → 改用 for_each;
- 明文密钥 → 使用 SSM/Vault 引用。
使用方式
资料未提供具体安装命令或调用步骤,暂未提供。
适用场景
适合需要组织多环境 Terraform 基础设施、设计可复用模块、规划状态拆分与跨状态引用的工程团队。
限制
资料以模式说明和示例代码为主,未提供自动化执行、校验工具或与具体云厂商之外的使用约束,暂未提供。