테라폼
인프라스트럭처를 코드로 관리하는 오픈소스
리소스와 서비스를 선언적 구성 파일로 정의하고 프로비저닝*한다.
AWS, Azure, GCP 등 다양한 클라우드 제공업체를 지원하며 버전관리와 협업이 용이함
현재 상태와 목표 상태를 비교하여 필요한 변경사항을 결정하고 계획 및 적용 단계를 통해 일관된 인프라 관리를 가능하게 한다.
*프로비저닝 : 서비스 실행을 위한 인프라 준비과정. 사용자의 요구에 맞게 시스템, 데이터, 소프트웨어 등 IT 리소스를 준비하고 할당하는 프로세스
장점
- 선언적 구성: 인프라를 코드로 정의하여 가독성과 유지보수성이 높다.
- 멀티 클라우드 지원: 다양한 클라우드 제공업체와 서비스를 단일 도구로 관리할 수 있다.
- 상태 관리: 인프라의 현재 상태를 추적하고 관리하여 일관성을 유지한다.
단점
- 학습 곡선: 테라폼 문법과 개념을 익히는 데 초기 시간 투자가 필요하다.
- 제한적인 동적 구성: 일부 동적 구성이나 복잡한 로직 구현에 제한이 있을 수 있다.
- HCL : 테라폼의 설정 언어(.tf 사용)
- 프로바이더 : 테라폼과 클라우드 서비스를 연결하는 플러그인
| 클라우드 서비스 모델 | 프로바이더 |
| --- | --- |
| IaaS (Infrastructure as a Service) | AWS, Azure, GCP, Alibaba, Oracle Cloud |
| PaaS (Platform as a Service) | Kubernetes, Docker, AWS Elastic Beanstalk |
| SaaS (Software as a Service) | Github, GitLab, Atlassian(Jira, Confluence) |
- 리소스 : 프로바이더를 통해 생성/관리되는 인프라 요소
워크플로우
- Write(작성): 인프라를 코드로 정의
- Plan(계획): 변경 사항 미리 확인
- Apply(적용): 인프라에 변경 사항 적용
실제 코드로 작성하고 적용할 땐
tf config 파일 작성 이후 init → plan → apply
- 초기화(Init)
- 명령어: transform init
- 역할: 프로젝트 디렉토리 초기화, 필요한 프로바이더 다운로드
- 중요성: 모든 테라폼 프로젝트의 첫 단계
- 계획(Plan)
- 명령어: transform plan
- 역할: 설정 파일 분석, 변경 예정 사항 미리 보기를 통해 해당 디렉토리 이하 모든 .tf 파일 적용 가능 확인
- 결과: 생성/수정/삭제 될 리소스 목록 제공
- 적용(Apply)
- 명령어: transform apply
- 역할: 계획된 변경 사항을 실제 인프라에 적용(생성, 수정, 삭제)
- 특징: 실행 전 최종 확인 단계 제공