Public cloud가 발달함에 따라 많은 개인과 기업들이 운영 중인 서비스들을 클라우드로 전환하게 되었다.
클라우드로 전환하고 점차 서비스들이 확장되며, 사용중인 리소스들의 수가 증가하여 프로비저닝과 운영/관리가 복잡하고 어렵게되었다.
이에 따라, 클라우드 리소스를 코드 형식으로 관리하고자하는 움직임이 나타나고, 이번에 소개할 Terraform이 등장하게 되었다.
Terraform
terraform은 Hashicorp에서 개발한 오픈소스 인프라관리 도구로, 인프라의 구조를 코드로 작성해서 간단하게 구축하고 인프라의 형상을 관리할 수 있다.
Terraform은 HCL(Hashicorp Configuration Language)라는 자체적인 설정 Language를 이용해 인프라 리소스들을 선언한다. 자체 Language라 입문에 거부감이 들 수 있지만, 문법 자체가 타 Language 처럼 어렵지도 않아 입문해서도 금방 적응할 수 있을 정도이다.
각 코드들은 .tf 확장자를 가지고 실행될때에 디렉토리 내의 모든 .tf 파일이 한번에 로드되어 리소스가 생성이 된다.
따라서 코드 파일을 굳이 여러개로 나누지 않고 통짜 단일 파일로도 실행하고 인프라가 생성되는데에는 문제가 없다.
(다만, 적당한 리소스 구분을 위해 어느 정도 파일을 나누는 것은 필요하다, 그래야 보기도 좋고...)
Terraform의 대표적인 특징은 아래와 같다
특징 | 설명 |
IaC | 모든 인프라를 코드로 작성하게 되어 코드를 읽는 것만으로도 해당 인프라의 담당자 이외에도 모든 사람들이 인프라의 구조를 이해할 수 있다. |
자동화 | 기존 인프라 구성 시, 각 리소스를 생성/변경할 때마다 웹 콘솔이나 CLI 커맨드를 매번 주어야했지만, Terraform을 통해 인프라 코드를 적용하기만 하면 번거롭지 않게 적용 가능하다. +) staging, development 환경 등을 배포하기에도 용이함 |
멱등성 | IaC의 특징으로, 코드 실행이 몇 번되건 항상 동일한 결과값(인프라 구조)를 생성한다. |
테스팅 | 후술할 Plan 명령을 이용해, 코드를 통해 실제로 생성/변경되는 내역을 확인할 수 있다. 코드를 실제 인프라로 적용(Apply)하기 이전에 해당 코드를 통해서 실제로 적용이 가능한지. 코드 상에 오류는 없는지 확인하는 작업을 진행할 수 있다. |
형상관리 | 마찬가지로 IaC의 특징이기도 하지만, 인프라를 코드로 작성함에 따라 git과 같은 형상관리가 자동으로 가능하게 된다. |
Terraform의 Workflow는 Write → Init → Plan → Apply → Destroy로 구성되어있으며 아래 이미지와 같다.
최초로 인프라 리소스 내용이 담긴 코드를 작성(Write)하고, 코드의 디렉토리와 Provider 내용을 확인해 Provider plugin을 다운로드 받는다.(Init)
이후 작성된 코드를 바탕으로 인프라에 올리기 전에 실제 인프라의 내용과 비교하고 변경될 부분을 확인(Plan)하는 과정을 거치면 코드를 적용(Apply)해 실제 인프라에 리소스를 생성한다.
마지막으로 적용되어있는 코드 기반 인프라 리소스를 제거(Destroy)하는 과정으로 Workflow가 마무리된다.
설치
Terraform을 그냥 설치해서 사용할 수 있지만, Terraform의 버전에 따라서 지원하는 기능도 다르고 여러 버전을 사용해야하는 경우들도 존재한다.
이를 위해 tfenv가 존재한다. tfenv는 Terraform을 버전 별로 다운받아서 교체해가면서 사용할 수 있는 툴로, Windows/Mac/Linux 모두 지원한다. (Windows는 testing이 부족한 듯 보인다. WSL을 사용하는 것을 추천)
tfenv repo는 아래와 같다.
Mac이 없는 관계로 WSL을 통해 Ubuntu에 설치해본다.
1. Git clone
$ git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
2. Path 설정
# WSL 환경에서는 아래와 같이 적용
$ echo 'export PATH=$PATH:$HOME/.tfenv/bin' >> ~/.bashrc
PATH 설정 후 한번 껐다 켜주면 PATH 적용이 되어 tfenv 적용이 된 것을 볼 수 있다.
3. unzip 설치
Terraform을 설치할 때에 unzip이 필요하다
sudo apt install unzip
이제 tfenv를 통해 terraform을 다운로드 받는다.
# 특정 버전
tfenv install [버전]
# latest 버전
tfenv install latest
설치된 Terraform 버전 목록
tfenv list
적용할 Terraform 버전 선택
tfenv use [버전]
이렇게 Terraform을 설치완료했다.
다음으로 Terraform의 기본 키워드와 코드를 작성하고 인프라를 올려본다.