워크스페이스 관리 개요
워크스페이스 관리 개요 (Manage Workspaces Overview)
Terraform CLI의 워크스페이스(workspace)는 같은 Terraform 작업 디렉터리 안에 있는 별도의 상태 데이터(state data) 인스턴스를 가리켜요. 이는 각각 자체 Terraform 구성을 갖고 별도의 작업 디렉터리처럼 동작하는 HCP Terraform의 워크스페이스와는 분명히 달라요.
출처: 문서
본문
Terraform은 상태 정보에 의존해 리소스를 실제 세계의 객체와 연결해요. 같은 구성을 별도의 상태 데이터로 여러 번 실행하면 Terraform은 서로 겹치지 않는 여러 리소스 집합을 관리할 수 있어요.
워크스페이스는 특정 사용 사례에 유용할 수 있지만, Terraform CLI를 사용하는 데 꼭 필요한 것은 아니에요. 별도의 자격 증명과 접근 제어가 필요한 복잡한 배포에는 워크스페이스 대안을 권장해요.
CLI 워크스페이스 관리하기 (Managing CLI Workspaces)
초기화된 모든 작업 디렉터리는 default라는 이름의 워크스페이스 하나로 시작해요.
terraform workspace list, terraform workspace new, terraform workspace delete 명령으로 현재 작업 디렉터리에서 사용 가능한 워크스페이스를 관리해요.
terraform workspace select 명령으로 현재 선택된 워크스페이스를 바꿔요. 주어진 작업 디렉터리에서는 한 번에 하나의 워크스페이스만 선택할 수 있어요. 대부분의 Terraform 명령은 현재 선택된 워크스페이스하고만 상호작용해요. 여기에는 프로비저닝과 상태 조작이 포함돼요.
각 워크스페이스에서 인프라스트럭처를 프로비저닝할 때는 보통 각 묶음을 구분하기 위해 서로 다른 입력 변수를 수동으로 지정해야 해요. 예를 들어 테스트 인프라를 다른 리전에 배포할 수 있어요.
사용 사례 (Use Cases)
작업 디렉터리를 여러 개 만들어 완전히 별도의 상태 데이터를 가진 구성 인스턴스를 여러 개 유지할 수도 있어요. 하지만 Terraform은 작업 디렉터리마다 플러그인과 모듈의 별도 캐시를 설치하므로, 디렉터리를 여러 개 유지하면 대역폭과 디스크 공간이 낭비될 수 있어요. 이 방식은 각 디렉터리를 버전 관리에서 별도로 갱신하고 구성이 바뀔 때마다 각 디렉터리를 다시 초기화하는 등 추가 작업도 필요해요. 워크스페이스는 같은 구성의 작업 복사본과 같은 플러그인·모듈 캐시를 사용하면서 다른 인프라스트럭처 집합을 만들 수 있어서 편리해요.
여러 워크스페이스를 사용하는 흔한 용도는 프로덕션 인프라를 수정하기 전에 변경 사항을 테스트할 수 있도록 인프라스트럭처 집합의 병렬적이고 구별되는 복사본을 만드는 거예요.
비 기본(non-default) 워크스페이스는 버전 관리의 기능 브랜치와 연관되는 경우가 많아요. 기본 워크스페이스는 프로덕션 인프라의 의도된 상태를 나타내는 main 또는 trunk 브랜치에 해당할 수 있어요. 개발자가 변경을 위해 기능 브랜치를 만들면, 그에 대응하는 워크스페이스를 만들고 그 안에 기본 인프라의 임시 복사본을 배포하기도 해요. 그런 다음 복사본에서 변경 사항을 프로덕션 인프라에 영향 주지 않고 테스트할 수 있어요. 변경 사항이 병합되어 기본 워크스페이스에 배포되면, 테스트 인프라를 파괴하고 임시 워크스페이스를 삭제해요.
여러 워크스페이스를 사용하면 안 되는 경우 (When Not to Use Multiple Workspaces)
워크스페이스는 단일 백엔드 안에서 단일 구성의 여러 인스턴스 사이를 빠르게 전환하게 해줘요. 모든 문제를 해결하도록 설계되지는 않았어요.
Terraform으로 더 큰 시스템을 관리할 때는 시스템 내의 아키텍처 경계에 대응하는 별도의 Terraform 구성을 만들어야 해요. 이렇게 하면 팀이 서로 다른 구성 요소를 개별적으로 관리할 수 있어요. 각 하위 시스템은 자체 별도 구성과 백엔드를 가져야 하므로, 워크스페이스만으로 시스템을 분해하는 것은 적절하지 않아요.
특히 조직들은 서로 다른 개발 단계나 서로 다른 내부 팀을 제공하는 같은 인프라의 여러 배포 사이에 강한 분리를 원하는 경우가 많아요. 이 경우 각 배포의 백엔드는 종종 다른 자격 증명과 접근 제어를 가져요. 작업 디렉터리 안의 CLI 워크스페이스는 같은 백엔드를 사용하므로, 이런 시나리오에 적합한 격리 메커니즘이 아니에요.
워크스페이스 대안 (Alternatives to Workspaces)
CLI 워크스페이스를 만드는 대신, 공통 요소를 나타내는 재사용 가능한 모듈을 하나 이상 사용하고, 각 인스턴스를 서로 다른 백엔드의 맥락에서 공통 요소를 인스턴스화하는 별도의 구성으로 표현할 수 있어요. 각 구성의 루트 모듈은 백엔드 구성과, 배포 사이의 작은 차이를 설명하는 인자를 가진 소수의 module 블록으로만 구성돼요.
여러 구성이 여러 배포가 아니라 서로 다른 시스템 구성 요소를 나타낼 때는, 쌍을 이루는 리소스 타입과 데이터 소스로 한 구성 요소에서 다른 구성 요소로 데이터를 전달할 수 있어요.
- 공유 Consul 클러스터를 사용할 수 있다면,
consul_key_prefix로 키/값 저장소에 게시하고 다른 구성에서consul_keys로 그 값을 가져와요. - 사용자 정의 라벨이나 태그를 지원하는 시스템에서는 태그 규칙을 사용해 리소스를 자동으로 발견 가능하게 만들어요. 예를 들어 the
aws_vpcresource type으로 적절한 태그를 할당하고, 다른 구성에서 theaws_vpc데이터 소스로 그 태그로 조회해요. - 서버 주소의 경우 프로바이더별 리소스로 예측 가능한 이름의 DNS 레코드를 만들어요. 그런 다음 그 이름을 직접 사용하거나 the
dns프로바이더로 다른 구성에서 게시된 주소를 가져올 수 있어요. - 한 구성의 Terraform 상태를 다른 구성이 접근할 수 있는 원격 백엔드에 저장한다면, 다른 구성은
terraform_remote_state로 그 루트 모듈 출력을 직접 소비할 수 있어요. 이 설정은 구성 사이의 결합을 더 강하게 만들지만, 루트 구성은 별개의 시스템에 결과를 게시할 필요가 없어요.
HCP Terraform 워크스페이스와의 상호작용 (Interactions with HCP Terraform Workspaces)
HCP Terraform은 워크스페이스로 인프라스트럭처를 정리하지만, 그 워크스페이스는 완전히 별개의 작업 디렉터리처럼 동작해요. 각 HCP Terraform 워크스페이스는 자체 Terraform 구성, 변수 값 집합, 상태 데이터, 실행 기록, 그리고 설정을 가져요.
Terraform CLI를 HCP Terraform과 통합하면 현재 CLI 작업 디렉터리를 하나 이상의 원격 HCP Terraform 워크스페이스와 연결할 수 있어요. 그런 다음 terraform workspace 명령으로 각 실행에 사용할 원격 워크스페이스를 선택해요.
자세한 내용은 HCP Terraform 문서의 CLI 기반 실행을 참고하세요.
워크스페이스 내부 구조 (Workspace Internals)
워크스페이스는 기술적으로 상태 파일 이름을 바꾸는 것과 같아요. Terraform은 여기에 여러 보호 기능과 원격 상태 지원을 포함해요.
워크스페이스는 공유 리소스로도 의도돼요. 순수 로컬 상태를 사용하고 상태를 버전 관리에 커밋하지 않지 않는 한, 워크스페이스는 비공개가 아니에요.
로컬 상태의 경우 Terraform은 워크스페이스 상태를 terraform.tfstate.d라는 디렉터리에 저장해요. 이 디렉터리는 로컬 전용 terraform.tfstate와 비슷하게 취급해야 해요. 일부 팀은 이 파일들을 버전 관리에 커밋하지만, 협력자가 여러 명일 때는 원격 백엔드를 사용할 것을 권장해요.
원격 상태의 경우 워크스페이스는 구성된 백엔드에 직접 저장돼요. 예를 들어 Consul을 사용하면 상태 경로에 워크스페이스 이름을 덧붙여 저장돼요. 모든 백엔드에서 워크스페이스 이름이 올바르고 안전하게 저장되도록, 이름은 URL 경로 세그먼트에서 이스케이프 없이 사용할 수 있어야 해요.
Terraform은 현재 워크스페이스 이름을 무시되는 .terraform 디렉터리에 로컬로 저장해요. 덕분에 여러 팀 구성원이 서로 다른 워크스페이스에서 동시에 작업할 수 있어요. 워크스페이스 이름은 HCP Terraform의 관련 원격 워크스페이스에도 연결돼요. HCP Terraform에서 워크스페이스 이름에 대한 자세한 내용은 CLI 통합(권장)과 원격 백엔드 문서를 참고하세요.
더 알아보기 (Learn more)
terraform workspace명령 — 워크스페이스 명령어- 상태 관리 — 상태 데이터 이해
- HCP Terraform 워크스페이스