Search

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

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

문제 상황

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)

원인 분석

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 상태에 빠지게 됩니다.

로컬에 잔존하던 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
복사

 참고자료