Terraform 项目结构 #

项目结构概述 #

良好的项目结构是可维护基础设施代码的基础。合理的组织方式可以提高代码可读性、可维护性和团队协作效率。

text
┌─────────────────────────────────────────────────────────────┐
│                    项目结构原则                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  模块化      将代码分解为可复用的模块                        │
│  分层        按职责和抽象层次组织                            │
│  环境隔离    不同环境使用独立配置                            │
│  标准化      遵循统一的命名和结构规范                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

小型项目结构 #

text
project/
├── main.tf              主要资源配置
├── variables.tf         输入变量定义
├── outputs.tf           输出值定义
├── providers.tf         Provider 配置
├── versions.tf          版本约束
├── locals.tf            本地值
├── data.tf              数据源
├── terraform.tfvars     变量值
└── README.md            项目说明

中型项目结构 #

text
project/
├── environments/
│   ├── dev/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   ├── outputs.tf
│   │   ├── backend.tf
│   │   └── terraform.tfvars
│   ├── staging/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   ├── outputs.tf
│   │   ├── backend.tf
│   │   └── terraform.tfvars
│   └── prod/
│       ├── main.tf
│       ├── variables.tf
│       ├── outputs.tf
│       ├── backend.tf
│       └── terraform.tfvars
├── modules/
│   ├── vpc/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   ├── ec2/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   └── rds/
│       ├── main.tf
│       ├── variables.tf
│       └── outputs.tf
├── shared/
│   └── remote-state/
│       └── main.tf
└── README.md

大型项目结构 #

text
organization/
├── terraform/
│   ├── modules/
│   │   ├── networking/
│   │   │   ├── vpc/
│   │   │   ├── subnet/
│   │   │   ├── security-group/
│   │   │   └── nacl/
│   │   ├── compute/
│   │   │   ├── ec2/
│   │   │   ├── asg/
│   │   │   ├── ecs/
│   │   │   └── lambda/
│   │   ├── database/
│   │   │   ├── rds/
│   │   │   ├── dynamodb/
│   │   │   └── elasticache/
│   │   └── storage/
│   │       ├── s3/
│   │       ├── efs/
│   │       └── ebs/
│   ├── environments/
│   │   ├── dev/
│   │   │   ├── networking/
│   │   │   ├── compute/
│   │   │   └── database/
│   │   ├── staging/
│   │   └── prod/
│   ├── shared/
│   │   ├── state/
│   │   ├── iam/
│   │   └── secrets/
│   └── live/
│       └── global/
└── .github/
    └── workflows/
        ├── terraform-plan.yml
        └── terraform-apply.yml

文件命名规范 #

标准文件 #

text
┌─────────────────────────────────────────────────────────────┐
│                    标准文件命名                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  main.tf          主要资源配置                              │
│  variables.tf     输入变量定义                              │
│  outputs.tf       输出值定义                                │
│  providers.tf     Provider 配置                             │
│  versions.tf      版本约束                                  │
│  backend.tf       后端配置                                  │
│  locals.tf        本地值                                    │
│  data.tf          数据源                                    │
│  terraform.tfvars 变量值文件                                │
│  README.md        项目文档                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

资源文件 #

text
┌─────────────────────────────────────────────────────────────┐
│                    资源文件命名                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  networking.tf    网络相关资源                              │
│  compute.tf       计算资源                                  │
│  database.tf      数据库资源                                │
│  storage.tf       存储资源                                  │
│  security.tf      安全相关资源                              │
│  monitoring.tf    监控资源                                  │
│  iam.tf           IAM 资源                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

模块结构 #

基本模块 #

text
modules/
└── vpc/
    ├── main.tf
    ├── variables.tf
    ├── outputs.tf
    └── README.md

完整模块 #

text
modules/
└── vpc/
    ├── main.tf
    ├── variables.tf
    ├── outputs.tf
    ├── versions.tf
    ├── providers.tf
    ├── locals.tf
    ├── data.tf
    ├── README.md
    ├── LICENSE
    └── examples/
        ├── basic/
        │   ├── main.tf
        │   └── outputs.tf
        └── complete/
            ├── main.tf
            └── outputs.tf

环境管理 #

目录隔离 #

text
environments/
├── dev/
│   ├── main.tf
│   ├── variables.tf
│   ├── outputs.tf
│   ├── backend.tf
│   └── terraform.tfvars
├── staging/
│   ├── main.tf
│   ├── variables.tf
│   ├── outputs.tf
│   ├── backend.tf
│   └── terraform.tfvars
└── prod/
    ├── main.tf
    ├── variables.tf
    ├── outputs.tf
    ├── backend.tf
    └── terraform.tfvars

工作空间 #

text
project/
├── main.tf
├── variables.tf
├── outputs.tf
├── providers.tf
├── environments/
│   ├── dev.tfvars
│   ├── staging.tfvars
│   └── prod.tfvars
└── terraform.tfstate.d/
    ├── dev/
    ├── staging/
    └── prod/

分层架构 #

text
┌─────────────────────────────────────────────────────────────┐
│                    分层架构                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  应用层                                                     │
│  └── 应用配置、环境变量                                    │
│                                                             │
│  服务层                                                     │
│  └── EC2、ECS、Lambda、Kubernetes                          │
│                                                             │
│  数据层                                                     │
│  └── RDS、DynamoDB、ElastiCache、S3                        │
│                                                             │
│  网络层                                                     │
│  └── VPC、Subnet、Security Group、Route Table              │
│                                                             │
│  基础层                                                     │
│  └── IAM、KMS、状态存储                                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

最佳实践 #

1. 保持一致性 #

text
所有模块使用相同的文件结构
所有环境使用相同的目录结构
遵循统一的命名规范

2. 文档化 #

markdown
每个项目有 README.md
每个模块有 README.md
变量有描述
输出有描述

3. 版本控制 #

text
使用 Git 管理代码
使用 .gitignore 排除敏感文件
使用分支进行开发
使用 PR 进行代码审查

4. 状态管理 #

text
使用远程状态
启用状态锁定
启用版本控制
分离环境状态

下一步 #

掌握了项目结构后,接下来学习 命名规范,了解 Terraform 资源命名的最佳实践!

最后更新:2026-03-29