Terraform Associate — Terraform State Management 개념 정리
개념(한글) + 시험용 영어 표현 매칭
대응 objective: Objective 6 (Terraform State Management)
State 기본 개념
- State는 Terraform이 관리하는 실제 인프라와 구성 파일을 매핑한 기록
- 기본 파일명
terraform.tfstate (JSON), 어디에 저장할지는 backend가 결정
- state에는 민감 정보가 포함될 수 있어 보안·잠금 관리가 중요
| 개념 | 영어 표현 |
|---|
| 상태 파일 | state file (terraform.tfstate) |
| state 저장 위치 결정 | backend |
| 실제 인프라 ↔ 구성 매핑 | maps real resources to configuration |
6a. 로컬 백엔드 (Describe the local backend)
Local Backend
- 기본(default) 백엔드로, 별도 설정이 없으면 자동 사용
- state를 작업 디렉토리 내
terraform.tfstate 파일로 로컬에 저장
- 혼자 작업할 때는 편하지만, 팀 협업엔 부적합 (공유·잠금 어려움)
| 개념 | 영어 표현 |
|---|
| 기본 백엔드 | local backend (default) |
| 로컬 파일 저장 | stores state on local disk |
| 협업 한계 | not suitable for team collaboration |
6b. State 잠금 (Describe state locking)
State Locking
- 여러 사람이 동시에 state를 수정하면 손상될 수 있음 → 이를 막는 장치
apply 등 state를 쓰는 작업 시 자동으로 잠금(lock), 끝나면 해제
- 로컬 백엔드도 잠금을 지원, 원격 백엔드는 백엔드별로 잠금 메커니즘 제공 (예: S3 + DynamoDB)
- 문제 상황에서 강제 해제:
terraform force-unlock
| 개념 | 영어 표현 |
|---|
| 상태 잠금 | state locking |
| 동시 수정 방지 | prevents concurrent state operations |
| 자동 잠금·해제 | automatically locks during operations |
| 강제 해제 | terraform force-unlock |
| S3 백엔드 잠금 | DynamoDB (lock table) |
6c. backend 블록으로 원격 state 구성 (Configure remote state)
Remote Backend
- state를 원격 저장소에 두어 팀 공유·보안·잠금을 확보
terraform 블록 안 backend 블록으로 설정
- 예: S3, Terraform Cloud/Enterprise, Azure Blob, GCS, Consul 등
- 백엔드 설정을 바꾸면
terraform init 시 state 마이그레이션 여부를 물음
| 개념 | 영어 표현 |
|---|
| 원격 백엔드 | remote backend |
| 백엔드 설정 블록 | backend block |
| 팀 공유·보안 | shared state, security, locking |
| 초기화 시 마이그레이션 | state migration on terraform init |
Remote State의 장점
- 여러 팀원이 동일한 state 공유
- state 잠금으로 충돌 방지
- 민감한 state를 로컬에 두지 않아 보안 향상
6d. 리소스 드리프트 및 state 관리 (Manage resource drift and state)
Drift (드리프트)
- Terraform 밖에서 인프라가 변경되어 state와 실제가 어긋난 상태
terraform plan / terraform apply -refresh-only로 실제 상태를 감지·반영
| 개념 | 영어 표현 |
|---|
| 드리프트 | (configuration) drift |
| 실제 상태 갱신 | refresh (terraform apply -refresh-only) |
| 드리프트 감지 | detect drift via plan |
State 조작 명령 (State manipulation)
| 명령 | 역할 |
|---|
| terraform state list | state 내 리소스 목록 조회 |
| terraform state show | 특정 리소스 상세 조회 |
| terraform state mv | state 내 리소스 이름/위치 이동 |
| terraform state rm | state에서 리소스 제거 (실제 인프라는 유지) |
| terraform import | 기존 인프라를 state로 가져오기 |
| terraform taint / -replace | 리소스를 재생성 대상으로 표시 |
| 개념 | 영어 표현 |
|---|
| state 목록 | terraform state list |
| state에서 제거(인프라 유지) | terraform state rm |
| 기존 자원 가져오기 | terraform import |
| 강제 재생성 | terraform apply -replace= |
요약
| 주제 | 내용 |
|---|
| local backend | 기본 백엔드, terraform.tfstate 로컬 저장, 협업 부적합 |
| state locking | 동시 수정 방지, 자동 잠금/해제, 강제 해제 force-unlock |
| remote backend | backend 블록으로 S3·Terraform Cloud 등에 저장 → 공유·보안·잠금 |
| S3 잠금 | DynamoDB lock table |
| drift | 외부 변경으로 어긋남 → plan / -refresh-only로 감지 |
| state 명령 | list / show / mv / rm / import / -replace |