Terraform Workspace란 무엇인가요?
Terraform Workspace는 Terraform으로 인프라를 코드로 관리할 때 중요한 부분입니다. 이를 이해하기 위해서는 먼저 '상태'의 개념을 알아야 합니다.
상태 (State)란 무엇인가요?
테라폼을 사용하여 인프라를 변경하거나 관리할 때, 그 변경사항을 기록하는 파일입니다. .terraform.tfstate라는 파일에 이 정보가 저장되며, 이 파일을 통해 테라폼은 어떤 변경이 필요한지를 알 수 있습니다. 그리고 이 상태 파일을 기준으로 여러 프로젝트를 관리하는 것이 '워크스페이스'입니다.
그럼 테라폼 워크스페이스란?
- 워크스페이스는 **상태 관리의 '단위'**라고 볼 수 있습니다.
- 한 프로젝트 내에서 여러 개의 .tf 파일을 가진 디렉토리가 여러 워크스페이스로 동작할 수 있습니다.
워크스페이스 사용 사례
환경별로 (개발, 스테이징, 프로덕션) 네트워크 설정 코드가 다를 때, 각 코드를 복사하여 사용하는 것은 관리가 힘듭니다.
대신 워크스페이스를 사용하여 코드와 데이터를 분리해 작성하면 훨씬 간결하고 효율적으로 관리할 수 있습니다.
워크스페이스 관련 명령어들
tf workspace -h
Usage: terraform [global options] workspace
new, list, show, select and delete Terraform workspaces.
Subcommands:
delete Delete a workspace
list List Workspaces
new Create a new workspace
select Select a workspace
show Show the name of the current workspace
워크스페이스 목록 확인: terraform workspace list
현재 사용가능한 workspace 목록을 확인할 수 있다.
tf workspace list
* default
현재 워크스페이스 확인: terraform workspace show
tf workspace show
default
새 워크스페이스 생성 및 삭제: terraform workspace new/delete [workspace name]
workspace 생성/삭제 하기
terraform workspace new prod
Created and switched to workspace "prod"!
You're now on a new, empty workspace. Workspaces isolate their state,
so if you run "terraform plan" Terraform will not see any existing state
for this configuration.
terraform workspace list
default
* prod
terraform workspace delete prod
Deleted workspace "prod"!
terraform workspace list
* default
다른 워크스페이스 선택: terraform workspace select [workspace name]
select option을 이용하여 현재 workspace를 변경할 수 있다.
terraform workspace select default
Switched to workspace "default".
terraform workspace list
* default
prod
워크스페이스 파일 구조: terraform.tfstate.d
워크스페이스를 사용하면, 각 워크스페이스에 대한 상태가 terraform.tfstate.d 디렉토리 내에 저장됩니다.
tree
.
├── custom.tfvars
├── dev.tfvars
├── main.tf
├── prod.tfvars
├── staging.tfvars
└── terraform.tfstate.d
├── dev
│ └── terraform.tfstate
├── prod
│ └── terraform.tfstate
└── staging
└── terraform.tfstate
실습: 환경별 워크스페이스 생성
1. 환경 변수 파일 생성
다음과 같은 내용의 파일을 각 환경에 맞게 생성합니다.
- prod.tfvars
- dev.tfvars
- staging.tfvars
# prod.tfvars
vpc_name = "prod"
# dev.tfvars
vpc_name = "dev"
# staging.tfvars
vpc_name = "staging"
2. workspace 생성 - prod, dev, staging
# terraform workspace new [환경 이름]
terraform workspace new prod
terraform workspace list
default
dev
* prod
staging
3. 각 환경 설정 및 실행
환경에 맞게 워크스페이스를 선택한 후, 해당 환경의 변수 파일을 사용하여 테라폼을 실행합니다.
dev 환경 설정: select workspace && tf apply
terraform workspace select dev
Switched to workspace "dev".
tf apply -var-file=dev.tfvars
>>>
# 중략
Do you want to perform these actions in workspace "dev"?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
staging 환경 설정: select workspace && tf apply
terraform workspace select staging
Switched to workspace "staging".
tf apply -var-file=staging.tfvars
Do you want to perform these actions in workspace "staging"?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
prod 환경 설정: select workspace && tf apply
terraform workspace select prod
Switched to workspace "prod".
tf apply -var-file=prod.tfvars
Do you want to perform these actions in workspace "prod"?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
결과 확인: AWS 콘솔
AWS 콘솔을 통해 각 환경별로 생성된 VPC를 확인할 수 있습니다.
참고
https://developer.hashicorp.com/terraform/language/state/workspaces
'IaC > Terraform' 카테고리의 다른 글
[Terraform]테라폼 Input Variables 사용법 (0) | 2023.02.07 |
---|---|
[Terraform]AWS Provider로 Ubuntu AWS EC2 Instance 만들기 (0) | 2023.02.05 |
[Terraform]테라폼 기본 사용법 with aws provider (0) | 2023.02.01 |
[Terraform]테라폼 기본 사용법 with local provider (0) | 2023.01.24 |
[Terraform]Install Terraform on Mac M1 (0) | 2023.01.23 |