인프라 구성 기초

지원 버전: EKS 1.29+, Terraform 1.10+, AWS Provider 5.x 마지막 업데이트: 2026년 2월 19일

< 이전: 목차 | 목차 | 다음: NLB 가중치 라우팅 >


이 문서에서는 Terraform을 사용하여 EKS Auto Mode 클러스터 인프라를 3개의 독립적인 레이어로 구성하는 방법을 설명합니다. 각 레이어는 변경 빈도, 팀 오너십, 그리고 장애 영향 범위(Blast Radius)에 따라 분리되어 있어 운영 안정성과 팀 협업 효율성을 높입니다.

목차


3-Layer 아키텍처 소개

왜 레이어를 분리하는가?

단일 Terraform 상태 파일로 모든 인프라를 관리하면 다음과 같은 문제가 발생합니다:

  1. Blast Radius 확대: 하나의 실수가 전체 인프라에 영향

  2. 긴 Plan/Apply 시간: 변경 사항이 없는 리소스도 매번 검사

  3. 팀 협업 충돌: 여러 팀이 동시에 작업할 때 Lock 경합

  4. 권한 관리 어려움: 네트워크 팀과 애플리케이션 팀의 권한 분리 불가

레이어별 특성 비교

Layer
이름
변경 빈도
주요 오너
Blast Radius
롤백 난이도

00

shared

거의 없음

DevOps

전체

매우 높음

01

network

월 1-2회

네트워크 팀

VPC 전체

높음

02

cluster

월 1-2회

플랫폼 팀

EKS 클러스터

중간

03

platform

주 1-2회

플랫폼 팀

Add-ons만

낮음

디렉토리 구조

핵심 원칙

Terraform은 AWS 인프라만 관리합니다.

Kubernetes 리소스(NodePool, Deployment, Service 등)는 ArgoCD를 통한 GitOps 방식으로 관리합니다. 자세한 내용은 GitOps 멀티 클러스터 배포를 참조하세요.


00-shared: 공통 설정

S3 Backend 구성 (네이티브 S3 잠금)

참고: Terraform 1.10부터 S3 backend에서 use_lockfile = true 옵션을 통해 DynamoDB 없이 네이티브 S3 잠금을 사용할 수 있습니다. S3의 conditional writes를 활용하여 상태 파일 잠금을 처리하므로, DynamoDB 테이블 생성 및 관리가 불필요합니다.

모든 레이어가 공유하는 Terraform 상태 저장소를 먼저 구성합니다.

공통 변수 정의

환경별 변수 파일


01-network: VPC 구성

Backend 설정

변수 정의

VPC 메인 구성

출력 정의


02-cluster: EKS Auto Mode

Backend 설정

Remote State 데이터 소스

변수 정의

EKS Auto Mode 클러스터 구성

출력 정의


03-platform: Add-ons & Pod Identity

Backend 설정

Remote State 데이터 소스

변수 정의

Pod Identity 및 Add-ons 구성

출력 정의


레이어 간 연계

terraform_remote_state 데이터 소스 패턴

각 레이어는 이전 레이어의 출력값을 terraform_remote_state 데이터 소스를 통해 참조합니다.

데이터 흐름 다이어그램

Terraform 3-Layer 데이터 흐름

상태 관리 모범 사례

  1. 절대 수동으로 상태 파일을 편집하지 마세요

    • terraform state mv, terraform import 명령 사용

  2. 상태 파일 버전 관리

    • S3 버전 관리 활성화로 롤백 가능

    • 주기적인 상태 백업 권장

  3. Lock 충돌 해결

  4. 출력값 변경 시 주의

    • 하위 레이어에서 참조하는 출력값 변경 시 영향 범위 확인

    • 출력값 삭제 전 의존성 제거 필요

  5. S3 네이티브 잠금 사용 (Terraform 1.10+)

    • use_lockfile = true 설정으로 S3 conditional writes 기반 잠금 활성화

    • DynamoDB 테이블 생성/관리 불필요

    • 기존 DynamoDB 잠금에서 마이그레이션 시 terraform init -migrate-state 실행


검증

레이어별 적용 순서

kubectl 검증

Smoke Test 스크립트

트러블슈팅 가이드

일반적인 문제와 해결 방법

문제
원인
해결 방법

terraform_remote_state 오류

S3 버킷 접근 권한 없음

IAM 정책 확인, 버킷 이름 확인

EKS 클러스터 생성 실패

서브넷 태그 누락

01-network에서 EKS 태그 확인

NodePool이 노드를 생성하지 않음

Auto Mode 미활성화

cluster_compute_config.enabled = true 확인

Pod Identity 연결 실패

OIDC Provider 없음

enable_irsa = true 확인

디버깅 명령어


다음 단계

이 인프라 구성을 완료한 후 다음 문서를 참조하세요:


참고 자료

마지막 업데이트