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
파일과 상태파일을 비교하여 운영에 어떻게 적용할 지 결정한다.![notion image](https://www.notion.so/image/https%3A%2F%2Fs3.us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F1f89aa9a-1fa0-43dd-80c2-1d06a481cc73%2F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA_2022-01-27_%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE_3.35.47.png%3FX-Amz-Algorithm%3DAWS4-HMAC-SHA256%26X-Amz-Content-Sha256%3DUNSIGNED-PAYLOAD%26X-Amz-Credential%3DAKIAT73L2G45EIPT3X45%252F20230218%252Fus-west-2%252Fs3%252Faws4_request%26X-Amz-Date%3D20230218T042711Z%26X-Amz-Expires%3D86400%26X-Amz-Signature%3D0696beb221362b78ea0a0b6f4a56553eaf882fbe9f33c183041f9af74fd82c84%26X-Amz-SignedHeaders%3Dhost%26x-id%3DGetObject?table=block&id=096db455-72ba-48e0-ac29-d7077305af93&cache=v2)
backend
하나의 테라폼 프로젝트를 여러명이서 작업할 때 위에서 언급한 상태파일이 공유되어야 하고, 상태파일을 공유하는 곳을 backend 라고 한다. 테라폼이 https://app.terraform.io/ 에서 제공하는 클라우드를 backend 으로 사용할 수도 있고 AWS s3 를 사용할 수도 있다.
명령어
$ terraform fmt
코드 린팅
$ terraform graph
테라폼이 만들고자 하는 리소스/데이터소스/변수 종속성을 이해하기 쉽게 그래프로 그려준다.
$ terraform plan
.tf
파일 내용을 가지고 운영환경에 실행될 계획을 보여주고 멱등성을 보장한다.$ terraform apply
plan 명령어로 보여준 계획을 실행한다.
생성, 삭제, 수정, 삭제 후 재생성이 모두 apply 명령어를 통해 실행되고 멱등성을 보장한다.