1. Terraform 상태 파일(tfstate)이란 무엇인가요?
Terraform 상태 파일은 Terraform이 관리하는 인프라의 **'현재 상태에 대한 진실의 원천(Source of Truth)'**입니다. 이 JSON 형식의 파일은 Terraform 코드로 정의한 리소스가 실제 클라우드 환경에 어떻게 배포되었는지에 대한 모든 정보를 담고 있습니다.
주요 목적
- 리소스 매핑: 코드와 실제 클라우드 리소스를 연결합니다.
- 속성 저장: 배포된 리소스의 모든 속성(ID, IP 주소 등)을 기록합니다.
- 성능 최적화: `plan`/`apply` 시 API 호출을 최소화합니다.
- 의존성 관리: 리소스 간의 생성/파괴 순서를 관리합니다.
포함되는 정보
- 관리 대상 리소스 목록 (⚠️ 민감 정보 포함 가능)
- `outputs.tf`에 정의된 출력 값
- Terraform 및 프로바이더 버전 메타데이터
2. 왜 원격 상태(Remote State)를 사용해야 하나요?
상태 파일을 로컬에 저장하는 것은 개인 프로젝트에서는 가능하지만, 팀 협업 환경에서는 심각한 문제를 야기합니다. 원격 백엔드(Azure Blob Storage 등)를 사용하는 것은 이러한 문제를 해결하기 위한 필수적인 선택입니다.
👥협업 용이성
상태 파일을 중앙에서 공유하여 팀원 간의 작업 동기화를 보장합니다.
🔒상태 잠금 (Locking)
동시에 여러 사용자가 상태 파일을 수정하는 것을 방지하여 데이터 손상을 막습니다.
🛡️보안
민감 정보가 포함될 수 있는 상태 파일을 Git에서 분리하고, 저장/전송 시 암호화합니다.
💾내구성 및 신뢰성
클라우드 스토리지의 높은 내구성으로 로컬 디스크 손상이나 파일 유실 위험을 최소화합니다.
🔄버전 관리
상태 파일의 모든 변경 이력을 추적하고, 필요 시 이전 버전으로 롤백할 수 있습니다.
💰비용 효율성
저렴한 비용으로 강력하고 안정적인 원격 저장소 솔루션을 이용할 수 있습니다.
3. Azure Backend 설정 가이드
Terraform 상태 파일을 저장할 Azure Blob Storage 인프라를 준비하고, 코드에 백엔드 설정을 추가하는 과정입니다.
Step 1: 백엔드 인프라 준비 (Azure CLI)
상태 파일을 저장할 리소스 그룹, 스토리지 계정, 컨테이너를 생성합니다. 이 작업은 일반적으로 한 번만 수행합니다.
# PowerShell/Bash
$SHARED_STATE_RG="my-shared-tfstate-rg-001"
$SHARED_STATE_SA="mysharedstateunique0001" # 전역 고유 이름으로 변경
$CONTAINER_NAME="tfstate-web"
az group create --name $SHARED_STATE_RG --location "koreacentral"
az storage account create --name $SHARED_STATE_SA --resource-group $SHARED_STATE_RG --sku Standard_LRS
az storage container create --name $CONTAINER_NAME --account-name $SHARED_STATE_SA
⚠️ 중요: 생성된 스토리지 계정의 Azure Portal에서 [데이터 보호] → [Blob 버전 관리 사용]을 '켜기'로 설정하세요.
Step 2: Terraform 코드에 백엔드 설정 추가
`main.tf` 파일의 `terraform` 블록 내에 `backend` 설정을 추가합니다. `backend` 블록에서는 변수를 사용할 수 없으므로 실제 값을 직접 입력해야 합니다.
terraform {
backend "azurerm" {
resource_group_name = "my-shared-tfstate-rg-001"
storage_account_name = "mysharedstateunique0001"
container_name = "tfstate-web"
key = "web-server-project.tfstate"
}
}
Step 3: Terraform 초기화
백엔드 설정을 추가한 후, `terraform init` 명령을 실행하여 원격 백엔드를 초기화하고 연결합니다. 로컬에 상태 파일이 있다면 원격으로 마이그레이션할지 묻습니다.
terraform init
4. 문제 해결사 (Interactive Troubleshooter)
실습 중 발생했던 일반적인 오류와 해결 방법을 확인하세요. 오류 메시지를 클릭하면 상세 내용이 나타납니다.
5. 핵심 모범 사례 (Best Practices)
안정적이고 효율적인 Terraform 상태 관리를 위한 핵심 원칙들입니다.
-
✓
원격 상태 사용 필수
팀 협업, 보안, 안정성을 위해 항상 Azure Blob Storage와 같은 원격 백엔드를 사용합니다.
-
✓
백엔드 인프라 분리
상태 파일을 저장하는 리소스 그룹/스토리지 계정은 관리 대상 인프라와 분리하여 영구적으로 관리해야 합니다. 절대로 동일한 Terraform 프로젝트에서 관리하지 마세요.
-
✓
Blob 버전 관리 활성화
상태 파일의 변경 이력을 추적하고 롤백할 수 있도록 스토리지 계정에서 Blob 버전 관리를 활성화합니다.
-
✓
`terraform import` 활용
이미 존재하는 Azure 리소스를 Terraform의 관리 대상으로 편입시킬 때 `import` 명령을 올바르게 사용합니다.
-
✓
`user_data` 스크립트 디버깅
VM 시작 스크립트 문제 발생 시, VM에 접속하여 `/var/log/cloud-init-output.log`를 확인하여 원인을 진단합니다.