-
Terraform이란?
IaC/Terraform 기초 2023. 8. 31. 00:25Chat GPT 에게 Terraform이 무엇인지 물어봤습니다.
테라폼은 클라우드 인프라를 코드로 정의하고 관리할 수 있는 오픈 소스 도구입니다. 원하는 리소스를 설정 파일에 기술하고, 테라폼이 해당 리소스를 생성, 업데이트, 삭제하는 작업을 자동화합니다. 이는 여러 클라우드 제공업체 간에 일관된 자동화된 인프라를 유지하는 데 유용합니다.
이게 무슨 뜻일까요?
일단 하나씩 살펴봅시다.
클라우드 인프라를 코드로 정의하고 관리할 수 있는 오픈소스 도구
일단 클라우드와 관련된 개발 도구 라는 것을 알 수 있군요. 그런데 클라우드 인프라를 코드로 정의 및 관리한다는 뜻이 뭘까요?
클라우드에 대해서 간단하게 설명하면, 우리가 컴퓨터에서 사용하는 여러 서비스를 모아서 제공하는 일종의 종합선물 세트입니다.
가장 유명한 3대 클라우드 서비스는 아마존이 제공하는 AWS, 마이크로소프트가 제공하는 Azure, 구글이 제공하는 GCP가 있죠.
3대 클라우드 서비스 이런 클라우드에서는 다양한 인프라 관련 리소스들을 만들 수 있는데요.
가장 일반적으로 쉽게 접하는 클라우드의 서비스는 데이터베이스, 즉 저장공간을 제공하는 서비스이죠.
한마디로 테라폼은 클라우드 리소스들을 코드로 짜서 만들고 관리할 수 있게 하는 도구입니다.
그리고 오픈소스이기 때문에 누구나 쓸 수 있고 개선에 참여할 수 있습니다.
(누구나는 아니긴 합니다만...)그럼 다음 표현도 볼까요?
원하는 리소스를 설정파일에 기술하고
테라폼의 핵심이 바로 이 부분입니다. 바로 설정파일에 기술한다는 점!!
테라폼은 새로 리소스를 만들고 수정하고 삭제하는 변경사항이 있을 때마다 terraform.tfstate 파일에 변경사항을 기록합니다.
그래서 이 state 파일을 관리하는 것이 매우 매우 중요합니다.
테라폼은 철저하게 state 파일을 기준으로 현재 리소스들의 상황을 파악합니다.
AWS에서 제공하는 관계형 데이터베이스 서비스 만약에 테라폼으로 클라우드에 새로운 DB관련 리소스를 만들었다고 가정해봅시다.
그러면 테라폼은 코드를 보고 새로운 state 파일에 "이런이런 조건으로 DB를 만들었음"이라고 기록해둡니다.
코드를 다시 실행해도 이미 state파일에 기록이 되어있기 때문에
바보처럼똑같은 이름과 조건의 DB를 생성하지 않습니다.그런데 이 state 파일이 삭제되었다면?
테라폼은 새로운 state 파일을 만들고 새로 DB를 만들어서 그 내용을 기록하려고 합니다.
그런데 같은 이름을 가진 DB가 있으면 에러가 나겠죠? 그래서 테라폼에서 state 파일을 관리하는 것이 매우 중요합니다.
(물론 이런 상황도 충분히 발생할 수 있기 떄문에 이미 클라우드에 있는 리소스를 state 파일로 import 하는 기능도 있습니다.)
계속해서 다음 표현도 볼까요?
여러 클라우드 제공업체 간에 일관된 자동화된 인프라를 유지하는데 유용
클라우드에서는 데이터베이스, 네트워크, 가상머신 등등 다양한 인프라를 만들 수 있습니다.
그런데 클라우드에서 제공하는 인프라를 크게 3가지 방식으로 만들 수 있습니다.
1. 직접 클라우드 사이트에 들어가서 클릭해서 만들기
2. 클라우드에서 제공하는 CLI (명령어 인터페이스)로 만들기
3. 코드로 만들기인프라를 코드로 만들면 어떤 점이 좋을까요?
1. 반복적으로 같은 인프라를 만들 수 있음
2. 인프라를 관리하기 편함이를테면, 가상의 네트워크 환경을 세팅한다고 가정해봅시다.
Azure에서 제공하는 가상 네트워크 어떤 IP를 쓰고, 어떤 식으로 통신을 하고, 어떤 식으로 외부의 접근을 차단할 것인지 등등 여러가지 결정할 부분이 많습니다.
그걸 한땀한땀 정성스럽게 클릭으로 만들었다고 하면, 2-3개만 세팅해도 하루가 끝나죠
(숙련된 클라우드 장인은 금방 만듭니다만)그러면 숙련된 클라우드 장인이 클릭으로 뚝딱 만들었다고 해봅시다.
똑같은 네트워크 환경을 미국 개발자에게 전달하여 만들어야 한다면 하나하나 설명하기엔 시간이 너무 오래 걸릴 뿐더러,
내 설명을 잘 알아듣고 똑같은 환경을 만든다는 보장도 없습니다!
하지만 코드로 클라우드 리소스를 관리한다면?
일단 인프라의 리소스를 정의하는 코드만 짜서 공유하면
내가 실행시키나 미국의 개발자가 실행시키나 인도의 개발자가 실행시키나 동일한 인프라가 세팅됩니다.
그리고 인프라의 특정 조건을 변경하는 것도 코드로 간편하게 가능하죠!
지금까지 테라폼이 무엇인지 간단하게 알아보았습니다.
다음에는 실제 테라폼 코드를 보면서 테라폼이 어떤 방식으로 클라우드의 리소스를 생성 관리하는지 보도록 하겠습니다.
'IaC > Terraform 기초' 카테고리의 다른 글
Terraform Apply (0) 2023.09.05 Terraform State (0) 2023.09.03 Terraform Plan (0) 2023.09.03 Terraform Init (0) 2023.08.31 Terraform Install (0) 2023.08.31