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 설치합니다.
install 완료

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