날씨도 덥고 이것저것 준비할게 많아서 공부도 잘되지 않는 요즘
AWS 자격증 공부를 하며 알게된 오프소스 서비스가 있다.
바로 'Terraform' 이다.
오늘은 가볍게 'IaC 도구' 인 'Terraform'에 대해 포스팅해보겠다.
Terraform(테라폼)
Terraform is an open-source infrastructure as code software tool that provides a consistent CLI workflow to manage hundreds of cloud services. Terraform codifies cloud APIs into declarative configuration files.
쉽게 말해, 테라폼은 IaC를 지향하는 도구로써, GUI나 웹 콘솔을 사용해 서비스 실행에 필요한 리소스를 관리하는 대신
필요한 리소스들을 선언적인 코드로 작성해 관리할 수 있도록 해준다.
인프라를 코드로 관리하면 다양한 이점을 얻을 수 있다. 예를들면, 서비스를 구축하고 환경을 변경, 배포하는 반복 작업에서 소요되는 시간을 줄일 수 있고 작업의 효율성을 증가 시킬 수 있다.
그럼 잠깐! IaC로서 리소스를 관리하는 툴은 테라폼 밖에 없을까 ??
AWS 자격증을 공부하며 앞서말한 테라폼처럼 리소스를 추상화하여 관리하는 서비스인 CloudFormation에 대해 알게 되었고, 테라폼과 어떠한 차이점이 있는지 궁금해졌다.
AWS CloudFormation
- 탬플릿을 작성하여 리소스를 프로비저닝 할 수 있다.
- 리소스간의 종속성을 자동으로 관리한다.
- 친숙한 프로그래밍 언어로 작성
- json/yaml로 작성
- 멀티 리전 지원
- ui지원으로 추후 관리 용이
Terraform
- .tf파일을 템플릿으로 작성하여 apply 명령으로 리소스를 프로비저닝
- CLI환경으로 작업 (UI제공 X)
- 종속성 부여 가능
- 리소스를 한번에 삭제 가능 및 재사용 가능
차이점
- AWS CloudFormation은 aws 이외의 리소스에서 사용되기 힘들다 하지만 테라폼은 여러 벤더들의 클라우드 서비스에 적용가능하다. 즉 테라폼을 사용하면 훨씬 많은 서비스에 적용할 수 있다.
테라폼 시작하기
맥OS 환경에서는 홈브류를 사용하여 설치 가능하다.
나는 윈도우 환경을 사용하기 때문에 Window 환경에서 설치하는 법을 살펴보자 한다.
1. [테라폼 다운로드]
2. [다운로드 파일 압축 해제 및 환경변수 등록]
압축해제한 응용프로그램이 있는 경로를 환경변수 path로 편집해준다.
[방법]
내 컴퓨터 속성
↓
고급 시스템 설정
↓
환경변수 Path편집
↓
새로만들기
↓
응용프로그램 경로 등록
3. 이후 vscode 등 IDE 환경에서 터미널을열고 Terraform명령어를 입력하여 정상작동이 되면 성공적으로 설치된것이다.
테라폼으로 배포 워크 플로우 표준화 하기
테라폼으로 인프라를 배포하는 과정은 아래 그림을 보면 이해하기 쉽다.
테라폼을 사용하여 인프라를 배포하기전 아래 5가지 항목에 대한 표준화가 진행되어야 한다.
- 범위(scope) - 프로젝트의 인프라를 식별합니다.
- 작성자(author) - 인프라에 대한 구성을 작성합니다.
- 초기화(initialize) - Terraform이 인프라를 관리하는 데 필요한 플러그인을 설치합니다.
- 계획(plan) - 구성과 일치하도록 Terraform이 수행할 변경 사항을 미리 봅니다.
- 적용(apply) - 계획된 변경을 수행합니다.
AWS와 테라폼(Terraform)으로 구현한 IaC
테라폼의 개념과 설치, 배포 워크 플로우등에 대해 간단하게 알아봤다.
이제는 기초 튜토리얼을 통해 실제 리소스를 IaC환경을 통해 프로비저닝 하는법을 정리해보겠다.
아래는 현 포스팅의 출처이자 참고한 블로그이다.
설명이 더 상세하고 친절하여 해당 포스팅만 따라해도 기초 튜토리얼을 완성할 수 있다.
테라폼의 기본 개념들
테라폼을 사용할 때 자주 언급되는 용어들을 정리해보고 넘어가보자 한다.
- 프로비저닝(provisioning)
- 어떤 프로세스나 서비스를 실행하기 위한 준비 단계를 프로비저닝이라고 한다. 프로비저닝에는 크게 2가지 종류가 있다. 첫째는 네트워크나 컴퓨팅 리소스를 준비하는 작업과 준비된 컴퓨팅 자원에 애플리케이션 의존성을 준비하는 단계로 나뉘어진다.
- 프로바이더(provider)
- 테라폼과 외부 서비스를 연결해주는 기능을 하는 모듈이다. 예를 들어 AWS 서비스를 테라폼을 사용하여 생성하기 위해서는 AWS 프로바이더를 먼저 설정해줘야한다. 즉, 사용하는 서비스의 벤더에 따라 설정해줘야하는 프로바이더가 다르다고 생각하면된다.
- 리소스
- 리소스란 특정 프로바이더가 제공해주는 조작 가능한 대상의 최소 단위이다. 예를들어 AWS 프로바이더에서는 EC2의 인스턴스 리소스 타입을 제공하며 이에 관련된 보안그룹, 키페어 등이 모두 리소스 타입에 속하게 된다.
- HCL
- HCL은 테라폼에서 사용하는 설정 언어이다. 테라폼에서는 모든 설정과 리소스 선언은 HCL을 사용해 이루어진다. 즉 테라폼에서 HCL파일의 확장자인 .tf에서는 HCL을 사용한다고 생각하면 쉽다.
- 계획(plan)
- 테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용을 실제로 적용 가능한지 확인하는 작업이 '계획'이다.
- terraform plan 명령어로 실행가능하며 어떤 리소스가 생성,수정,삭제될지 plan을 보여준다.
- 적용(apply)
- 테라폼 프로젝트 디렉터리 아래의 모든 .tf파일의 내용대로 리소스를 생성, 수정, 삭제하는 일이 '적용'이다.
- terraform apply 명령어로 실행가능하다.
이번 포스팅에서는 간단한 개념만 정리해보고 IaC에 대한 이해를 중심으로한 포스팅을 진행했다.
이후 같은내용을 다루는 2번째 포스팅에서는 IaC환경에서 어떻게 aws 리소스를 프로비저닝하는지에 대해 다루어 볼까한다.
댓글