Terraform 상태(State) 관리

Terraform 상태(State) 관리

1️⃣ Terraform 상태 파일(terraform.tfstate) 개념

1 Terraform 상태란?

Terraform은 실제 인프라의 현재 상태를 기억해야 하기 때문에 terraform.tfstate라는 파일에 상태를 저장합니다.
이 파일은 Terraform이 무엇이 생성되었고, 어떤 값이 할당되었는지 추적합니다.

📁 예시 구조:

{
  "resources": [
    {
      "type": "aws_instance",
      "name": "example",
      "instances": [
        {
          "attributes": {
            "id": "i-0abcdef1234567890",
            "instance_type": "t2.micro",
            ...
          }
        }
      ]
    }
  ]
}

Terraform은 이 상태 파일을 기준으로 변경 사항을 계산합니다 (plan, apply).


2️⃣ terraform refresh를 통한 상태 동기화

1 terraform refresh란?

terraform refresh 명령어는 현재 인프라 상태를 클라우드에서 다시 조회하여 .tfstate 파일을 동기화합니다.

📌 예를 들어, 콘솔에서 EC2 인스턴스를 삭제한 경우:

terraform refresh

🔁 상태 파일과 실제 인프라 상태가 일치하도록 조정됩니다.

단, refresh 명령은 Terraform 1.1부터는 terraform apply 시 자동 포함되어 더 이상 자주 사용되지 않습니다.


3️⃣ 로컬 상태 저장 vs 원격(백엔드) 상태 저장

1 로컬 상태 저장 (기본)

  • 상태 파일이 현재 디렉터리에 저장됨
  • 예시: terraform.tfstate, .terraform/ 폴더
  • 팀 작업 시 충돌 위험이 있음 ⚠️

2 원격 상태 저장 (Backend)

  • S3, Azure Blob, GCS, Consul 등에 저장
  • Terraform 팀 작업의 표준 방식
  • 자동으로 잠금(Locking) 기능 지원 가능

📦 예시 - AWS S3 백엔드 설정

terraform {
  backend "s3" {
    bucket = "my-terraform-state"
    key    = "dev/terraform.tfstate"
    region = "ap-northeast-2"
    dynamodb_table = "terraform-lock"
  }
}

4️⃣ 상태 파일 잠금(Locking)과 충돌 방지

1 잠금(Locking)이란?

여러 사용자가 동시에 상태 파일을 변경하면 충돌이 발생할 수 있습니다.
이를 방지하기 위해 Terraform은 작업 중에 상태 파일을 잠금(Lock) 합니다.

✅ 백엔드에서 지원하는 잠금 예:

  • AWS DynamoDB
  • Terraform Cloud
  • HashiCorp Consul

📌 잠금이 작동하지 않으면, 상태 손상이 발생할 수 있습니다.


5️⃣ 상태 파일 보안 및 백업 전략

1 보안 위험

상태 파일에는 민감한 정보(비밀번호, 키 등) 이 저장될 수 있습니다.

🔐 상태 파일 예시:

"password": "super-secret-password"

2 보안 및 백업 전략

  • Git 등에 절대 커밋하지 않기 (.gitignore)
  • 백엔드 사용 시 버전 관리 및 암호화 활용
  • 상태 파일 자동 백업 설정 (S3 버전 관리 등)
  • 민감한 데이터는 sensitive = true로 마스킹
output "db_password" {
  value     = var.db_password
  sensitive = true
}

🎯 정리

항목 설명
상태 파일 (.tfstate) 인프라의 현재 상태 저장
terraform refresh 실제 인프라와 상태 동기화
로컬 상태 단일 사용자에 적합
원격 상태 (Backend) 협업에 필수, 잠금 기능 포함
상태 파일 보안 민감 정보 포함, 백업/암호화 필요

RSS Feed
마지막 수정일자