본문으로 건너뛰기
PDF ↓
← 대표 사례로

PF-01 · AWS · IaC

AWS 멀티 리전 Terraform

리전별 locals 맵 하나를 고치면 16개 AWS 리전에 같은 인프라가 만들어지는 Terraform 모듈 모음입니다.

16
리전별 provider 별칭
24
공개한 Terraform 모듈
3
검증한 예제
역할
설계 · 구현
기간
개인 프로젝트 · 2026.11 공개
규모
16개 리전 · 모듈 24종 · 예제 3개
클라우드
AWS
기술
Terraform · AWS · EKS · CloudWatch · AWS Chatbot
provider 별칭 16개, 같은 assume_roleus-west-2us-west-1us-east-2us-east-1sa-east-1ap-south-1ap-southeast-1ap-southeast-2ap-northeast-3ap-northeast-2ap-northeast-1eu-north-1eu-west-1eu-west-2eu-west-3eu-central-1assume_role모든 리전에서 같은 role_arn16개 리전 · 모듈 24종 · 리전별 locals 맵
리전을 늘려도 수정할 곳은 locals 맵 항목과 리전별 module 블록입니다.
문제

같은 형태의 리소스를 여러 리전에 만들어야 했습니다. 리전이 늘수록 복사한 코드가 늘고 리전마다 설정이 달라질 위험이 커졌습니다.

접근

리전별 locals 맵에 원하는 상태를 선언하고 module과 for_each로 일괄 생성합니다. provider는 리전마다 별칭을 두고 같은 role을 assume합니다. for_each가 provider를 동적으로 고를 수 없어 리전별 module 블록은 반복합니다.

결과

변경은 맵 항목 하나로 끝나고, 키가 고정이라 순서를 바꿔도 리소스가 다시 생성되지 않습니다. 모듈 24종에 암호화, IMDSv2, 비공개 S3 같은 기본값을 넣었고 EKS와 알림 예제까지 3종을 공개했습니다.

배운 점

반복을 줄이는 것만큼 리소스를 가리키는 키를 고정하는 것이 중요했습니다. count는 목록의 위치로 리소스를 구분해 항목을 끼워 넣거나 순서를 바꾸면 뒤쪽 리소스가 다시 만들어질 수 있지만, for_each는 맵의 키로 구분하므로 순서와 상관없이 같은 리소스를 가리킵니다. provider를 for_each로 고를 수 없다는 Terraform의 제약은 억지로 감추지 않고 리전별 module 블록을 반복해 드러냈고, 그 편이 읽고 고치기 쉬웠습니다. 이후로는 같은 구조를 여러 곳에 만들 때 데이터(맵)와 코드(모듈)를 먼저 나누고, 변경이 맵 항목 하나로 끝나는지를 설계의 기준으로 삼습니다.

Control Plane에서 전체 기록 보기 ↗

© 2026 김준현 · 이 사이트의 인프라도 코드로 관리합니다

테마 고르기

사원증을 누르면 그 테마로, 보던 내용과 같은 곳으로 이동합니다. 끌면 흔들리기만 합니다.

처음 화면으로 →