[Terraform] Workspace

도은호·2025년 9월 30일

terraform

목록 보기
28/32
  • Workspace = 같은 코드로 여러 개의 상태(State) 분기를 운영하는 기능.
  • 가벼운 개발/실험에는 유용하지만, 강한 격리(권한/결제/리스크)별도 백엔드/계정 분리가 권장.

1) 개념

  • default, dev1, qa 등 워크스페이스마다 서로 다른 .tfstate를 가짐.
  • 같은 코드를 사용해도 워크스페이스가 다르면 완전히 별개의 인프라가 만들어짐.

구조 이미지

graph TD
  R[코드 디렉터리] --> S1[(state: default)]
  R --> S2[(state: dev)]
  R --> S3[(state: qa)]

2) 기본 명령

terraform workspace list
terraform workspace new dev
terraform workspace select dev
terraform workspace show
terraform workspace delete dev

3) 백엔드 키와 함께 쓰기(권장 패턴)

terraform {
  backend "s3" {
    bucket = "my-tfstate-bucket"
    key    = "project/${terraform.workspace}/app.tfstate"
    region = "ap-northeast-2"
    encrypt        = true
    dynamodb_table = "tf-locks"
  }
}

워크스페이스마다 서로 다른 키 경로를 사용하여 충돌을 방지


4) 활용 예시

  • default에서 EC2 생성 → 인스턴스 A
  • dev 워크스페이스로 전환 후 동일 코드 apply인스턴스 B (ID/리소스 별개)

    각각 다른 워크스페이스에서 생성한 인스턴스(인스턴스 ID가 다름)

5) 주의/안티패턴

  • 권한·결제 구분, 강한 격리가 필요하면 별도 계정/백엔드/버킷으로 나누기
  • 워크스페이스를 환경 분리의 유일한 수단으로 쓰지 않기(운영 리스크)
  • CI에서 워크스페이스 자동 선택 시 오타/누락으로 잘못된 환경에 배포하지 않도록 보호장치 필요

6) 팁

  • terraform.workspace 값을 네이밍/태깅에 반영해 가시성↑
  • Envs(dev/stage/prod) 조합 시 State 파일 경로 규칙을 팀 표준으로 문서화
profile
`•.¸¸.•´´¯`••._.• 🎀 𝒸𝓇𝒶𝓏𝓎 𝓅𝓈𝓎𝒸𝒽💞𝓅𝒶𝓉𝒽 🎀 •._.••`¯´´•.¸¸.•`

0개의 댓글