테라폼은 하시코프(Hashicorp)에서 오픈소스로 개발중인 클라우드 인프라스트럭처 자동화를 지향하는 코드로서의 IaC도구
코드로서, 인프라 서버를 구축 및 운영할 수 있는 오픈소스 소프트웨어
기존 aws는 환경마다 s3를 생성하려면 환경 수만큼 s3 생성을 위한 작업이 필요하지만, 테라폼은 한 코드로 모든 환경의 s3를 구축할 수 있다.
Provisioning Tool
IaC는 Provisioning Tool과 SCM Tool로 나뉘는데 그 중 테라폼은 Provisioning Tool에 해당한다.
Provisioning Tool이란 컴퓨터나 가상 호스트를 사용해 개발팀에서 필요한 라이브러리나 서비스를 설치하는 것을 의미한다. 프로비저닝 영역에서는 개발팀이 사용한 코드 버전과 동일한 버전을 사용해 네트워크, VM, DB등을 구성한다.
Terraform 장점
1. 자동화
위에서 언급한 것처럼 하나의 코드로 인프라를 관리 하기 때문에 서버 운영 및 관리가 모두 자동화가 될 수 있다.
2. 속도 및 안전
인프라를 코드로 관리하기에 생산성 및 투명성을 높일 수 있다.
정의한 코드를 쉽게 공유할 수 있어 효율적으로 협업할 수 있다.
3. 문서화
모든 인프라가 코드로 기록되기 때문에 인프라 구축에 관한 자동 문서화가 가능하다. 이는 IaC의 가장 큰 특징이자 장점이다. 기존의 방식에 따르면 인프라를 직접 구현하고 관리하는 담당자 외에는 전체 서버를 전부 파악하기 어려웠으나 Terraform으로 관리된 서버는 누구라도 Terraform 코드로 전체적 서버 구성을 이해할 수 있다.
4. 리소스 그래프(Resource Graph)
수동으로 서버관리시 실행 전 리뷰를 진행하는 것이 거의 불가능하다. 따라서 이미 문제가 발생했을 때 시점은 이미 애플리케이션에 영향을 끼친 경우가 대다수였다. 하지만 Terraform의 경우 변경 사항이 인프라에 어떤 영향이 미칠지 미리 확인 가능하다.
5. 형상 관리
git을 통해 형상관리가 가능하며, 변경 기록을 쉽게 확인 할 수 있다.
Terraform 기본 개념
resource
실제로 생성할 인프라 자원을 의미한다.
provider
Teraform으로 정의할 Infrasturcture Provider를 의미한다.
output
인프라를 프로비저닝 한 후에 생성된 자원을 output부분으로 추출 가능하고 remote state에서 활용 가능하다.
backend
Terraform의 상태 snapshot이 저장되는 위치를 정의한다.
Module
함께 사용되는 resource의 컨테이너이다. Module 사용시 변수만 변경해서 동일한 리소스를 재사용 할 수 있는 장점이 있다.
remote State
remote State 사용시 VPC, IAM같은 공용 서비스를 다른 서비스에 참조 가능하다. tfstate파일(테라폼 상태정보파일)이 저장되어 있는 backend 정보를 명시하면 Terraform이 해당 backend에서 output 정보를 가져온다.
Terraform 명령어
init
Terraform 사용을 위해 각종 설정을 진행한다.
plan
Terraform으로 작성한 코드가 실제로 어떻게 적용될지에 대한 예측 실행한다.