OpenTofu 전환: 벤더 락을 해제하면서 프로덕션을 중단하지 않는 방법
Source: Dev.to
왜 OpenTofu로 전환했는가
OpenTofu 포크는 HashiCorp가 Business Source License (BSL)로 전환하면서 Terraform 바이너리가 잃어버린 자유를 복원합니다. import와 같은 핵심 명령은 사실상 유료 장벽 뒤에 가려졌으며, 생태계(레지스트리)는 공급업체 종속성의 지점이 되었습니다. OpenTofu는 SaaS‑전용 기능 없이 동일한 기능을 제공하여 인프라스트럭처를 코드(IaC) 자산에 대한 제어권을 되돌려 줍니다.
코드베이스 준비하기
하드코드된 레지스트리 참조 스캔
#!/bin/bash
# Find hardcoded upstream registry references
grep -r "registry.terraform.io" . --include="*.tf" | while read -r line ; do
echo "[ALERT] Hardcoded upstream registry found: $line"
echo " Refactor to use implicit provider lookup or local mirrors."
done
상태 백업
상태 파일은 단일 진실의 원천입니다. 손상되면 수천 개의 리소스를 다시 가져와야 합니다.
-
현재 상태를 로컬에 가져오기
terraform state pull > pre_migration_backup.tfstate -
OpenTofu 초기화
tofu init -upgrade -
드라이런 (필수)
tofu plan
tofu plan이 “No changes”를 반환하면 문제 없습니다. 대부분 “Provider hash mismatch.”라는 메시지를 보게 됩니다. 이는 잠금 파일이 이전 바이너리로 서명되어 있기 때문에 정상적인 현상입니다.
Provider Lock 불일치 해결
rm .terraform.lock.hcl && tofu init
네이티브 상태 암호화 활성화
OpenTofu는 네이티브 클라이언트‑사이드 상태 암호화를 제공합니다 (v1.7부터 무료). 다음 블록을 구성에 추가하세요 (기존 terraform 블록을 tofu 블록으로 교체해도 됩니다):
terraform {
encryption {
key_provider "pbkdf2" "my_passphrase" {
passphrase = var.state_passphrase # Never hard‑code — inject via CI
}
method "aes_gcm" "my_method" {
keys = key_provider.pbkdf2.my_passphrase
}
state {
method = method.aes_gcm.my_method
enforced = true
}
}
}
이제 상태가 저장 시와 전송 시 모두 암호화됩니다. 누군가가 S3 버킷에 접근하더라도 읽을 수 없는 바이트만 보게 됩니다.
CI/CD 파이프라인 조정
로컬 노트북은 쉽게 마이그레이션할 수 있지만, 대부분의 마이그레이션이 어려움을 겪는 곳은 CI/CD 파이프라인입니다. HashiCorp에서 관리하는 Terraform 액션을 OpenTofu 대응 항목으로 교체하십시오.
# Legacy (risk)
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.6.0
# Current (safe)
- uses: opentofu/setup-opentofu@v1
with:
tofu_version: 1.7.0
시간당 $200 청구율이라 하더라도, 리팩터링 비용은 일반적으로 다음 Terraform Business Tier 청구서가 나오기 전에 회수됩니다.
Comparison: Proprietary Terraform vs. OpenTofu
| Feature | Proprietary Terraform | OpenTofu |
|---|---|---|
| State Encryption | 엔터프라이즈/클라우드 전용 | 무료 / 네이티브 |
| Registry | 원본 (벤더‑호스팅) | 미러링 (셀프‑호스팅) |
| Support | 공식 벤더 (Tier 1) | 커뮤니티 / Spacelift / env0 |
| Testing | terraform test | tofu test (기능적으로 동일) |
| License | BSL (일부 기능에 대한 유료 장벽) | Apache 2.0 (완전 오픈) |
가이드 원칙
- 레지스트리 규칙: 도구가 작동하기 위해 특정 URL을 필요로 한다면, 그것은 서비스이며 도구가 아닙니다. 가능한 모든 것을 프록시하거나 미러링하십시오.
- 암호화 표준: 평문 상태 파일은 어떤 감사에서도 통과하지 못합니다. 기본적으로 상태를 암호화하는 도구를 사용하십시오.
- 분기 임계값: Terraform Feature Lag Tracker를 모니터링하십시오. 독점 도구가 SaaS 제공에만 이익이 되는 파괴적 변화를 도입하면 즉시 포크하십시오.
관련 기사
- Part 1 – The Decision Framework: 상태 파일 위험, 공급자 동등성 격차, CNCF 성숙도, 그리고 운영 모델 평가.
- Part 3 – Project Phoenix: 1,200명 규모 엔터프라이즈 마이그레이션 사례 연구 (HCP에서 주권 S3로 백엔드 전환, 감사 프로토콜, 문제 해결 가이드).
원래 게시된 위치