Terraform - State(Backend/Remote State)

김재근·2025년 4월 28일

IaC

목록 보기
7/7
post-thumbnail

왜 Remote Backend가 필요한가?

Terraform은 기본적으로 로컬에 terraform.tfstate 파일을 저장한다.
하지만 팀 단위로 협업하거나, 인프라 규모가 커지면 로컬 저장 방식은 한계가 있다.

문제점설명
충돌 위험여러 명이 동시에 인프라 변경 시 State 파일 충돌 발생 가능
복구 어려움로컬 디스크 장애 시 State 파일 복구 불가
관리 불편버전 관리, 백업, 접근 통제가 어렵다

그래서 Remote Backend를 설정해
State 파일을 클라우드 저장소에 안전하게 보관하고,
동시에 Lock을 걸어 충돌 방지하는 것이 필수적이다.


Remote Backend란?

Remote Backend는
State 파일을 S3, GCS, Azure Storage 같은 클라우드 저장소에 저장하고,
여러 사용자가 공유하고 충돌 없이 작업할 수 있도록 하는 시스템입니다.

  • S3: State 파일 저장
  • DynamoDB: 작업 락 관리

S3 + DynamoDB를 활용한 Remote Backend 설정 방법

1. S3 버킷 생성 (State 저장용)

aws s3api create-bucket --bucket my-terraform-state-bucket --region ap-northeast-2
  • 버전 관리 활성화 (State 파일 복구 가능)
aws s3api put-bucket-versioning --bucket my-terraform-state-bucket --versioning-configuration Status=Enabled

또는 Terraform으로 인프라를 코드로 관리할 수도 있다.

2. DynamoDB 테이블 생성 (Lock 관리용)

aws dynamodb create-table \
  --table-name terraform-lock \
  --attribute-definitions AttributeName=LockID,AttributeType=S \
  --key-schema AttributeName=LockID,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST
  • 테이블 이름은 terraform-lock
  • Primary Key는 LockID 문자열(String) 타입

이 테이블이 작업 중 다른 사용자의 Apply를 막아준다.

3. Terraform backend 설정 추가

  • provider 선언 전에 다음 코드를 추가한다.
terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "global/s3/terraform.tfstate"
    region         = "ap-northeast-2"
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}

4. terraform init 재실행

  • 이때 "backend 설정을 변경하려고 한다"고 나오면 승인해야 함.
  • 초기화되면 앞으로 terraform plan, terraform apply시, State 파일은 로컬이 아니라 S3에 저장된다.

Remote Backend 구성 요약

항목 역할
S3 버킷 State 파일 저장소
S3 버킷 Versioning State 파일 버전 관리/복구용
DynamoDB 테이블 Terraform 작업 락 관리
encrypt=true S3 저장 데이터 암호화

협업 시 State 충돌 방지 방법

Remote Backend를 설정하면 기본적으로 락 기능이 활성화되지만,
협업 상황에서는 몇 가지 추가 주의사항이 필요하다.

1. 항상 terraform init을 먼저 실행

  • Backend가 변경될 수 있으므로 항상 최신 설정을 로드해야 한다.

2. terraform plan → apply 순서 엄격 준수

  • Plan을 실행하고 결과를 확인한 후 바로 Apply해야 다른 사람 변경 사항을 덮어쓰지 않는다.

3. 락 에러 메시지 이해하기

  • 만약 누군가가 Apply 중이면, 다른 사람은 다음과 같은 에러가 발생한다.
  • 이 경우 대기하거나, 긴급 상황이 아니면 강제 해제하지 말아야 한다.
Error acquiring the state lock

4. 락 강제 해제는 신중하게

terraform force-unlock LOCK_ID
  • 정말 긴급한 경우에만 사용. 잘못하면 State가 깨질 수 있다.
항목 설명
S3 버킷 중앙 State 저장소
DynamoDB 테이블 충돌 방지 락 관리
Versioning 활성화 State 백업과 복구 지원
IAM 권한 제어 특정 사용자/Role만 접근 허용
terraform init 필수 항상 최신 Backend 정보 로드

Remote Backend는 팀 협업을 위해 필수이며, S3 + DynamoDB 조합으로 안전한 State 관리와 충돌 방지를 구현할 수 있다.

profile
FullStack + DevOps 개발자입니다.

0개의 댓글