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, 모듈 레지스트리 활용 |
마지막 수정일자