OpenTofu는?
OpenTofu란 Terraform이 라이센스를 비즈니스 레벨로 변경함에 따라 Terraform의 포크(fork) 버전이다.
이전의 이름은 OpenTF였지만, OpenTofu로 이름을 변경하였고, 오픈 소스, 커뮤니티 중심, Linux Foundation에서 관리한다.
Hashicorp에서 Terraform의 라이센스를 MPL(Mozilla Public License)에서 BUSL(Business Source License) 비오픈 라이센스로 변경하였고, 이에 대한 대응으로 탕생하게 되었다.
Terraform을 포크한 오픈 소스이기 때문에 Terraform의 구성과 워크플로에 호환되며, 현재는 버전 차이가 크지 않아 업데이트에 잘 따라가고 있으나 회사와 같은 기술 로드맵이 있지 않으며 업데이트가 늘어날 수록 기능에 차이가 생길 것으로 예상된다.
Oracle에서 기업용 제품에서 사용중인 Terraform을 OpenTofu로 교체했다. 즉, Oracle E-Business Suite (EBS) Cloud Manager의 최신 버전에서 Terraform 대신 오픈소스 포크인 OpenTofu를 사용한다.
핵심 workflow
OpenTofu의 핵심 워크플로는 세 단계로 구성됩니다.
Write(쓰기)
리소스를 정의
Plan (계획)
OpenTofu는 기존 인프라와 구성에 따라 생성, 업데이트 또는 파괴할 인프라를 설명하는 실행 계획 생성
Apply (적용)
승인 시 OpenTofu는 모든 리소스 종속성을 고려하여 정의한 순서대로 적용
Terraform to Opentofu
테라폼과 opentofu는 기능이 상당히 유사하며, 기존 테라폼 파일을 실행해도 큰 문제가 없다.
opentofu 설치
$ brew install tenv
$ tenv -v
$ tenv tofu -h
$ tenv tofu list-remote
$ tenv tofu install 1.7.3
$ tenv tofu use 1.7.3
$ tenv tf list-remote
$ tenv tf install 1.8.5
$ tenv tf use 1.8.5
$ tenv tf list
Provider-defined functions
OpenTofu에서는 Terraform에는 없는 Provider-defined Functions을 사용할 수 있습니다. provider 블록안에 함수를 지정해서 사용할 수 있습니다. 이 기능은 데이터 소스를 사용해도 tf.statefile의 크기가 증가하지 않고 코드 작성이 덜 필요하기 때문에 데이터 소스를 사용하는 것에 비해 크게 개선된 것입니다.
Loopable import blocks
aws의 리소스를 Terraform 혹은 OpenTofu로 관리하기 위해 terraform state(tfstate)파일을 생성해야 합니다. 하지만 현재 내 local에는 tfstate 파일이 없을 때 remote 공간에서 관리되는 tfstate 파일을 로컬로 가져와 관리하기 위해 import 기능을 제공합니다.
OpenTufo에서는 이러한 기본 기능에서 문제가 되었던 import할 resource가 여러 개일때 복잡하기에 Importing multiple resources 기능을 제공합니다. 이때 for_each문을 사용해서 여러 리소스를 가져올 수 있고, set, tuple 또는 map 형식으로 가져오며 개별 요소를 가져오기 위해 each.key, each.value 변수를 사용합니다.
'⛅ Cloud Study > 🏹 IaC' 카테고리의 다른 글
[Terraform] 테라폼으로 EKS 배포하기 (0) | 2024.07.27 |
---|---|
[Terraform] Module & Runner (0) | 2024.07.14 |
[Terraform] 테라폼 State (0) | 2024.07.06 |
[Terraform] 테라폼 Provider (0) | 2024.07.06 |
[Terraform] 프로비저너, terraform_data, moved, CLI 환경변수 (0) | 2024.06.30 |