📘 개념 워크북 » · 실습 워크북 » 개념 워크북은 예습용입니다. 실습은 실습 워크북을 위에서 아래로 따라가며 진행합니다.
이번 주가 끝나면 반복 코드를 재사용 모듈로 추출하고,
envs/prod에서 모듈을 조합해 환경을 구성할 수 있습니다.
| 항목 | 내용 |
|---|---|
| 일시 | 2026-08-26 · 60분 |
| 방식 | 대면 |
| 선행 | week4 완료 |
| 산출물 | 실습 PR + 워크북 · 과제③ 출제 |
- module의 input(variables)/output 계약을 설계할 수 있다
- 로컬 상대경로
source로 모듈을 호출할 수 있다 - 모듈 간 데이터 전달(
module.network.public_subnet_id-> compute)을 할 수 있다 - 리팩터링 시
moved블록으로 리소스 주소 변경을 무중단 처리할 수 있다 (심화)
- HashiCorp: Modules, Module creation (20분)
- 예습 체크: "모듈 안에 provider 블록을 넣지 않는 이유"를 안다
| 시간 | 구성 | 내용 |
|---|---|---|
| 0~10분 | 회고 | 랜덤 지목 |
| 10~55분 | 실습 45분 | network/compute 모듈 추출 -> envs/prod에서 조합. 개념 설명은 따로 떼지 않고 Block A 워크스루(18분) 안에서 함께 짚습니다 |
| 55~60분 | 마무리 | 과제③ 브리핑, 6주차 예고 |
practice/
├─ modules/
│ ├─ network/ # VPC, subnet(for_each), IGW, route
│ └─ compute/ # SG, EC2
└─ envs/
└─ prod/ # module "network" + module "compute" 조합
# provider · backend · variables · locals 는 여기에만 둡니다
backend.tf 의 key 는 week05/prod/terraform.tfstate 이고, 버킷과 잠금 테이블은 week3 에서 만든 것을 그대로 씁니다.
envs/prod/main.tf:
module "network" {
source = "../../modules/network"
vpc_cidr = var.vpc_cidr
subnet_cidrs = var.subnet_cidrs
name_prefix = local.name_prefix
tags = local.common_tags
}
module "compute" {
source = "../../modules/compute"
vpc_id = module.network.vpc_id
subnet_id = module.network.public_subnet_id
my_ip = var.my_ip
name_prefix = local.name_prefix
tags = local.common_tags
}cd practice/envs/prod
terraform init
terraform plan # Plan: 9 to add <- 다른 숫자면 apply 하지 말고 멈춤
terraform apply
terraform destroyplan 이 9 to add 인지 보는 것이 이번 주의 안전 게이트입니다. backend.tf 의 key 가 지난 주 값이면 지난 주 state 를 인수하는데, backend 블록에는 변수도 검사도 넣을 수 없어서 이 확인이 유일한 방어선입니다. 실습워크북 B-4.
- network/compute 모듈로 분리됨 (provider는 root에만)
-
envs/prod에서 module 조합으로 apply 성공.plan이Plan: 9 to add, 0 to change, 0 to destroy. -
terraform state list가 10줄이고 모든 줄이module.로 시작 - module output이 root output으로 재노출됨
-
destroy완료 확인 (Destroy complete! Resources: 9 destroyed.) -
terraform state list가 빈 출력이고, 계정 쪽 조회(EC2 · EBS · EIP · NAT) 네 개도 빈 출력 - week3 의 S3 버킷과 DynamoDB 테이블은 지우지 않았음 (7주차까지 유지)
| 증상 | 원인 | 해결 |
|---|---|---|
| 모듈 추가했는데 반영 안 됨 | init 안 함 | module 블록 추가·삭제 또는 source 변경 후 terraform init 재실행. 모듈 안 main.tf 만 고쳤으면 필요 없습니다 |
source not found |
경로 오타 | 상대경로 확인 (../../modules/...) |
| 리팩터링 시 리소스 재생성 | 주소 변경 | moved 블록 사용 (또는 학습용이니 destroy 후 재apply) |
- L2:
envs/dev추가해 같은 모듈을 다른 변수로 재사용 - L3-⭐:
moved블록으로 week4 코드에서 무중단 이전, 모듈 변수validation
- Week6(대면): State Drift & 기존 import
- 예습: drift 개념,
terraform plan읽는 법,terraform import문법
⚠️ 비용 주의: 리팩터링 중 EC2가 잠깐 겹칠 수 있음(create 후 destroy). 종료 시 확인. EC2 1대 유지. 공통 규칙: 자격증명/secret 커밋 금지 ·destroy확인 · 코드는 PR로