본문 바로가기
Hello World/IaC

[AWS] Terraform 시작하기 - 기본구성, 개발환경, 동작과정

by Run DaramG 2022. 8. 15.

 

Terraform 구성 목적

AWS에 서비스를 구축하고 운영하면서, 동일한 구성의 인프라 세트를 각각의 환경(dev/stg/prd)에 맞게 생성하거나 변경(신규 계정, 네트워크변경 등)하는 작업이 빈번하게 발생한다. 그렇기에 IaC 대표 SW인 Terraform으로 인프라를 코드화하고 관리할 수 있다. 

 

 

Terraform 코드 구성

- provider.tf : terraform으로 정의할 infra provider(aws, azure, ..) 정보 

- variable.tf : 리소스에 쓰일 변수들을 정의해놓은 파일

- <리소스>.tf : 인프라 관련된 리소스가 정의된 파일

- output.tf : 프로비저닝 후 생성된 resource 정보를 출력 

- terraform.tfstate : 인프라 배포 후 작업결과가 .tfstate에 저장됨. (중요! 실제 AWS 의 인프라 상태는 아님!!)

 

 

Terraform 개발환경 구축

Terraform 설치 명령어

wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | tee /usr/share/keyrings/hashicorp-archive-keyring.gpg && \ 
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list && \ 
apt update && apt install -y terraform

 

워낙 많은 빌드환경을 사용하다보니 Terraform 개발환경도 local에 설치하지않고 docker 환경으로 구성하여 사용했다.

Dockerfile

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y curl unzip
RUN apt-get install -y wget
RUN apt-get install -y lsb-release
RUN wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | tee /usr/share/keyrings/hashicorp-archive-keyring.gpg && \
    echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list && \
    apt update && apt install -y terraform
RUN apt-get install -y vim
CMD ["/bin/bash"]

 

 

Terraform 동작 과정

코드를 작성(Write)하고 준비(Init)하고 계획을 확인(Plan)하고 인프라에 적용(Apply)한다.

1. Terraform init

init시 .tf 파일을 로드하고 provider(aws)와 관련된 plugin이나 module을 설치한다.

terraform init 이 완료되면 디렉토리에 .terraform 파일이 생성된다.

2. Terraform plan

plan은 작성한 코드를 적용하면 어떤 변경사항이 있는지 확인하는 과정이다.

어떤 리소스가 생성되고, 변경되고, 삭제되는지 확인할 수 있다.

3. Terraform apply

apply는 실제 인프라에 적용하는 단계이다. 

apply가 완료되면 terraform.tfstate.backup 파일과 terraform.tfstate 파일이 생성되는데, terrafrom.tfstate파일은 apply 직후의 인프라 상태를 저장해둔 파일이며 terrafrom.tfstate.backup파일은 apply 이전의 상태를 저장해둔 파일이다. 

4. terraform destory

destory는 코드로 생성한 인프라를 삭제한다. 

댓글