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 을 사용한다. 디폴트 값을 정의할 수 있으며 아래 우선순위로 변수에 들어갈 값이 결정된다.
- CLI 에서 입력받은 값
terraform.tfvars
파일에 정의된 값
- 환경변수에 있는 값
variables.tf
파일에 있는 디폴트 값
- 1 ~ 4 에 모두 정의되어 있지 않을 경우 프롬프트에서 표준입력으로 받은 값
provisioner
생성된 리소스에 OS 또는 애플리케이션을 셋업할 때 사용한다.
리소스가 셋업될 때 한 번 실행되기 때문에 초기에 설정해야 할 것들을 provisioner 에 정의해도 되지만 CD를 구성하는 건 다른 방법을 써야 한다. (ansible, spinnaker, argoCD 등)
상태파일
테라폼은
$ terraform apply
으로 빌드한 내역을 추적해서 terraform.tfstate
및 terraform.tfstate.backup
파일에 보관한다. 이 파일에는 가장 최근에 빌드한 내역이 저장되는데, apply 하려는 .tf
파일과 상태파일을 비교하여 운영에 어떻게 적용할 지 결정한다.backend
하나의 테라폼 프로젝트를 여러명이서 작업할 때 위에서 언급한 상태파일이 공유되어야 하고, 상태파일을 공유하는 곳을 backend 라고 한다. 테라폼이 https://app.terraform.io/ 에서 제공하는 클라우드를 backend 으로 사용할 수도 있고 AWS s3 를 사용할 수도 있다.
명령어
$ terraform fmt
코드 린팅
$ terraform graph
테라폼이 만들고자 하는 리소스/데이터소스/변수 종속성을 이해하기 쉽게 그래프로 그려준다.
$ terraform plan
.tf
파일 내용을 가지고 운영환경에 실행될 계획을 보여주고 멱등성을 보장한다.$ terraform apply
plan 명령어로 보여준 계획을 실행한다.
생성, 삭제, 수정, 삭제 후 재생성이 모두 apply 명령어를 통해 실행되고 멱등성을 보장한다.