원격 State
원격 State (Remote State)
기본적으로 테라포은 state를 terraform.tfstate라는 이름의 로컬 파일에 저장해요. 팀에서 테라폼을 사용할 때는 로컬 파일을 사용하면 테라폼 사용이 복잡해져요. 각 사용자가 테라폼을 실행하기 전에 항상 최신 state 데이터를 갖고 있는지 확인해야 하고, 동시에 다른 사람이 테라폼을 실행하지 않도록 해야 하기 때문이에요.
출처: 문서
본문
원격(remote) state를 사용하면 테라폼이 state 데이터를 원격 데이터 저장소에 쓰고, 팀의 모든 구성원이 이를 공유할 수 있어요. 테라폼은 HCP Terraform, HashiCorp Consul, Amazon S3, Azure Blob Storage, Google Cloud Storage, Alibaba Cloud OSS 등을 포함한 여러 곳에 state 저장을 지원해요.
원격 state는 백엔드(backend)나 HCP Terraform에 의해 구현돼요. 둘 다 구성의 루트 모듈에서 설정할 수 있어요.
위임과 팀워크 (Delegation and Teamwork)
원격 state를 사용하면 출력 값(output values)을 다른 구성과 공유할 수 있어요. 이를 통해 인프라를 더 작은 구성 요소로 분해할 수 있어요.
다시 말해, 원격 state는 추가적인 구성 저장소에 의존하지 않고도 팀이 인프라 리소스를 읽기 전용으로 공유할 수 있게 해줘요.
예를 들어 핵심 인프라 팀이 핵심 머신, 네트워킹 등을 구축하면서 일부 정보를 다른 팀이 자신의 인프라를 운영하도록 노출할 수 있어요. AWS의 구체적인 예를 들면, VPC ID, 서브넷, NAT 인스턴스 ID 같은 것들을 원격 state를 통해 노출하고 다른 테라폼 state가 그것을 소비하게 할 수 있어요.
사용 예시는 the terraform_remote_state data source를 참고하세요.
원격 state가 구성 간 데이터 공유를 위한 편리하고 내장된 메커니즘이기는 하지만, 설정을 다른 구성뿐 아니라 다른 소비자에게도 전달하기 위해 더 일반적인 저장소를 선호할 수도 있어요. 예를 들어 환경에 HashiCorp Consul이 있다면, 한 테라폼 구성이 consul_key_prefix로 Consul에 쓰고, 다른 구성이 the consul_keys data source로 그 값들을 소비하게 할 수 있어요.
잠금과 팀워크 (Locking and Teamwork)
완전한 기능을 갖춘 원격 백엔드의 경우 테라폼은 state 잠금을 사용해서 동일한 state에 대한 테라폼의 동시 실행을 방지할 수도 있어요.
HashiCorp의 HCP Terraform은 더 강력한 잠금 개념을 지원하는 상용 제품이에요. 승인을 기다리는 기존 plan이 있을 때 새 plan을 만들려는 시도를 감지할 수 있고, 테라폼 작업을 중앙 위치에 큐잉(queueing)해서 처리해요. 이렇게 하면 팀이 인프라 변경에 대해 더 쉽게 조정하고 소통할 수 있어요.
더 알아보기 (Learn more)
- State 백엔드 — state 저장과 잠금을 담당하는 백엔드.
- State 잠금 — 동시 실행 방지 메커니즘.
terraform_remote_statedata source — 다른 구성의 원격 state 읽기.