OpenTofu
OpenTofu
Terraform의 오픈소스 포크. HashiCorp 라이선스 변경 후 탄생.
OpenTofu
Terraform의 오픈소스 포크. HashiCorp 라이선스 변경 후 탄생.
OpenTofu는 HashiCorp Terraform의 오픈소스 포크로, 2023년 HashiCorp가 Terraform 라이선스를 BSL(Business Source License)로 변경한 후 커뮤니티가 만든 대안입니다. Linux Foundation 산하 프로젝트로, MPL 2.0 라이선스를 유지하며 진정한 오픈소스 IaC(Infrastructure as Code) 도구를 제공합니다.
OpenTofu는 Terraform 1.5.x와 호환되며, 기존 Terraform 코드를 거의 수정 없이 사용할 수 있습니다. .tf 파일, provider, module 문법이 동일하고, terraform 명령어를 tofu로 바꾸면 됩니다. 기존 상태 파일(.tfstate)도 마이그레이션 가능합니다.
OpenTofu는 커뮤니티 주도로 빠르게 발전하고 있으며, 독자적인 기능도 추가 중입니다. State encryption(상태 파일 암호화)은 OpenTofu에서 먼저 도입된 기능으로, 민감한 인프라 정보가 담긴 상태 파일을 암호화하여 보안을 강화합니다.
Terraform에서 OpenTofu로 전환은 비교적 간단합니다. terraform 바이너리를 tofu로 교체하고, CI/CD 파이프라인의 명령어를 수정하면 됩니다. HashiCorp provider들은 여전히 사용 가능하며, OpenTofu Registry에서 커뮤니티 provider와 module을 찾을 수 있습니다.
# main.tf - OpenTofu 인프라 정의 (Terraform과 동일 문법)
terraform {
required_version = ">= 1.6.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
# OpenTofu 1.7+ State Encryption
encryption {
key_provider "aws_kms" "main" {
kms_key_id = "alias/tofu-state-key"
region = "ap-northeast-2"
}
state {
encrypted = true
method = "aws_kms"
keys = [key_provider.aws_kms.main]
}
}
backend "s3" {
bucket = "my-tofu-state"
key = "prod/infrastructure.tfstate"
region = "ap-northeast-2"
dynamodb_table = "tofu-locks"
encrypt = true
}
}
provider "aws" {
region = var.region
default_tags {
tags = {
Environment = var.environment
ManagedBy = "OpenTofu"
}
}
}
# VPC 모듈 사용
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.0.0"
name = "${var.project}-vpc"
cidr = var.vpc_cidr
azs = ["${var.region}a", "${var.region}c"]
private_subnets = var.private_subnets
public_subnets = var.public_subnets
enable_nat_gateway = true
single_nat_gateway = var.environment != "production"
}
# OpenTofu CLI 사용법 (Terraform과 거의 동일)
# 설치 (macOS)
brew install opentofu
# 초기화 (provider 다운로드)
tofu init
# 변경사항 미리보기
tofu plan -out=plan.tfplan
# 인프라 적용
tofu apply plan.tfplan
# 리소스 목록 확인
tofu state list
# 특정 리소스 상태 보기
tofu state show module.vpc.aws_vpc.this
# Terraform에서 OpenTofu로 마이그레이션
# 1. .terraform.lock.hcl 삭제 (선택적)
rm .terraform.lock.hcl
# 2. tofu init으로 재초기화
tofu init -upgrade
# 3. 상태 확인
tofu plan # 변경사항 없어야 함
# CI/CD 예시 (GitHub Actions)
# - uses: opentofu/setup-opentofu@v1
# with:
# tofu_version: 1.7.0
# - run: tofu init
# - run: tofu plan -no-color
인프라리드: "Terraform Enterprise 라이선스 갱신 비용이 너무 높아요. OpenTofu + Atlantis 조합으로 전환하면 어떨까요?"
주니어: "기존 .tf 파일들 다 수정해야 하나요?"
시니어: "아니요, 문법이 같아서 그대로 사용해요. terraform 명령어를 tofu로 바꾸고, CI 파이프라인만 수정하면 됩니다. 한 달 정도 병행 운영하면서 검증하죠."
면접관: "IaC 도구 경험과 최근 트렌드에 대해 말씀해주세요."
지원자: "Terraform으로 AWS/GCP 인프라를 관리했습니다. HashiCorp 라이선스 변경 이후 OpenTofu가 주목받고 있어서 사이드 프로젝트에서 테스트해봤는데, Terraform과 99% 호환되고 state encryption 같은 유용한 기능도 추가되고 있어요. 커뮤니티도 활발해서 장기적으로 좋은 대안이라고 봅니다."
리뷰어: "state를 S3에 저장하는데 encryption 블록도 추가해주세요. OpenTofu 1.7부터 지원하니까 상태 파일 암호화하면 보안이 강화돼요."
작성자: "KMS 키 만들어서 encryption 설정 추가하겠습니다. 기존 상태는 tofu init -migrate-state로 마이그레이션하면 되죠?"