tfenv로 테라폼 버전 관리하기

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

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

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

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

컨테이너 기초 - 정적 링크 프로그램을 chroot와 도커(Docker) 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)에 이미지 취약점 검사 기능이 추가되었습니다. 이 기능을 사용해 현재 등록된 이미지의 취약점을 스캔하거나, 새로 푸시되는 이미지를 자동적으로 스캔하는 것이 가능합니다.