테라폼 Terraform 이란?
# Terraform 이란?
Terraform은 HashiCop 사의 코드형 인프라 도구이다. 오픈소스이다.
주 기능이 구성관리(cm: configuration management)인Ansible와 달리, Terraform의 주 기능은 배포이다. 일부 구성관리의 기능도 있다. Terraform은 클라우드, 물리 시스템, VM, 네트워크장비, 컨테이너 등 인프라의 자동화 된 배포, 변경 및 관리를 제공한다. HashiCop 사의 가장 인기있는 제품이며 멀티클라우드, 하이브리드 클라우드에서 가장 많이 사용한다.
AWS의 CloudFormation, GCP의 Deployment Manager등 각 클라우드 회사마다 클라우드에서 자사의 제품들을 IaC로 배포할 수 있는 기능이 있다. 이런 도구들은 자사의 제품만 관리 할 수 있고, 타사의 제품은 관리 할 수 없다. 그래서 모든 형태의 클라우드 소프트웨어들을 배포 할 수 있는 Terraform을 사용한다. 대부분 REST api가 오픈되어있어서 그것을 이용해 Terraform 코드로 작성을 하면 AWS, GCP, Kubernetes, OpenStack 등을 배포하고 관리 할 수 있다.
Terraform은 HCL(HasiCorp Configuration Language)이라는 구성파일로 작성하고 인프라, 플랫폼 및 소프트웨어를 관리 할 수 있다. 확장자는 tf (Terraform File)를 사용해서 전용 언어를 사용한다(DSL 도메인 전용 언어)
절차적인 형태의 Ansible와 달리, Terraform은 선언적 형태이기 때문에 절차가 중요하지 않다. 수행 할 작업을 구성파일을 이용해 선언하게 되고, 이것을 실행해서 인프라를 구성한다.
Terraform은 Provider(프로바이더, 관리할 대상 클라우드/vagrant의 virtualbox 같은것)의 API와 상호작용하여 리소스를 배포 및 관리한다. 프로바이더는 일반적으로 AWS,GCP,Azure,OCI,Kubernetes,Docker,Github 등의 서비스를 자동화 배포 할 수 있다.
# Terraform 의 주요기능
# 코드형 인프라
Terraform은 HCL 구성파일로 정의하며, 이를 통해 인프라의 구성을 코드화 하고 버전 관리를 통해 관리 할 수 있다.
# 실행 계획
실제로 배포기 전에 계획 단계를 통해 수행 할 작업을 미리 확인할 수 있다. (Ansible --check와 비슷)
# 리소스 종속성
내부적으로는 리소스의 종속성이 있을 수 있다. 예를들어 aws vcp와 ec2를 선언했다 ec2가 vcp를 사용할것이다. 그래서 내부적으로 테라폼에서 vcp를 만들고 ec2를 만든다. 종속성이 있는것들은 테라폼이 알아서 확인함, 종속적이지 않은 리소스들은 병렬화한다(같이 만들어진다). 인스턴스 10 개가 종속성이 없으면 인스턴스 10개가 동시에 만들어진다.
# 변경 자동화
테라폼 코드를 변경하여 다시 배포할 때 , 기본적으로 어떤순서로 변경 되었는지 테라폼이 확인하여 순서대로 구성한다. Terraform이 알아서 구성하므로 사람이 직접 구성함으로서 발생하는 오류를 방지한다.
# Terraform 워크 플로우
1. 구성 파일 작성
Terraform은 현재 디렉토리에 있는 tf 파일을 전부 읽어서 한꺼번에 실행시킨다.
2. Terraform 초기화
terraform init 사용자가 선언한 프로바이더와 모듈을 (미리 HashiCop 에서 만들어 놓은 코드),사용자가 작성한 코드를 실제 클라우드에 실행할 수 있도록 하는 코드를 다운로드한다.
3.계획 (생략가능)
terraform plan 구성 리소를 배포기 전에 변경사항을 미리 확인한다.
4.적용
terraform apply 인프라를 배포한다. plan이 자동으로 실행됨
5. 원격 저장소로 푸시
https://registry.terraform.io/