Terraform 구조 · MSP 8기 Terraform 모듈 리팩터링 교육 미션 · 2026.04.09 - 2026.04.10
AWS Terraform Module Refactoring Mission - MSP 8기 교육 미션
MSP 8기 Terraform 모듈 리팩터링 교육 미션
MSP 8기 Terraform 모듈 리팩터링 교육 미션에서 flat 구성을 module interface와 output chaining 구조로 바꿨습니다.
Modules
4
networking, secrets, messaging, cache
Envs
dev/prod
state key와 변수 분리
연결
outputs
module output → input chaining
Terraform module map
교육 미션 기반 module 심화 구조
flat resource 구성을 dev/prod root와 module interface로 나누었습니다.
M1
Foundation
VPC · Subnet · NAT · SG · IAM
M2
Secrets
SSM Parameter Store · Secrets Manager
M3
Messaging
SNS fan-out · SQS · DLQ
M4
Cache
ElastiCache Redis · TLS · AUTH
M5
Modular
modules + dev/prod root
environments/dev
NAT 1개 · cache.t3.micro · state key: dev
environments/prod
NAT 2개 · cache.r6g.large · state key: prod
교육 미션 심화
Terraform module 리팩터링 구조
교육 미션 기반 flat resource를 module interface, dev/prod root, output chaining으로 리팩터링했습니다.
- 기본 미션 1~4에서 networking, secrets, messaging, cache 리소스를 flat Terraform으로 각각 작성했습니다.
- Mission 5 선택 심화에서 4개 module로 책임을 나누고, environments/dev · environments/prod root module에서 같은 module을 다른 변수로 호출합니다.
- networking/secrets output을 cache module input으로 전달해 terraform_remote_state 의존을 root module 내부 chaining으로 대체했습니다.
- dev/prod는 state key, NAT gateway 수, message retention, Redis node/cluster 설정을 다르게 두어 비용 절감과 고가용성 가정을 코드에 반영합니다.
- S3 backend, terraform.tfvars.example, lock file, troubleshooting 문서까지 포함해 교육 미션 기반 리팩터링 결과와 재현 절차를 작성했습니다.
module/output 심화
교육 미션 기반 module 구조
교육 미션에서 작성한 리소스가 flat 구성에 머물면 module interface와 환경별 차이를 설명하기 어렵습니다. 선택 심화 과제에서는 output chaining과 state key로 그 차이를 코드에 명시하는 것이 핵심이었습니다.
작업 파트
- 기본 미션 1~4의 flat Terraform resource 구성을 작성하고 리소스별 output interface를 정의했습니다.
- Mission 5 선택 심화에서 networking, secrets, messaging, cache module 인터페이스를 설계했습니다.
- environments/dev와 environments/prod root module을 분리하고 state key, NAT gateway, cache node, queue retention 차이를 코드에 명시했습니다.
핵심 결과
- MSP 8기 Terraform module 교육 미션 선택 심화 과제
- Mission 5 최종 구조: modules/networking, secrets, messaging, cache
- environments/dev와 environments/prod 디렉토리 기반 환경 분리
모듈 구조
Module/output chaining 리팩터링 구조
MSP 8기 Terraform module 교육 미션 기반 리팩터링에서 dev/prod root와 module output 연결을 다이어그램으로 제시합니다.
output chaining
선택 심화 module 연결 코드
프로젝트의 핵심 구현 지점입니다.
선택 심화 root module 연결 코드
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
} 모듈 구조
교육 미션 IaC 구조
MSP 8기 Terraform module 교육 미션 범위에서 module interface, 환경 분리, output chaining을 검증했습니다.
module/output chaining
- MSP 8기 Terraform module 교육 미션 범위에서 module 설계, 환경 분리, output chaining을 validate/plan과 문서로 검증했습니다.
- dev/prod 차이는 state key, NAT gateway 수, cache node type, queue retention 변수로 코드에 명시되어 있습니다.