Terraform | MSP 8기 교육 미션 | 선택 심화 | 2026.04.09 - 2026.04.10
AWS Terraform Module Refactoring
한 파일에 모인 Terraform을 모듈과 dev/prod 환경으로 나눈 교육 미션
한 곳에 모인 Terraform 코드를 4개 모듈과 dev/prod 환경으로 나누고, 모듈끼리 출력값을 직접 연결했습니다.
모듈
4개
네트워크, 비밀값, 메시징, 캐시
환경
dev/prod
상태 파일과 변수 분리
연결
출력 → 입력
모듈끼리 값 직접 전달
Terraform 모듈 구성
미션 1~4를 모듈 4개로 재구성
한 곳에 모인 자원을 모듈로 나누고 dev/prod 환경에서 불러 씁니다.
M1
Foundation
VPC, Subnet, NAT, SG, IAM
M2
Secrets
SSM Parameter Store, Secrets Manager
M3
Messaging
SNS 발행, SQS 대기열, DLQ
M4
Cache
ElastiCache Redis, TLS, AUTH
M5
Modular
모듈 + dev/prod 환경으로 재구성
environments/dev
NAT 1개, cache.t3.micro, state key: dev
environments/prod
NAT 2개, cache.r6g.large, state key: prod
과제 배경
모듈로 나눈 이유
리소스가 한 파일에 모여 있으면 어떤 값이 어디서 오는지, dev와 prod가 무엇이 다른지 코드만 봐서는 알기 어렵습니다. 모듈 경계와 환경 차이를 코드에 드러내는 것이 목표였습니다.
직접 한 일
- 기본 미션 1~4의 Terraform 자원을 작성하고 자원별 출력값을 정의했습니다.
- 선택 심화에서 네트워크, 비밀값, 메시징, 캐시 4개 모듈의 입력과 출력을 설계했습니다.
- dev/prod 루트 모듈을 나누고 환경별 차이를 변수로 명시했습니다.
결과
- 4개 모듈 + dev/prod 환경 구조로 리팩터링
- 모듈 출력을 다음 모듈 입력으로 직접 연결
- dev plan 약 47개 자원 확인, prod와 차이 비교
구현 방식
모듈 연결과 환경 분리
같은 모듈을 dev와 prod에서 다른 값으로 불러 쓰는 방식입니다.
- 선택 심화(Mission 5)에서 미션 1~4의 자원을 4개 모듈로 나누고, dev/prod 루트 모듈이 같은 모듈을 다른 변수로 호출하게 했습니다.
- 네트워크, 비밀값 모듈의 출력을 캐시 모듈 입력으로 바로 넘겨, 다른 상태 파일을 읽는 terraform_remote_state 없이 연결했습니다.
- dev와 prod는 상태 파일 위치, NAT 게이트웨이 수, 메시지 보관 기간, Redis 구성을 다르게 둬 비용과 가용성 차이를 코드로 드러냈습니다.
핵심 코드
모듈 출력을 다음 모듈로 넘기는 코드
네트워크, 비밀값 모듈의 출력이 캐시 모듈 입력으로 바로 들어갑니다.
dev 루트 모듈에서 모듈을 연결하는 코드
mission5-modular/environments/dev/main.tf
terraform {
backend "s3" {
bucket = "<your-bucket-name>"
key = "deepdive/mission5/dev/terraform.tfstate"
region = "us-east-2"
}
}
module "networking" {
source = "../../modules/networking"
single_nat_gateway = true
}
module "secrets" {
source = "../../modules/secrets"
}
module "cache" {
source = "../../modules/cache"
private_subnet_ids = module.networking.private_subnet_ids
sg_redis_id = module.networking.sg_redis_id
redis_auth_token = module.secrets.redis_auth_token
node_type = var.cache_node_type
num_cache_clusters = var.cache_num_clusters
apply_immediately = var.cache_apply_immediately
snapshot_retention_limit = var.cache_snapshot_retention
} 직접 확인하기
코드와 자료
아래 링크에서 코드, 설계 문서, 실행 기록을 직접 확인할 수 있습니다.
맡은 범위
- MSP 8기 교육 미션을 혼자 수행했습니다. 모듈 경계, 환경별 변수, 모듈 간 출력 연결 코드를 직접 작성했습니다.
범위와 한계: 교육 미션 범위에서 validate, plan과 문서로 확인한 결과입니다.