Terraform 키워드 및 개념과 명령어

Created
January 19, 2022
Created by
D
DaEun Kim
Tags
InfraTerafform
Property

1/19 에 있었던 Terraform on AWS 온라인 워크샵 내용을 기록했습니다.

학습자료

https://hashicorp.github.io/field-workshops-terraform/slides/korean/aws/terraform-oss/#1

aws 리소스 정의할 때 참고 (provider 버전 별로 다를 수 있음)

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc

키워드 및 개념

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 에서 입력받은 값
  2. terraform.tfvars 파일에 정의된 값
  3. 환경변수에 있는 값
  4. variables.tf 파일에 있는 디폴트 값
  5. 1 ~ 4 에 모두 정의되어 있지 않을 경우 프롬프트에서 표준입력으로 받은 값

provisioner

생성된 리소스에 OS 또는 애플리케이션을 셋업할 때 사용한다.

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

상태파일

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

image

backend

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

명령어

$ terraform fmt

코드 린팅

$ terraform graph

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

플러그인 : https://28mm.github.io/blast-radius-docs/

$ terraform plan

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

$ terraform apply

plan 명령어로 보여준 계획을 실행한다.

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