Terraform

📌 Terraform이란?

Infrastructure as Code (IaC) 도구로, 코드를 통해 인프라를 정의하고 관리할 수 있게 해주는 오픈소스 도구입니다. HashiCorp에서 개발했으며, 다양한 클라우드 프로바이더(AWS, Azure, GCP 등)와 온프레미스 환경을 지원합니다.

🎯 핵심 개념

1. 선언적 구성 (Declarative Configuration)

원하는 최종 상태를 정의하면, Terraform이 현재 상태와 비교하여 필요한 변경사항을 자동으로 적용합니다.

2. 상태 관리 (State Management)

Terraform은 terraform.tfstate 파일에 인프라의 현재 상태를 저장하고 추적합니다. 이를 통해 변경사항을 감지하고 관리합니다.

3. 프로바이더 (Providers)

AWS, Azure, GCP 등 각 플랫폼과 통신하기 위한 플러그인입니다. 각 프로바이더는 해당 플랫폼의 리소스를 관리하는 API를 제공합니다.

📁 기본 파일 구조

주요 파일 유형

  • .tf 파일: Terraform 구성 파일 (HCL 언어 사용)
  • main.tf: 주요 리소스 정의
  • variables.tf: 변수 선언
  • outputs.tf: 출력 값 정의
  • terraform.tfvars: 변수 값 지정
  • terraform.tfstate: 현재 인프라 상태 저장

🔧 핵심 명령어

기본 워크플로우 명령어

1. 초기화

terraform init

프로바이더 플러그인 다운로드 및 백엔드 초기화

2. 계획 확인

terraform plan

변경될 사항을 미리 확인 (실제 적용 X)

3. 적용

terraform apply

계획된 변경사항을 실제로 적용

4. 삭제

terraform destroy

Terraform으로 생성한 모든 리소스 삭제

유용한 추가 명령어

  • terraform validate: 구성 파일 유효성 검사
  • terraform fmt: 코드 포맷팅 자동 정리
  • terraform show: 현재 상태 확인
  • terraform refresh: 실제 인프라와 상태 파일 동기화
  • terraform output: 출력 변수 값 확인

💡 주요 구성 요소

1. 리소스 (Resources)

실제 인프라 구성 요소를 정의합니다.

기본 문법:

resource "리소스_타입" "리소스_이름" { 설정_키 = "설정_값" }

2. 변수 (Variables)

재사용 가능한 값을 정의합니다.

변수 타입:

  • string: 문자열
  • number: 숫자
  • bool: 불린
  • list: 리스트
  • map: 맵
  • object: 객체

3. 출력 (Outputs)

Terraform 실행 후 필요한 정보를 추출합니다.

4. 데이터 소스 (Data Sources)

기존 인프라에서 정보를 읽어옵니다.

5. 모듈 (Modules)

재사용 가능한 Terraform 구성 컴포넌트입니다.

📊 상태 관리 베스트 프랙티스

원격 백엔드 사용

  • S3 + DynamoDB (AWS)
  • Azure Storage
  • Google Cloud Storage
  • Terraform Cloud

원격 백엔드를 사용하면 팀 협업이 가능하고 상태 파일을 안전하게 관리할 수 있습니다.

상태 잠금 (State Locking)

동시에 여러 사용자가 인프라를 수정하는 것을 방지합니다.

🚀 실전 사용 팁

1. 환경 분리

개발(dev), 스테이징(staging), 프로덕션(prod) 환경을 분리하여 관리합니다.

방법:

  • 워크스페이스 사용: terraform workspace
  • 디렉토리 분리
  • 변수 파일 분리 (dev.tfvars, prod.tfvars)

2. 버전 관리

  • Terraform 버전 고정: required_version
  • 프로바이더 버전 고정: required_providers

3. 보안 고려사항

  • 민감한 정보는 변수로 관리
  • sensitive = true 속성 사용
  • .tfvars 파일은 .gitignore에 추가
  • 환경 변수나 시크릿 관리 도구 활용

4. 코드 구조화

project/ ├── environments/ │ ├── dev/ │ ├── staging/ │ └── prod/ ├── modules/ │ ├── networking/ │ ├── compute/ │ └── database/ └── global/

⚠️ 주의사항

1. 상태 파일 관리

  • 절대 수동으로 편집하지 않기
  • Git에 커밋하지 않기 (원격 백엔드 사용)
  • 정기적으로 백업

2. 리소스 임포트

기존 인프라를 Terraform으로 관리하려면 terraform import 명령 사용

3. 의존성 관리

  • depends_on: 명시적 의존성 정의
  • 리소스 참조를 통한 암시적 의존성 활용

📚 학습 로드맵

초급

  1. HCL 문법 이해
  2. 기본 명령어 숙달
  3. 단순 리소스 생성/삭제
  4. 변수와 출력 활용

중급

  1. 모듈 작성 및 활용
  2. 원격 백엔드 구성
  3. 워크스페이스 관리
  4. 복잡한 의존성 처리

고급

  1. 커스텀 프로바이더 개발
  2. Terraform Cloud/Enterprise 활용
  3. CI/CD 파이프라인 통합
  4. 대규모 인프라 관리 전략

🔗 유용한 리소스

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다