Terraform 기초: State

2024. 11. 21. 20:56·탐구 생활/Terraform

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
'탐구 생활/Terraform' 카테고리의 다른 글
  • Terraform 기초: 리소스 생명 주기 및 데이터 소스 관리하기
  • Terraform 기초: commands
  • Terraform 기초: depends_on, output
  • Terraform 기초: HCL 기본기
개발프로브
개발프로브
가볍게, 오랫동안 기록하고 싶은 블로그입니다.
  • 개발프로브
    ProbeHub
    개발프로브
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • 탐구 생활 (47)
        • 개발 탐구 (8)
        • FastAPI CORS (3)
        • FastAPI Log (4)
        • gRPC&Python (4)
        • SpringBoot 파헤치기 (2)
        • Python Monorepo (3)
        • Python 과 zstd (2)
        • Python (4)
        • FastAPI (4)
        • Terraform (8)
        • MSA (0)
        • GraphQL (2)
        • 데이터베이스 (2)
        • 네트워크 (0)
      • 기초 지식 (9)
        • Terraform (2)
        • MSA (5)
        • K8s (2)
  • 블로그 메뉴

    • 링크

      • github
      • stackoverflow
    • 공지사항

    • 인기 글

    • 태그

      django 성능 개선
      Python
      rest vs grpc
      granian
      fastapi logging
      python graviton
      python 불변 객체
      PostgreSQL
      ORM 성능
      sqlalchemy
      gzip
      FastAPI
      python amd64
      springboot
      brotli
      티스토리챌린지
      오블완
      백엔드 성능
      java
      ORM 성능 최적화
      ORM 문제
      fastapi cors
      spring 트랜잭션
      grpc
      MSA
      Terraform
      RDBMS 성능 최적화
      python arn64
      zstd
      python 성능 개선
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    개발프로브
    Terraform 기초: State
    상단으로

    티스토리툴바