Terraform 백엔드(Backend) 구성
1️⃣ Terraform 백엔드 개념 및 필요성
1 백엔드(Backend)란?
Terraform에서 상태 파일(terraform.tfstate
)의 저장 위치와 동작 방식을 정의하는 구성입니다.
Terraform은 상태 파일을 통해 현재 인프라 상태를 기억하고, 변경 사항을 추적합니다.
📦 백엔드의 역할
- 상태 파일 저장
- 잠금(Locking) 지원 (중복 적용 방지)
- 상태 공유 (협업 시 중요)
2️⃣ 로컬 백엔드 vs 원격 백엔드
구분 | 로컬(Local) 백엔드 | 원격(Remote) 백엔드 |
---|---|---|
저장 위치 | 현재 디렉토리의 terraform.tfstate |
외부 저장소 (S3, Azure, GCS 등) |
협업 | ❌ 어려움 | ✅ 가능 |
잠금 기능 | ❌ 없음 | ✅ 지원 가능 |
보안성 | ❌ 로컬 파일 노출 위험 | ✅ IAM 및 암호화 지원 |
사용 예 | 개인 테스트, 학습용 | 팀 협업, 운영 환경 |
📝 기본값은 로컬 백엔드입니다.
3️⃣ AWS S3, Azure Storage, GCP Storage를 이용한 원격 상태 관리
1 AWS S3 백엔드 예제
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "dev/app/terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform-lock"
encrypt = true
}
}
📌 dynamodb_table
은 **잠금(Locking)**을 위한 설정입니다.
구성도
[Terraform CLI] ⇄ [S3 버킷 (상태 저장)]
⇅
[DynamoDB (Lock 관리)]
2 Azure Storage 백엔드 예제
terraform {
backend "azurerm" {
resource_group_name = "terraform-rg"
storage_account_name = "terraformstate"
container_name = "tfstate"
key = "dev.terraform.tfstate"
}
}
3 GCP Storage 백엔드 예제
terraform {
backend "gcs" {
bucket = "terraform-state-bucket"
prefix = "prod"
}
}
4️⃣ Terraform Cloud & Terraform Enterprise 활용
1 Terraform Cloud 개요
- HashiCorp에서 제공하는 SaaS 기반 원격 백엔드
- 상태 파일 관리, 실행 환경 제공
- UI 및 팀 권한 관리 지원
🎁 무료로 사용 가능, 소규모 팀에게 적합
2 Terraform Enterprise
- 자체 호스팅 가능한 기업용 Terraform 플랫폼
- 고급 보안, 정책 검사(Sentinel), 감사 로그 등 지원
terraform {
backend "remote" {
hostname = "app.terraform.io"
organization = "my-org"
workspaces {
name = "dev"
}
}
}
5️⃣ 백엔드 설정 예제 및 실습
1 백엔드 초기화 과정
main.tf
에terraform { backend {} }
블록 추가terraform init
명령어로 백엔드 설정 적용terraform init
⚠️ 백엔드 변경 시 기존 상태를 새로운 백엔드로 마이그레이션 여부 확인 필요!
2 실습 예시: S3 백엔드 구성
# S3 버킷, DynamoDB 테이블 생성 후
terraform init
📂 .terraform
폴더 내부에 백엔드 정보가 저장됨
📄 로컬 상태 파일(terraform.tfstate
)은 생성되지 않음
📌 정리
항목 | 설명 |
---|---|
백엔드란? | 상태 파일 저장 위치 및 방식 정의 |
로컬 vs 원격 | 로컬은 단독 사용, 원격은 협업 및 보안 강화 |
대표 원격 백엔드 | AWS S3, Azure Blob, GCP GCS |
SaaS 기반 | Terraform Cloud는 관리형 백엔드 |
구성 방법 | backend 블록 + terraform init |
마지막 수정일자