서론
참고
Infrastructure as code (IaC) 도구를 사용하면 그래픽 UI가 아니라 conf 파일로 인프라를 관리할 수 있음.
다시 말해, 버저닝, 재사용, 공유할 수 있는 리소스 conf를 정의하여 안전한, 일관된, 반복 가능한 방식으로 인프라를 구축, 변경, 관리할 수 있음.
Terraform은 HashiCorp의 IaC 도구.
terraform을 사용해 human-readable하고 declarative한 conf 파일에 리소스와 인프라를 정의하고 인프라의 수명 주기를 관리할 수 있음.
인프라를 수동으로 관리하는 것보다 Terraform을 사용하면 좋은 점
provider라고 하는 Terraform 플러그인을 사용하면 Terraform이 API를 통해 클라우드 플랫폼 및 기타 서비스와 상호 작용할 수 있음. 1,000개 이상의 provider가 있음 (e.g. Amazon Web Services(AWS), Azure, Google Cloud Platform(GCP), Kubernetes, Helm, GitHub, Splunk 및 DataDog 등). Terraform Registry에서 provider를 찾을 수 있음. 혹은 직접 작성할 수 있음.
provider는 컴퓨팅 인스턴스 또는 프라이빗 네트워크와 같은 개별 인프라 단위를 resource로 정의함. 서로 다른 다양한 provider들의 resource들을 module 이라는 reusable한 Terraform configuration으로 묶어 구성함으로써 일관된 언어 및 워크플로로 관리할 수 있음.
Terraform의 configuration 언어는 declarative(선언적)함. 즉, 선언적이라 함은 작업을 수행하기 위해 단계별 지침이 필요한 절차적 프로그래밍 언어와 달리 인프라에 대해 원하는 desired end-state(최종 상태)를 명시하는 것. 그래서 Terraform provider는 resource 간의 종속성을 자동으로 계산하여 올바른 순서로 리소스를 생성하거나 삭제함.
Terraform은 내 환경에 대한 source of truth(단일 진실 공급원, SSOT) 역할을 하는 state 파일에서 실제 인프라를 추적함. Terraform은 state 파일을 사용하여 conf와 일치하도록 인프라에 적용할 변경 사항을 결정함.