[Terraform] terraform state에 대해 알아보자
Terraform State
테라폼은 근본적으로 Stateful(상태가 있는) 어플리케이션이다. 프로비저닝 결과에 따른 State를 저장하고 프로비저닝한 모든 내용을 저장된 상태로 추적한다.
우리가 terraform apply명령어를 실행하면, terraform.tfstate 파일이 생성되어지는데, 로컬 실행환경은 JSON 형태로 저장이 되어지고, 팀 및 조직 환경에서의 실행환경에서는 S3와 같은 원격 저장소에 저장하여 공유하는 방식이 활용되어진다.
그렇다면, state 파일은 무엇이고 어떤 역할을 가졌을까?
Terraform State 파일이란?
Terraform State 파일은 Terraform가 관리하는 모든 리소스의 현재 상태를 저장하는 파일이다. Terraform은 상태 파일(terraform.tfstate)을 사용하여 리소스 구성과 실제 인프라 간의 매핑을 관리를 하는데, 이 매핑을 통해 리소스 구성 파일과 상태 간의 차이를 감지하고 실행 계획을 생성한다.
상태 파일은 실제 인프라의 모든 리소스에 대한 "청사진" 역할을 하며, 각 리소스에 고유 ID를 부여하여 식별한다. Terraform State는 인프라의 현재 상태에 대한 정보를 담고 있으며, 효율적인 리소스 관리와 팀 협업을 가능하게 하는 핵심 요소이다.
State 파일의 관리
조직적으로 관리하는 경우 여러 사용자가 state 파일에 접근해 변경하는 경우 충돌, 리소스 부정합성과 같은 문제가 발생할 수 있다. 그렇기에 이 state 파일의 형상관리를 중앙화된 저장소 등에 해주는 것이 필수적이다.
상태 파일을 Git과 같은 버전 관리 시스템에 포함하지 않는 것을 권장한다. 이유는 크게 2가지이다.
- 동시 작업에 의한 충돌을 방지하기 위한 적절한 대안이 없다. (원격 백엔드는 locking 기능 존재)
- 코드내에 ID/PW, API Key와 같은 접근정보를 포함되어지게 되는데 이러한 정보들이 레파지토리에 표시가 되어지면 보안 위험에 노출되어지게 된다.
그렇기에, 원격 백엔드를 통해 상태 파일의 버전을 관리하는 것을 권장한다.(참고) 무엇보다 locking 기능 활용을 통해 동시작업에 의한 충돌현상을 방지할 수 있다.
CSP(AWS, Azure, GCP)에서 제각각 테라폼 상태파일에 대한 원격 백엔드 솔루션을 제공해준다. AWS 경우, S3 + DynamoDB 활용을 통해 state 파일을 관리할 수 있다. (참고)
댓글