tfenv로 테라폼 버전 관리하기

들어가며 : 버전관리가 필요한 이유

테라폼Terraform을 사용하다 보면 여러 버전을 동시에 사용하는 경우가 발생합니다. 최근에 만든 프로젝트는 최신 버전이지만 이전에 만든 리소스를 굳이 건드리고 싶지 않다거나 아직 기능을 지원하지 않는 등 이유는 다양합니다. 하지만 테라폼은 자체적으로 버전 관리 기능이 없어 여러 개의 버전을 동시에 사용하기 위해 direnv를 이용해 프로젝트별 테라폼의 경로를 다르게 잡거나 brew로 여러 개를 설치해두고 전환(Switch)하며 사용하기도 합니다.

이 글에서는 tfenv를 사용해 쉽게 테라폼 여러 버전을 사용하는 방법을 소개합니다. tfenv는 루비Ruby 언어의 버전관리 시스템인 rbenv에서 영감을 얻어서 만들었습니다.

44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

tfenv 설치

macOS인 경우 brew 사용해 tfenv를 설치합니다.

$ brew install tfenv

리눅스Linux 계열에서는 Git 소스를 클론(Clone)후 PATH에 추가합니다.

$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv
$ echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile

tfenv 사용

tfenv 사용을 위해 먼저 테라폼 버전을 설치해야 합니다.

# 설치가능한 테라폼 버전 목록 보기
$ tfenv list-remote
0.12.9
0.12.8
0.12.7
0.12.6
...

# 특정 버전 설치
$ tfenv install 0.12.9

# 최신 버전 설치
$ tfenv install latest

# 테라폼 파일 분석후 최소 요구 버전 설치
$ tfenv install min-required

# .terraform-version에 지정된 버전 설치
$ terraform install

설치된 테라폼 버전 목록을 보기위해서는 list 명령어를 사용합니다.

$ tfenv list
* 0.12.9 (set by /usr/local/Cellar/tfenv/1.0.1/version)
  0.11.14
  0.11.13

설치가 완료 되었다면 버전 전환을 할때는 다음 명령어를 사용합니다.

# 특정 버전 사용
$ tfenv use 0.12.9

# 최신 버전 사용
$ tfenv use latest

매번 테라폼 버전을 변경하는것이 번거로운 경우 .terraform-version을 사용합니다. .terraform-version 파일에 버전을 명시하면 해당 폴더는 물론 하위폴더에서 해당 버전으로 사용됩니다.

$ echo 0.11.14 > .terraform-version
Terraform v0.11.14

$ echo latest > .terraform-version
$ terraform --version
Terraform v0.12.9

scratch 도커 이미지를 활용한 초경량 이미지 만들기

🗒 기사, 2018-12-10 - C 프로그램을 작성하고 이를 동적 링크 컴파일한 경우와 정적 링크 컴파일한 경우로 나눠서 chroot로 실행해봅니다. 그리고 도커(Docker)의 scratch 이미지를 기반으로 같은 방식을 적용하는 법을 소개합니다.

왜 굳이 도커(컨테이너)를 써야 하나요? - 컨테이너를 사용해야 하는 이유

🗒 기사, 2019-01-14 - 컨테이너는 서버 애플리케이션을 배포하고 서버를 운영하는 표준적인 기술이 되어가고 있습니다. 하지만 처음 사용해본다면 그 장점이 잘 와닿지 않을 수도 있습니다. 왜 굳이 도커 컨테이너를 사용해야할까요? 이 글에서는 눈송이 서버를 넘어 컨테이너가 애플리케이션 배포와 운영에 있어 어떤 장점이 있는지 알아봅니다.

아마존 ECR(Amazon ECR), 도커 이미지 취약점 스캔 기능 추가

🗞 새소식, 2020-01-09 - 작년 10월 28일에 아마존 웹 서비스(Amazon Web Service)의 매니지드 도커 레지스트리 서비스 아마존 ECR(Amazon ECR)에 이미지 취약점 검사 기능이 추가되었습니다. 이 기능을 사용해 현재 등록된 이미지의 취약점을 스캔하거나, 새로 푸시되는 이미지를 자동적으로 스캔하는 것이 가능합니다.