본문 바로가기
AWS

테라폼(Terraform)이 무엇인가 -aws본사교육 다녀온 후 정리

by Mr Baek 2023. 6. 2.

테라폼이란?

테라폼은 하시코프에서 오픈소스로 개발중인 클라우드 인프라스트럭처 자동화를 지향하는 코드로서의 인프라스트럭처(IaC)도구입니다.쉽게 말해서, 코드를 통해 인프라 서버를 구축/운영 할 수 있게 해주는 오픈소스 소프트웨어입니다.

클라우드 인프라스트럭처 자동화 도구

 

https://local.hashicorp.com/ko

가상화 기술의 발전

그 시작은 가상화 기술의 발전으로부터 시작됩니다. VM ware, Hyper-V와 같은 기술을 통해서 여러대의 서버를 더 많이 더 쉽게 만들 수 있게 되었습니다. 기하급수적으로 늘어나는 서버들에대한 프로비저닝과 운영에 대한 이슈가 발생하였습니다. 인력을 무한정으로 늘릴 수 없었기 때문에아 서버 구축과 운영에 대한 자동화가 필요했습니다. 이러한 배경에서 프로그래밍 코드로 인프라를 구축/운영할 수 있는 IAC(Infra as a code)가 생겨나게되었습니다.

 

CloudNative로 변화

Cloudnative 생태계에서 가장 기본이 되는것은 클라우드서비스의 출현입니다. 기존에 서버와 네트워크 등 인프라 자원을 직접 박스형태로 구매했던 방식에서 인터넷만 가능하면 서버를 구축할 수 있는 시대로 바뀌고 있습니다. 따라서 빠르게 다양한시도를 할 수 있게 되었고, 다양한 오픈소스가 활성화되어 Cloudnative생태계가 자리잡을 수 있게 되었습니다. 클라우드 인프라를 제공하는 Vender를 CSP(Cloud Service Provider)라고 하는데, 가장 대표적인 서비스로는 AWS, Azure, GCP가 있고 현재는 AWS가 점유율 1위를 차지 하고 있습니다. 

 

Terraform 장점

 

장점 설명
자동화  -수동으로 서버를 생성하는 게 아닌 코드로 생성하기 떄문에 서버 운영 및 관리가 모두 자동화 될 수 있습니다.
-예를 들어, AWS에서 새로운 서버를 생성하기 위해서 AWS콘솔에 로그인할 필요없이 Terraform코드를 실행시키기기만 하면 됩니다.
속도& 안전     -코드로 실행되기 떄문에 사람이 수동으로 작업하는 것 보다 휠씬 빠르며 또한 사람이 직접할 때 생길 수 있는 실수들을 방지할 수 있습니다.
문서화  -모든 인프라가 코드로 기록 및 관리되기 떄문에 자동으로 문서화가 됩니다. 가장 큰 장점중 하나로, 많은 회사에서 인프라를 직접 구현하고 관리한 담당자를 제외하고 전체 서버를 전부 파악하고 있는 사람이 없는 경우가 많습니다. 하지만 Terraform의 경우에는 새로 들어온 개발자라도 Terraform를 보면 전체적인 구성을 이해할 수 있습니다.
리뷰 및 테스트  -수동으로 서버 작업을 할 떄는, 실제로 실행하기 전에 리뷰하는 것이 굉장히 힘들 수 밖에 없습니다. 그래서 문제가 발견되었을때 이미 프로덕션 애플리케이션에 영향을 주고 난 후인 경우가 많았는데, Terraform의 경우 코드 리뷰와 테스트를 통해 문제가 실제로 발생되는 것을 어느정도 예방할 수 있습니다.
형상관  리

-git을 통해 형상관리가 가능하며, 인프라의 변경 기록을 쉽게 볼 수 있습니다.

 

구성 설명
프로비저닝(Provisioning) -어떤 프로세스나 서비스를 실행하기 위한 준비 단계
-크게 네트워크나 컴퓨팅 자원을 준비하는 작업
프로바이더(Provider) -테러폼과 외부 서비스를 연결해주는 기능
-프로바이더는 AWS, GCP, Azure와 같은 범용 클라우드 서비스를 비롯해 Githube, Datadog와 같은 특정 기능을 제공하는 서비스
리소스 -프로바이더가 제공해주는 조작 가능한 대상의 최소 단위
-예를 들어 AWS프로바이더는 aws_instance 리소스 타입을 제공하고, 이 리소스 타입을 사용해 Amazon EC2의 가상머신 리소스를 선언하고 조작하는 것이 가능
계획 -테라폼 프로젝트 디렉터리 아래의 모든 .tf파일의 내용을 실제로 적용 가능한지 확인하는 작업
terraform plan
적용 -테라폼 프로젝트 디렉터리 아래의 모든 .tf파일의 내용대로 리소스를 생성,수정,삭제하는 일을 적용
terraform apply

 

 

 

https://www.terraform.io/

terraform init 

-테라폼 프로젝트를 초기화합니다.

-테라폼은 테라폼 프로젝트를 초기화할 때 프로바이더 설정을 보고 필요한 플러그인을 설치합니다.

 

terraform apply

-코드로 작성한 테라폼 설정을 적용하여 aws리소스등을 생성합니다.

 

terraform destroy

-테라폼으로 생성된 infrastructure 삭제합니다.

 

terraform plan

-이 파일을 저장하고 infrastructure 실제로 적용하기 전에 변경사항 체크합니다.

 

 

terraform 디렉터리 구조

 

main.tf : 테라폼 CLI를 사용하여 apply 명령어를 사용하면 가장 먼저 main소스 코드를 동작시킵니다. 말 그대로 main

 

modules : 자바로 보면 하나의 클래스를 만드는 것과 비슷한 개념입니다. main에서 input 값을 지정하고 해당 모듈을 사용할 수 있습니다.

 

backend.tf : 테라폼은 형상관리를 위해 .tfstate 파일을 생성합니다. 이 파일을 backup하고 형상관리하기위한 설정을 정의합니다.

 

provider.tf : 리소스를 어디서 제공하는지, 버전은 어떤것인지 등을 설정합니다.

 

outputs.tf : 해당 파일에 설정을 통해서 소스코드에 대한 실행 결과를 출력할 수 있습니다.

 

variables.tf : 소스코드에 사용할 변수들을 정의 합니다.

 

 

블로그로 직접 배웠던 내용이나 찾아보면서 몰랐거나 까먹었던 내용들을 배우면서 테라폼과 IaC를 더 알게 되었고, 대학교 다니면서 접해보기도 쉽지않고, 이번 기회를 통해서 처음 접해보는 부분이라 겁을 먹었지만, 직접 사용해보고 실행해본 결과 평소에 배우던 언어들에 비해서 쉽고 간편하게 사용할 수 있는 거 같아서 자신감이생기고 도움이 많이되었던 것 같습니다.