SuperAPI AI 工具集

terraform-module-patterns

部署与运维

查看项目

更新于 10-21 05:28

技能介绍

用途

本技能提供 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 基础设施、设计可复用模块、规划状态拆分与跨状态引用的工程团队。

限制

资料以模式说明和示例代码为主,未提供自动化执行、校验工具或与具体云厂商之外的使用约束,暂未提供。