목적

Workspace를 통해 개발(dev) 환경과 운영(prod) 환경을 분리하여 소프트웨어 개발과 배포 과정에서 발생할 수 있는 문제를 최소화한다.

Workspace란?

Workspace는 Terraform에서 제공하는 기본적인 기능으로, 동일한 Terraform 코드를 다른 환경에서 사용할 수 있도록 돕는다. 각 환경에 대해 변수, 상태 파일 등을 분리하여 관리할 수 있어서, 개발 환경과 운영 환경을 분리할 때 유용하다.

명령어

workspace 명령어 확인

terraform workspace --help

workspace 생성

terraform workspace new [workspace 이름]
# 예시
terraform workspace new dev

workspace 삭제

terraform workspace delete [workspace 이름]

workspace 리스트

terraform workspace list

workspace간 이동

terraform workspace select [workspace 이름]
# 예시
terraform workspace select dev

환경별 다른 리소스 생성

CLI로 workspace간 이동한다고 해도 별 차이를 못 느낄 것이다. 코드가 동일하기 때문이다. Terraform workspace를 가상환경처럼 사용하려면 어떻게 사용해야 할까?

workspace를 생성하면 ${terraform.workspace} 환경 변수를 사용할 수 있다.

예를 들면 아래와 같이 terraform.workspace를 이용하여 환경별로 다른 인스턴스 타입을 지정하고 다른 tag를 붙일 수 있다.

provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0fb653ca2d3203ac1"
  instance_type = terraform.workspace == "prod" ? "m4.large" : "t2.micro"
  tags = {
    Name = "example-server-${terraform.workspace}"
  }
}