본문 바로가기

Terraform

[Terraform] Terraform Workspace

이번 시간에는 Terraform Worksapce에 대해서 알아보겠습니다.

Terraform Worksapce


Workspace란 State 관리하는 논리적인 가상 공간 워크스페이스라고 합니다.

 

출처 : https://kschoi728.tistory.com/136

테라폼 구성 파일은 동일하지만 작업자는 서로 다른 State를 갖는 실제 대상을 프로비저닝할 수 있습니다.

워크스페이스는 기본 default로 정의되고 로컬 작업 환경의 워크스페이스 관리를 위한 CLI 명령어로 workspace가 있다.

terraform workspace list
* default

 

환경을 격리하는 방법

환경을 격리하는 방법은 2가지가 있습니다.

  1. 작업 공간을 통한 격리 
    • 동일한 구성에서 빠르고 격리된 테스트 환경에 유용
  2. 파일 레이아웃을 이용한 격리 
    • 보다 강력하게 분리해야 하는 운영 환경에 적합
    • 테라폼 프로젝트의 파일 레이아웃 설명
      • 각 테라폼 구성 파일을 분리된 폴더에 넣기. (예. stage , prod)
      • 각 환경에 서로 다른 백엔드 구성. (예. S3 버킷 백엔드의 AWS 계정을 분리)
---dev
 |  |
 |	|-- vpc
 |	|	|-- vpc.tf
 |	|	|-- outputs.tf
 |	|	|-- variables.tf
 |	|	
 |	|-- db
 |	|	|--mysql.tf
 |
 |--stage
 |  |
 |	|-- vpc
 |	|	
 |	|-- db
 |
 |--prd
 |  |
 |	|-- vpc
 |	|	
 |	|-- db
 |
 |--common
 |	|
 |	|-- iam
 |	|-- s3
  • 최상위 폴더
    • dev : 개발 환경
    • stage : 테스트 환경과 같은 사전 프로덕션 워크로드 workload 환경
    • prod : 사용자용 맵 같은 프로덕션 워크로드 환경
    • common: S3, IAM과 같이 모든 환경에서 사용되는 리소스를 배치

각 환경별 구성 요소

  • vpc : 해당 환경을 위한 네트워크 토폴로지
  • db: 해당 환경 별 데이터 저장소. 각 데이터 저장소 역시 자체 폴더에 위치하여 다른 데이터 저장소와 분리

명명 규칙 naming conventions (예시)

  • varialbes.tf : 입력 변수
  • outputs.tf : 출력 변수

 

 Workspce 사용 장점

  • 하나의 루트 모듈에서 다른 환경을 위한 resource 를 동일한 구성으로 프로비저닝 관리를 합니다.
  • 기존 프로비저닝 환경에 영향을 주지 않고 변경 사항 실험이 가능합니다.
  • git 의 branch 전략처럼 동일한 구성에서 서로 다른 resource 결과 관리를 할 수 있습니다.

Workspce 사용 단점

  • State 가 동일한 저장소에 저장되어  State 접근 권한 관리 불가능합니다.
  • 모든 환경이 동일한 resource 를 요구하지 않을 수 있기에 분기 처리가 다수 발생 할 수 있습니다.
  • 프로비저닝 대상에 대한 인증 요소를 분리하기 어려우며 이를 해결 하기 위해 루트 모듈을 별도로 구성하는 폴더 기반의 레이아웃을 사용 할 수 있다.
  • 완벽한 격리가 불가능합니다.