✅ 목표
- 모듈은 전역에서 재사용 가능하도록
modules/
상위에 구성
- 리전별로 실행 환경은 분리하여 관리 (
terraform/pmpubp01dp01/apne1
등)
📁 디렉토리 구조
terraform/
├── modules/ # 📦 글로벌 공통 모듈 (재사용 가능)
│ ├── vpc/
│ │ ├── main.tf
│ │ └── variables.tf
│ ├── subnet/
│ ├── route_table/
│ ├── igw/
│ ├── nat_gateway/
│ └── ec2/</p>
<p>├── pmpubp01dp01/ # 프로젝트 명 (사용자 구분 가능)
│ └── apne1/ # 🌏 도쿄 리전 실행 환경
│ ├── main.tf # 모듈 호출
│ ├── provider.tf
│ ├── variables.tf
│ ├── terraform.tfvars
│ └── .terraform/ (init 후 자동 생성)</p>
<p>└── other-region/ # 🔄 us-west-2, eu-central-1 등 확장 가능
📘 리전별 main.tf 예시 (apne1/main.tf
)
module "vpc" {
source = "../../modules/vpc"
vpc_cidr = var.vpc_cidr
tags = {
Name = "vpc-${var.project}"
Environment = var.env
}
}</p>
<p>module "subnet" {
source = "../../modules/subnet"
subnets = var.subnets
vpc_id = module.vpc.vpc_id
}
🌟 장점 요약
항목 |
효과 |
✅ 모듈 재사용 |
한 번 정의한 리소스 구성을 모든 리전에서 사용 가능 |
✅ 유지보수 용이 |
모듈만 수정하면 전체 리전 반영 |
✅ 리전 독립 실행 |
리전 디렉토리에서 terraform 명령 실행 가능 |
✅ CI/CD 유리 |
리전별 실행 파이프라인 구성에 적합 |
✅ 적용 플랜
단계 |
설명 |
1️⃣ |
modules/ 디렉토리를 루트(terraform/ ) 하위로 이동 |
2️⃣ |
각 모듈에 variables.tf 로 외부 입력 설계 |
3️⃣ |
main.tf 에서 source = "../../modules/..." 사용 |
4️⃣ |
terraform.tfvars 는 리전 디렉토리별 별도 관리 |
🔚 결론
- 지금 구조는 확장성 좋고, 팀 작업에도 적합
- 바로 적용 가능하니 다음은 VPC/서브넷 모듈 구성으로 넘어가면 완벽!