Terraform은 기본적으로 로컬에 terraform.tfstate 파일을 저장한다.
하지만 팀 단위로 협업하거나, 인프라 규모가 커지면 로컬 저장 방식은 한계가 있다.
| 문제점 | 설명 |
|---|---|
| 충돌 위험 | 여러 명이 동시에 인프라 변경 시 State 파일 충돌 발생 가능 |
| 복구 어려움 | 로컬 디스크 장애 시 State 파일 복구 불가 |
| 관리 불편 | 버전 관리, 백업, 접근 통제가 어렵다 |
그래서 Remote Backend를 설정해
State 파일을 클라우드 저장소에 안전하게 보관하고,
동시에 Lock을 걸어 충돌 방지하는 것이 필수적이다.
Remote Backend는
State 파일을 S3, GCS, Azure Storage 같은 클라우드 저장소에 저장하고,
여러 사용자가 공유하고 충돌 없이 작업할 수 있도록 하는 시스템입니다.
aws s3api create-bucket --bucket my-terraform-state-bucket --region ap-northeast-2
aws s3api put-bucket-versioning --bucket my-terraform-state-bucket --versioning-configuration Status=Enabled
또는 Terraform으로 인프라를 코드로 관리할 수도 있다.
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
이 테이블이 작업 중 다른 사용자의 Apply를 막아준다.
terraform {
backend "s3" {
bucket = "my-terraform-state-bucket"
key = "global/s3/terraform.tfstate"
region = "ap-northeast-2"
encrypt = true
dynamodb_table = "terraform-lock"
}
}
| 항목 | 역할 |
|---|---|
| S3 버킷 | State 파일 저장소 |
| S3 버킷 Versioning | State 파일 버전 관리/복구용 |
| DynamoDB 테이블 | Terraform 작업 락 관리 |
| encrypt=true | S3 저장 데이터 암호화 |
Remote Backend를 설정하면 기본적으로 락 기능이 활성화되지만,
협업 상황에서는 몇 가지 추가 주의사항이 필요하다.
Error acquiring the state lock
terraform force-unlock LOCK_ID
| 항목 | 설명 |
|---|---|
| S3 버킷 | 중앙 State 저장소 |
| DynamoDB 테이블 | 충돌 방지 락 관리 |
| Versioning 활성화 | State 백업과 복구 지원 |
| IAM 권한 제어 | 특정 사용자/Role만 접근 허용 |
| terraform init 필수 | 항상 최신 Backend 정보 로드 |
Remote Backend는 팀 협업을 위해 필수이며, S3 + DynamoDB 조합으로 안전한 State 관리와 충돌 방지를 구현할 수 있다.