테라폼이란?
IaC(Infrastructure as Code)를 구현하는 도구이다.
IaC를 쓰는 이유
- 서버를 내리고 올려도 다시 똑같은 환경을 만들 수 있다.
- 현재 어떤 리소스가 설치됐는지 알기 쉽다.
- 코드만 잘 짜놓으면 누구나 인프라를 구축할 수 있다.
테라폼 코드에서는 리소스 정의 순서가 중요하지 않다.
알아서 의존 관계를 파악하고 설치 순서를 변경한다. 예를 들어, 아래와 같이 aws_security_group에서 web.id를 가져와야 하는데 aws_security_group 설치 코드가 밑에 있을 경우, aws_security_group를 먼저 설치해준다.

장점
- 배우기 쉽다. HCL(HashiCorp Configuration Language)이라는 언어인데, 프로그래밍 언어 축에도 못낀다. 그만큼 진입장벽이 낮다.
- 리팩토링할 때 두렵지 않다: state를 비교하여 어떤 부분이 달라질지 보여주기 때문에 과감하게 리팩토링을 할 수 있다.
- 동시에 여러 명이 작업할 수 없게 한다. 같은 cluster에서 여러 명이 test하다보면 꼬일 수 있다. terraform tfstate 파일을 원격으로 저장하면 다른 사람이 작업 중일 때, lock이 걸린다. lock을 풀기 전까진 한 사람만 작업할 수 있다.
단어
- resource : 실제로 생성할 인프라 자원
- provider : Provider는 리소스들이 배포될 환경을 정의한 것으로 aws, gcp 등이 있다. → Terraform Provider Registry
- module : Module은 함께 사용되는 여러 리소스의 컨테이너다. Module을 사용하면 변수만 바꿔서 동일한 리소스를 손쉽게 생성할 수 있다는 장점이 있다. 레고처럼 재 사용 가능한 모듈로 만들어 사용한다. 리팩토링시 중복된 코드 제거 등 유용함.
- output : 인프라를 프로비저닝 한 후에 생성된 자원을 output 부분으로 뽑을 수 있다. Output으로 추출한 부분은 이후에 remote state에서 활용할 수 있다. → [테라폼] Terraform Output 사용하기
- backend : 테라폼의 상태(.tfstate)를 저장할 Remote State Storage에 대한 설정이다. 백엔드는 주로 Terraform이 상태를 저장하는 위치를 결정한다. 주로 aws s3 bucket을 사용한다고 함.
- remote state : aws s3 bucket과 같은 공유가능한 자원에 state file을 관리하는 메커니즘을 말한다. remote state를 사용하면 VPC, IAM 등과 같은 공용 서비스를 다른 서비스에서 참조할 수 있다. tfstate파일(최신 테라폼 상태정보)이 저장되어 있는 backend 정보를 명시하면, terraform이 해당 backend에서 output 정보들을 가져온다.