Terraform 키워드 및 개념과 명령어

Created
Jan 19, 2022
Created by
Tags
Infra
Terafform
Property
 
1/19 에 있었던 Terraform on AWS 온라인 워크샵 내용을 기록했습니다.
 
학습자료
 
aws 리소스 정의할 때 참고 (provider 버전 별로 다를 수 있음)
 

키워드 및 개념

provider

테라폼이 인프라를 만들고 사용하는 데 필요한 리소스 타입과 데이터소스를 제공한다.
provider가 AWS인 경우 AWS가 제공하는 ec2, subnet, router table 등의 리소스를 테라폼이 생성/삭제/변경할 수 있다.
 

output

생성된 리소스들의 정보를 출력할 때 사용한다.
예)
# Outputs file output "catapp_url" { value = "http://${aws_eip.hashicat.public_dns}" } output "catapp_ip" { value = "http://${aws_eip.hashicat.public_ip}" }
public_dns, public_ip 와 같이 리소스들이 AWS cloud 에 생성되고 나서 알 수 있는 정보들을 ouput 에 정의하면 $ terraform apply 를 실행한 결과로 출력할 수 있다.
 

variable

환경 별 (스테이징, 프로덕션) 로 리소스에 다른 값을 부여할 때 variable 을 사용한다. 디폴트 값을 정의할 수 있으며 아래 우선순위로 변수에 들어갈 값이 결정된다.
  1. CLI 에서 입력받은 값
  1. terraform.tfvars 파일에 정의된 값
  1. 환경변수에 있는 값
  1. variables.tf 파일에 있는 디폴트 값
  1. 1 ~ 4 에 모두 정의되어 있지 않을 경우 프롬프트에서 표준입력으로 받은 값
 

provisioner

생성된 리소스에 OS 또는 애플리케이션을 셋업할 때 사용한다.
리소스가 셋업될 때 한 번 실행되기 때문에 초기에 설정해야 할 것들을 provisioner 에 정의해도 되지만 CD를 구성하는 건 다른 방법을 써야 한다. (ansible, spinnaker, argoCD 등)
 

상태파일

테라폼은 $ terraform apply 으로 빌드한 내역을 추적해서 terraform.tfstateterraform.tfstate.backup파일에 보관한다. 이 파일에는 가장 최근에 빌드한 내역이 저장되는데, apply 하려는 .tf 파일과 상태파일을 비교하여 운영에 어떻게 적용할 지 결정한다.
 
notion image
 

backend

하나의 테라폼 프로젝트를 여러명이서 작업할 때 위에서 언급한 상태파일이 공유되어야 하고, 상태파일을 공유하는 곳을 backend 라고 한다. 테라폼이 https://app.terraform.io/ 에서 제공하는 클라우드를 backend 으로 사용할 수도 있고 AWS s3 를 사용할 수도 있다.
 
 

명령어

$ terraform fmt

코드 린팅

$ terraform graph

테라폼이 만들고자 하는 리소스/데이터소스/변수 종속성을 이해하기 쉽게 그래프로 그려준다.

$ terraform plan

.tf 파일 내용을 가지고 운영환경에 실행될 계획을 보여주고 멱등성을 보장한다.

$ terraform apply

plan 명령어로 보여준 계획을 실행한다.
생성, 삭제, 수정, 삭제 후 재생성이 모두 apply 명령어를 통해 실행되고 멱등성을 보장한다.