Search
moon
sun

[TroubleShooting] Terraform Backend 초기화 중 Timeout 발생

Date
2025/11/11
Category
Goorm
Tag
TroubleShooting
AWS
IaC
Goorm

📌 문제 상황

Terraform에서 S3 + DynamoDB를 이용한 원격 백엔드(Remote Backend) 구성을 시도하던 중
다음과 같은 오류가 지속적으로 발생했습니다.
Error: Failed to load plugin schemas Failed to obtain provider schema: Could not load the schema for provider registry.terraform.io/hashicorp/aws: failed to instantiate provider "registry.terraform.io/hashicorp/aws" to obtain schema: timeout while waiting for plugin to start..
Bash
복사

실행 환경

•
실행 명령:
terraform init -backend-config=env/backend.hcl -reconfigure
Bash
복사
•
Terraform 버전: v1.5.7
•
AWS Provider 버전: v6.20.0
•
로컬 환경: macOS (arm64)

📌 원인 분석

1️⃣ S3 Backend에는 State 파일이 존재하지 않았음

•
bootstrap 단계를 통해 S3 버킷(come2us-dev-tfstate) 과
DynamoDB 테이블(come2us-dev-tflock) 은 정상 생성되었지만,
bootstrap 자체는 로컬 state 로만 관리되고 있었음.
즉, S3 버킷은 만들어졌지만 terraform.tfstate 객체는 업로드되지 않은 상태였습니다.
s3://come2us-dev-tfstate/ └── (비어 있음)
Plain Text
복사
Terraform은 init 시 원격 backend와 provider schema를 동기화하려 하지만,
S3에 state가 없으므로 backend schema를 로드할 참조 데이터가 없어 deadlock 상태에 빠지게 됩니다.

2️⃣ 로컬에 잔존하던 provider 메타데이터(캐시, lock 파일)

•
main 디렉토리에는 이전 terraform init 시점에 생성된 .terraform/ 폴더와 .terraform.lock.hcl 파일이 남아 있었습니다.
•
이 두 파일에는 과거 provider 버전 해시 및 schema 정보가 저장되어 있으며, backend 연결 시 Terraform은 이 정보를 우선적으로 참조합니다.
결과적으로 Terraform은
“S3에는 state 없음 + 로컬에는 오래된 provider 메타데이터 존재”
상태에서 backend 초기화를 시도했고, provider schema 로딩 단계에서 충돌 및 timeout 이 발생했습니다.
단계
동작
상태
① bootstrap 실행
S3, DynamoDB, IAM 리소스 생성 (로컬 state 사용)
✅ 정상
② main에서 backend 연결 시도
S3 비어 있음 → backend schema 참조 실패
⚠️ deadlock 발생
③ 캐시 및 lock 파일 존재
과거 provider schema 참조 시도
❌ timeout 발생
④ provider 명시 + 캐시/lock 삭제
새 provider 재설치 및 backend 재초기화
✅ 정상 작동

📌 해결 과정

1. 기존 캐시 및 잠금 파일 제거

이전 init 시 남아 있던 provider binary 및 schema 메타데이터를 삭제했습니다.
rm -rf .terraform/ .terraform.lock.hcl
Bash
복사

2. provider 버전 명시

main.tf에 명시적으로 provider 버전을 6.x 대 범위로 제한하여 지정했습니다.
이 설정은 Terraform이 동일 major 버전 내에서만 최신 provider를 자동으로 설치하도록 보장합니다.
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 6.0" } } }
HCL
복사

3. backend 재초기화

정상화된 provider schema 기반으로 backend를 다시 연결했습니다.
terraform init -backend-config=env/backend.hcl -reconfigure terraform plan terraform apply
Bash
복사
이후 S3 버킷 내부에 infra/dev/terraform.tfstate 객체가 생성되며 백엔드 초기화가 정상적으로 완료되었습니다.

📌 결과

항목
수정 전
수정 후
provider schema 로딩
timeout (handshake 실패)
✅ 정상 로드
backend 연결
실패
✅ 성공
plan/apply 실행
불가능
✅ 정상 수행 가능

✏️ 인사이트

•
S3에 버킷만 존재하고 state 파일이 없을 경우, Terraform은 backend schema 초기화 시 timeout이 발생할 수 있다.
•
.terraform/과 .terraform.lock.hcl은 provider binary와 버전 해시 정보를 포함하고 있으므로,
이전 init 결과가 남아 있으면 backend handshake 단계에서 충돌할 수 있다.
•
provider 버전 명시(required_providers)는 Terraform이 명확한 binary를 재설치하도록 유도해 안정적인 init을 보장한다.
•
신규 backend 연결 전에는 이전 캐시를 제거하는 것이 안전하다.:
rm -rf .terraform/ .terraform.lock.hcl terraform init -backend-config=env/backend.hcl -reconfigure
Bash
복사

📚 참고자료