AWS 멀티 리전 Terraform GitHub ↗
- Terraform
- AWS
- EKS
- CloudWatch
- AWS Chatbot
- 16
- 리전별 provider 별칭
- 24
- 공개한 Terraform 모듈
- 3
- 검증한 예제
리전별 locals 맵 하나를 고치면 16개 AWS 리전에 같은 인프라가 만들어지는 Terraform 모듈 모음입니다.
규모: 16개 리전 · 모듈 24종 · 예제 3개
개요
-
문제
같은 형태의 리소스를 여러 리전에 만들어야 했습니다. 리전이 늘수록 복사한 코드가 늘고 리전마다 설정이 달라질 위험이 커졌습니다.
-
접근
리전별 locals 맵에 원하는 상태를 선언하고 module과 for_each로 일괄 생성합니다. provider는 리전마다 별칭을 두고 같은 role을 assume합니다. for_each가 provider를 동적으로 고를 수 없어 리전별 module 블록은 반복합니다.
-
결과
변경은 맵 항목 하나로 끝나고, 키가 고정이라 순서를 바꿔도 리소스가 다시 생성되지 않습니다. 모듈 24종에 암호화, IMDSv2, 비공개 S3 같은 기본값을 넣었고 EKS와 알림 예제까지 3종을 공개했습니다.
-
배운 점
반복을 줄이는 것만큼 리소스를 가리키는 키를 고정하는 것이 중요했습니다. count는 목록의 위치로 리소스를 구분해 항목을 끼워 넣거나 순서를 바꾸면 뒤쪽 리소스가 다시 만들어질 수 있지만, for_each는 맵의 키로 구분하므로 순서와 상관없이 같은 리소스를 가리킵니다. provider를 for_each로 고를 수 없다는 Terraform의 제약은 억지로 감추지 않고 리전별 module 블록을 반복해 드러냈고, 그 편이 읽고 고치기 쉬웠습니다. 이후로는 같은 구조를 여러 곳에 만들 때 데이터(맵)와 코드(모듈)를 먼저 나누고, 변경이 맵 항목 하나로 끝나는지를 설계의 기준으로 삼습니다.