Terraform 고급 활용 및 운영

Terraform 고급 활용 및 운영

1️⃣ Terraform Workspace를 활용한 멀티 환경 구성

1 워크스페이스(Workspace)란?

워크스페이스는 동일한 Terraform 코드로 **여러 환경(dev, stage, prod)**을 구분하여 관리할 수 있는 기능입니다.

각 워크스페이스는 독립적인 상태파일을 가집니다.

terraform workspace new dev
terraform workspace new prod

2 환경별 리소스 구성 예시

resource "aws_s3_bucket" "example" {
  bucket = "my-bucket-${terraform.workspace}"
}

🔁 워크스페이스 이름에 따라 다른 버킷 생성:

  • my-bucket-dev
  • my-bucket-prod

2️⃣ Terraform과 Kubernetes 연동 (kubectl, Helm)

1 kubernetes provider 사용 예시

provider "kubernetes" {
  config_path = "~/.kube/config"
}

resource "kubernetes_namespace" "example" {
  metadata {
    name = "terraform-managed"
  }
}

2 Helm Provider 사용 예시

provider "helm" {
  kubernetes {
    config_path = "~/.kube/config"
  }
}

resource "helm_release" "nginx" {
  name       = "nginx"
  repository = "https://charts.bitnami.com/bitnami"
  chart      = "nginx"
  namespace  = "default"
}

📌 Terraform으로 쿠버네티스 리소스 및 Helm Chart 배포 자동화 가능


3️⃣ 대규모 인프라 배포 시 모범 사례

1 모듈화 전략

  • 공통 리소스(vpc, network, iam) → 모듈로 추상화
  • 각 팀 또는 서비스별 별도 모듈

📁 예시 구조:

/modules
  /vpc
  /eks
  /rds
/envs
  /dev
  /prod

2 Plan → Apply 분리

terraform plan -out=plan.tfplan
terraform apply plan.tfplan

✅ 변경사항 검토 후 적용할 수 있어 안정성 확보

3 상태 잠금(State Locking) 필수

  • 원격 백엔드(S3 + DynamoDB)로 상태 충돌 방지

4️⃣ Terraform Drift Detection 및 변경 관리

1 Drift Detection이란?

인프라 리소스가 Terraform 관리 외부에서 변경된 상태를 감지하는 것

2 terraform plan 또는 refresh로 확인

terraform refresh
terraform plan

📌 수동 변경이 감지되면 계획(plan) 시 변경사항을 알림

3 예시: EC2 태그 외부에서 변경

~ tags = {
-   "Name" = "web"
+   "Name" = "manually-edited"
}

Drift가 발생하면 코드로 재정의하거나, 수동 수정 원인을 추적해야 함


5️⃣ Terraform Debugging & Troubleshooting

1 디버깅 환경 설정

export TF_LOG=DEBUG
export TF_LOG_PATH=./terraform-debug.log
  • TRACE, DEBUG, INFO, WARN, ERROR 수준 설정 가능
  • 로그 분석으로 오류 원인 파악

2 예시: 잘못된 리소스 참조

output "vpc_id" {
  value = aws_vpc.myvpc.id
}

❌ 리소스 이름 오타 → aws_vpc.my_vpc 가 맞는 경우

→ 로그에서 "resource not found"로 확인 가능


6️⃣ 최신 Terraform 기능 및 트렌드

1 Terraform 1.x 주요 기능

  • moved 블록: 리소스 이름 변경 시 상태 이동 처리
  • for_each, dynamic, locals 문법 개선
  • Provider Meta-Arguments (depends_on, lifecycle 강화)

2 Terraform Cloud / Enterprise 발전

  • VCS 연동 → GitOps 스타일 자동 배포
  • 정책(Sentinel) 적용
  • Remote Plan & Apply

3 모듈 레지스트리 & 공개 모듈 활용

  • Terraform Registry
    • AWS, Azure, GCP, Helm 등 수백 개 모듈
    • 신뢰성 있는 모듈로 빠른 구축 가능

✅ 마무리 요약

주제 요점 정리
Workspace 환경(dev, stage, prod) 별 상태 격리
K8s 연동 kubernetes, helm provider로 통합 관리
모듈화 대규모 인프라 재사용성과 유지보수성 확보
Drift Detection 수동 변경 탐지 및 일관성 유지
디버깅 TF_LOG로 문제 추적 가능
최신 기능 moved, Terraform Cloud, 모듈 레지스트리 활용
RSS Feed
마지막 수정일자