8주차 - OpenTofu
1. OpenTofu 소개
1.1 OpenTofu 가 생성된 이유는?
Hashicorp에서 Terraform의 라이센스를 MPL 에서 BUSL로 변경하면서 법적으로 애매모호한 포지션을 가지고 가게 됩니다.
이에 대한 대응책으로, Linux Foundation에서 오픈소스 정책을 지원하기 위해서 Terraform(MPL)을 Fork하게 됩니다.
OpenTofu 1.6 버전대와 Terraform 1.6 버전대는 기능 적으로 매우 유사하고 앞으로는 기능 변경이 계속 진행될 예정입니다.
OpenToful는 Provider의 Terraform을 사용해서 동작하며 Registry만 다릅니다.
가장 큰 차이점은 현재로써는 법적 리스크입니다.
1.2 OpenTofu 설치
# Tenv 소개 : OpenTofu / Terraform / Terragrunt and Atmos version manager
# (옵션) tfenv 제거
brew remove tfenv
# Tenv 설치
## brew install cosign # 설치 권장
brew install tenv
tenv -v
tenv -h
tenv tofu -h
which tenv
## Linux Ubuntu
LATEST_VERSION=$(curl --silent https://api.github.com/repos/tofuutils/tenv/releases/latest | jq -r .tag_name)
curl -O -L "https://github.com/tofuutils/tenv/releases/latest/download/tenv_${LATEST_VERSION}_amd64.deb"
sudo dpkg -i "tenv_${LATEST_VERSION}_amd64.deb"
# (옵션) Install shell completion
tenv completion zsh > ~/.tenv.completion.zsh
echo "source '~/.tenv.completion.zsh'" >> ~/.zshrc
#
tenv tofu -h
tenv tofu list
tenv tofu list-remote
# 설치
tenv tofu install 1.7.3
tenv tofu list
tenv tofu use 1.7.3
tenv tofu detect
# tofu 확인
tofu -h
tofu version
## 기존에 사용한 tfenv 삭제후에 tenv 설치합니다.
2. OpenTofu 실습
2.1 [실습] 프로바이더 정보를 통해서 사용자 정의 함수 사용
테라폼과 다른점은 사용자 정의 함수를 프로바이더 정보를 통해서 바꿔 사용할 수 있습니다.
아래의 실습에서는 northwood-labs의 corefunc를 사용합니다.


2.2 [실습] Import blocks 사용하기

문제상황: tfstate 파일이 삭제가 되고 다시 import 시키는 상황을 재연해보자
instance-ids를 보면 import id 가 instanceIds 인것을 알 수 있다.

2.3 [실습] Statefile Encryption 하기
statefile을 opentofu에서 `terraform_remote_state` 키워드를 통해서 암호화할 수 있습니다.

암호화된 파일을 다시 평문으로 마이그레이션 할 수 있습니다.

2.4 [실습] Statefile AWS KMS 를 이용해 Encryption 하기



다음과 같이 kms 키로 encrypted 된 값이 s3에 저장되는 것을 확인할 수 있습니다.
2.5 [실습] Removed Block 하기
OpenTofu에서는 removed_block을 사용해 tfstate으로 관리하고 싶지 않은 리소스들을 제외 할 수 있습니다.
파라미터 스토어 리소스만 tfstate 에서 제거하고, AWS 상에는 유지 하게 설정
다음과 같이 removed 를 설정해주면, 해당 리소스는 삭제가 되지 않습니다.
2.6 [실습] 테라폼에서 OpenTofu 로마이그레이션 하기
손쉽게 terraform에서 opentofu로 마이그레이션이 가능합니다.
일단 terraform으로 리소스를 생성합니다.


해당 파일을 백업해주고 마이그레이션을 시작합니다.


다음과 같이 opentofu로 정상적으로 생성된것을 확인할 수있습니다.
마치면서
이 스터디를 진행하면서 terraform에 대한 구성원리를 이해하였고 실무에서 직접 사용할 수있는 꿀팁을 많이 얻어가게 됩니다.
Devops를 실제로 서비스를 하면서 많이 진행하면서 자동화가 될 부분이 많은데 배운 실무팁을 이용해 무자비한 자동화를 해 나갈 예정입니다.
Terraform을 이용해서 서비스를 자동 배포
statefile에 대한 encryption 처리
Last updated