Terraform 상태(State) 관리
1️⃣ Terraform 상태 파일(terraform.tfstate) 개념
1 Terraform 상태란?
Terraform은 실제 인프라의 현재 상태를 기억해야 하기 때문에 terraform.tfstate
라는 파일에 상태를 저장합니다.
이 파일은 Terraform이 무엇이 생성되었고, 어떤 값이 할당되었는지 추적합니다.
📁 예시 구조:
{
"resources": [
{
"type": "aws_instance",
"name": "example",
"instances": [
{
"attributes": {
"id": "i-0abcdef1234567890",
"instance_type": "t2.micro",
...
}
}
]
}
]
}
Terraform은 이 상태 파일을 기준으로 변경 사항을 계산합니다 (
plan
,apply
).
2️⃣ terraform refresh를 통한 상태 동기화
1 terraform refresh란?
terraform refresh
명령어는 현재 인프라 상태를 클라우드에서 다시 조회하여 .tfstate
파일을 동기화합니다.
📌 예를 들어, 콘솔에서 EC2 인스턴스를 삭제한 경우:
terraform refresh
🔁 상태 파일과 실제 인프라 상태가 일치하도록 조정됩니다.
단,
refresh
명령은 Terraform 1.1부터는terraform apply
시 자동 포함되어 더 이상 자주 사용되지 않습니다.
3️⃣ 로컬 상태 저장 vs 원격(백엔드) 상태 저장
1 로컬 상태 저장 (기본)
- 상태 파일이 현재 디렉터리에 저장됨
- 예시:
terraform.tfstate
,.terraform/
폴더 - 팀 작업 시 충돌 위험이 있음 ⚠️
2 원격 상태 저장 (Backend)
- S3, Azure Blob, GCS, Consul 등에 저장
- Terraform 팀 작업의 표준 방식
- 자동으로 잠금(Locking) 기능 지원 가능
📦 예시 - AWS S3 백엔드 설정
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "dev/terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform-lock"
}
}
4️⃣ 상태 파일 잠금(Locking)과 충돌 방지
1 잠금(Locking)이란?
여러 사용자가 동시에 상태 파일을 변경하면 충돌이 발생할 수 있습니다.
이를 방지하기 위해 Terraform은 작업 중에 상태 파일을 잠금(Lock) 합니다.
✅ 백엔드에서 지원하는 잠금 예:
- AWS DynamoDB
- Terraform Cloud
- HashiCorp Consul
📌 잠금이 작동하지 않으면, 상태 손상이 발생할 수 있습니다.
5️⃣ 상태 파일 보안 및 백업 전략
1 보안 위험
상태 파일에는 민감한 정보(비밀번호, 키 등) 이 저장될 수 있습니다.
🔐 상태 파일 예시:
"password": "super-secret-password"
2 보안 및 백업 전략
- Git 등에 절대 커밋하지 않기 (
.gitignore
) - 백엔드 사용 시 버전 관리 및 암호화 활용
- 상태 파일 자동 백업 설정 (S3 버전 관리 등)
- 민감한 데이터는
sensitive = true
로 마스킹
output "db_password" {
value = var.db_password
sensitive = true
}
🎯 정리
항목 | 설명 |
---|---|
상태 파일 (.tfstate) | 인프라의 현재 상태 저장 |
terraform refresh | 실제 인프라와 상태 동기화 |
로컬 상태 | 단일 사용자에 적합 |
원격 상태 (Backend) | 협업에 필수, 잠금 기능 포함 |
상태 파일 보안 | 민감 정보 포함, 백업/암호화 필요 |
마지막 수정일자