
Terraform를 사용할 때 중요한 개념 중 하나는 State 이다. 이번 글에서는 Terraform의 State의 역할과 중요성, 그리고 실무에서의 활용 방안에 대해 살펴보겠다.
Terraform State란 무엇인가?
Terraform의 State 파일은 리소스 구성과 실제 인프라 간의 매핑 정보를 저장하는 역할을 한다. 이는 Terraform이 실행 계획을 생성하고, 구성 파일과 실제 인프라 간의 불일치(Drift)를 식별하는 데 사용된다. 쉽게 말해, Terraform State 파일은 실제 세상에 존재하는 모든 리소스의 청사진(blueprint)이라고 볼 수 있다.
이러한 State 는 terraform apply 가 되는순간 terraform.tfstate
파일에 json 형태로 저장이 된다.
Terraform State의 주요 역할
1. 리소스 매핑 및 의존성 관리
Terraform 은 리소스를 생성할 때 해당 리소스의 ID를 State에 기록한다. 이 ID는 로컬 파일 리소스, 클라우드 리소스, 또는 논리적 리소스와 같은 모든 리소스를 유일하게 식별할 수 있는 값이다.
뿐만 아니라, State는 리소스 간의 의존성 정보를 포함하고 있다. 예를 들어:
resource "random_pet" "my_pet" {
prefix = "Mrs"
separator = "."
length = 1
}
resource "local_file" "pet" {
content = random_pet.my_pet.id
filename = "pet_name.txt"
}
위 구성에서 local_file.pet
은 random_pet.my_pet
에 의존한다. 따라서 random_pet
이 생성된 이후에만 local_file
이 생성된다.
2. 삭제 순서 제어
Terraform에서 리소스를 삭제할 때도 State 파일의 의존성 정보가 중요하다. 예를 들어, 위의 예제에서 random_pet
과 local_file
을 모두 삭제한다고 가정해보자. Terraform은 State 파일에 기록된 의존성 정보를 기반으로 local_file
을 먼저 삭제한 후 random_pet
을 삭제한다.
3. 성능 최적화
Terraform은 수백 개의 리소스를 관리할 수 있으며, 이 중 일부는 여러 클라우드 제공업체에 분산될 수 있다. 매번 모든 리소스 상태를 확인하려면 많은 시간이 소요된다.
Terraform State는 이러한 리소스 상태를 캐시로 저장하여 실행 속도를 대폭 개선하는 역할을 수행한다. 예를 들어, -refresh=false 플래그를 사용하면 Terraform은 State 파일만 참조하고 실시간 상태 갱신을 건너뛰게 된다.
terraform plan -refresh=false
4. 협업 지원
개인 프로젝트에서는 로컬 State 파일(terraform.tfstate)을 사용하는 것이 문제없을 것이다. 하지만 팀 협업 환경에서는 로컬 State 파일 사용이 비효율적이며 예측 불가능한 에러를 초래할 수 있다.
따라서 Remote State를 사용하는 것이 권장된다. Remote State는 State 파일을 원격 저장소에 저장함으로써 팀원들이 항상 최신 상태를 공유할 수 있도록 한다.
Terraform에서 지원하는 Remote State 백엔드의 예는 다음과 같다:
- AWS S3
- Google Cloud Storage
- Azure Blob Storage
- Terraform Cloud
Terraform State의 보안 고려사항
Terraform State 파일은 JSON 형식으로 저장되며, 모든 리소스 속성 값이 포함된다. 여기에는 다음과 같은 민감 정보도 포함될 수 있다:
- 클라우드 리소스의 IP 주소
- SSH 키
- 데이터베이스 초기 비밀번호
따라서 로컬 State 파일은 항상 안전한 스토리지에 저장해야 하며, 민감한 데이터가 유출되지 않도록 주의해야 한다.
Git 저장소에 State 파일을 저장하지 말 것
Terraform 구성 파일은 Git과 같은 분산 버전 관리 시스템에 저장하는 것이 일반적이다. 하지만 State 파일은 예외다. 민감한 정보를 포함하고 있으므로, State 파일은 반드시 원격 백엔드에 저장해야 한다.
Terraform State 수정 주의사항
State 파일은 Terraform의 내부 용도로 설계되었으며, 직접 수정해서는 안 된다. 수정이 필요한 경우 terraform state 명령어를 사용해야 한다.
'탐구 생활 > Terraform' 카테고리의 다른 글
Terraform 기초: 리소스 생명 주기 및 데이터 소스 관리하기 (0) | 2024.11.22 |
---|---|
Terraform 기초: commands (0) | 2024.11.21 |
Terraform 기초: depends_on, output (0) | 2024.11.19 |
Terraform 기초: HCL 기본기 (0) | 2024.11.17 |
Terraform 소개 (0) | 2024.11.17 |