본문으로 바로가기

www.terraform.io/

 

Terraform by HashiCorp

Terraform is an open-source infrastructure as code software tool that enables you to safely and predictably create, change, and improve infrastructure.

www.terraform.io

terraform의 구성 요소

 

provider : 테라폼으로 생성할 인프라의 종류. AWS, GCP...

resource : 인프라의 자원을 의미. EC2든 S3든 인프라 내부 서비스를 통해 생성하는 자원들.

state : 테라폼을 통해 생성한 자원의 상태. 파일 형태로 남게 됨. 테라폼 명령어를 실행한 결과물

output : 테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것을 의미함

module : 공통적으로 활용할 수 있는 코드를 모듈 형태로 정의할 수 있음. 흔히 아는 그 모듈 맞다.

remote : 다른 경로의 state를 참조하는 것. 원격 참조. output 변수를 불러올 때 주로 사용됨.

 

 

위 요소들은 직접 tf 파일 내의 코드를 보면 쉽게 이해할 수 있다. 우선은 개념적으로만 이해하고 넘어가자

 

 

테라폼 기본 명령어

 

init : 테라폼 명령어 사용을 위한 설정 진행. 최초에 입력하는 명령어.

plan : 테라폼으로 작성한 코드 실행시 만들어질 결과 예측. 가장 많이 사용됨.

apply : 인프라를 실제로 생성하는 코드임.

import : 이미 만들어진 자원을 state 파일로 옮기기. 이미 세팅된 AWS를 코드로 관리하고 싶어서 가져올 때 사용.

state : state를 다루는 명령어로 하위 명령어로 mv, push 등. 자주는 아니지만 꼭 사용하게 됨.

destory : 생성된 자원을 state 파일 기준으로 모두 삭제. 

 

기본 명령어를 보면 짐작할 수 있겠지만 테라폼을 통한 인프라 생성의 프로세스는 다음과 같이 관리된다.

 

1. Init

작성한 코드에서 init 명령어를 입력합니다.

 

2. plan

실제로 어떻게 만들어질지에 대한 예측 결과를 보여주는 명령어임. plan에 문제가 없어야 apply에 문제가 없을 확률이 높음. 물론 plan이 정상적이어도 apply에서 문제가 일어날 때도 있음.

 

3. apply

실제로 작성한 대로 인프라 리소스를 생성함. 따라서 주의깊게 실행해야 함.

 

 

이제 AWS CLI와 Terraform을 설치해보자

 

우선 aws cli를 설치하자. 당연히 2버전을 사용할 것이다. amazon-linux에는 aws cli가 기본 설치되어있기는 하나 1버전이기 때문에 결국 2버전으로 다시 다운로드 받아야 한다.

 

curl을 이용해 다운로드 받고, unzip한 다음에 install을 실행하면 된다.

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

// 설치 후 버전 확인
aws --version

// 설치 되었으면 zip은 지워주자. 용량이 여유롭지 못하다
rm -f awscliv2.zip

 

 

이제 테라폼을 설치해보자

공식 홈페이지 기준으로는 0.14.3이 최신 버전이다.

 

문서에 따르면 binary 파일로 배포된다고 하니, 단순히 zip으로 받고, unzip해서 푼 다음 바이너리 파일을 PATH에 옮겨주어서 명령어로 쉽게 사용하게 만들면된다.

 

Terraform is distributed as a single binary. Install Terraform by unzipping it and moving it to a directory included in your system's PATH .

 

releases.hashicorp.com/terraform/

 

Terraform Versions | HashiCorp Releases

 

releases.hashicorp.com

 

위 링크에 들어가서 운영체제 맞는 것으로 설치해주면 된다.  필자는 linux-amd64.zip을 받기로 하였다.

링크 주소를 복사하여 zip을 받아주고, unzip으로 풀어준 후 terraform 바이너리 파일을 환경 변수 경로로 이동시켜 주면 된다.

wget https://releases.hashicorp.com/terraform/0.14.3/terraform_0.14.3_linux_amd64.zip

unzip terraform_0.14.3_linux_amd64.zip // terraform 바이너리 파일을 받음

echo $PATH // 환경 변수 경로 확인
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

sudo mv terraform /usr/local/bin // terraform 바이너리 파일을 환경 변수 경로로 이동

terraform // 테라폼 명령어 실행 확인. 

 

* 참고로 terraform은 Go로 작성이 되었다. Go를 해본 사람은 알겠지만 컴파일하면 바이너리 파일 하나가 나온다. terraform이 바이너리 형태의 단일 파일인 것도 Go의 특성 때문임.

 

 

AWS Configuring

 

Terraform으로 AWS 인프라 구축을 하려고 하니 당연히 AWS 계정과 연동해야 한다.

AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY를 등록하자. 너무 많은 권한을 주는 것이 싫다면 IAM에서 권한을 제한하면 되지만 여기서는 편의를 위해 root 계정에서 이용하도록하자. [보안 자격 증명]에 가서 키를 받도록하자. 

 

aws configure 명령어를 통해 등록할 수 있다. format은 익숙한 json을 사용하자.

aws configure

 

저장된 내용은 아래 경로에서 확인할 수 있다.

// 현재 key들 확인
cat ~/.aws/credentials

// 나의 권한
aws sts get-caller-identity

 

이제 cli로 aws를 컨트롤할 수 있게 되었다!

aws s3 ls // 해당 계정에 생성된 s3 버킷의 리스트

 

 

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체