본문 바로가기

DevOps/Terraform

[T102 1주차] (1) 테라폼과 IAC ?

 

cloudNet@ 팀의 가시다 님이 진행하는 테라폼 102 스터디 1주차 정리입니다.

Terraform은 AWS의 CloudFormation과 같은 대표적인 IaC(Infrastructure as Code) 툴이다.  IAC는 간단하게 말하면 인프라를 코드로 기록해서 관리하는것이다.

코드를 통해서 인프라를 관리하는 이유에 대해서 한번 생각해 보려고 한다. 그러기 전에 , 인프라 관리 발전 단계에 대한 이야기를  짚고 넘어가고 싶은데 이러한 발전 단계는 테라폼으로 시작하는 IAC 저서에도 기록되어 있는 내용이며 거기에 덧붙여서 국내 private cloud 운영 경험에 비추어 추가 설명 하도록 하겠다.

 

1단계 :  수동으로 운영 ( 메뉴얼 )

 

  • 인프라 관련 모든 정보와 구성 방법, 변경 방법, 기존 아키텍처에 대한 내용을 문서로 관리하는 경우
  • 엑셀 시트를 이용해서 인프라 아이피와 아이디, 어떤 서비스가 어느 서버에서 관리되고 있는지 관리
    • 모든 변경 사항을 문서로 남겨야 하고, 기억에 의존한다.
    • 사람이 실제 작업을 위한 명령어와 구성파일을 별도로 준비해야함
  • 구성 변경사항을 추적할 수 있는 히스토리가 사람 또는 문서에 의존함

2단계:  스크립트 

 

  • 인프라스트럭처를 스크립트를 통해 작성하여 자동화 할수 있고, 스크립트에는 작업자의 수준에 따라 노하우가 담긴다.
  • 간단하고 한번 잘 만든 스크립트는 계속적으로 사용되며 편리하다.
  • 작성한 스크립트의 퀄리티에 따라서 편리할수도 있지만 사용법과 운영법을 익히기 어렵다.
    • 굉장히 운영하는 사람에게 의존할수 밖에 없는 관리 방식이다. 오래동안 운영하던 사람이 퇴사하거나 공백이 생기게 되면 문제가 크게 발생한다.
    • 스크립트는 현재 상태와는 상관없이 순서대로 각 단계를 실행하기 때문에 실행중인 최종상태가 스크립트의 결과와 일치하지는 않는다는 단점이 있다.
  •  스크립트에 의존하는 방법이므로 롤백하기가 어렵다.

3단계:  가상머신

  • 하이퍼 바이저와 관리 도구를 통한 확장이 쉽다.
  • 템플릿 이미지와 스냅숏을 통해 수동적이지만 상태를 보관할수 있다.
  • 하지만, 이미지 변경을 위한 수작업이 이미 존재하고, 때로는 스크립트가 이 작업에 필요하다.
  • 사내 개발된 포탈을 활용하는 경우도 포함된다. 물론 이러한 포탈같은 경우에 외주를 주는 경우가 많아서 충분한 퀄리티를 보장하지 못하고, 여러가지 엔드포인트를 접속하고 관리해야하는 경우가 많다. 이 또한 오래동안 운영하던 담당자가 나가게 되면 문제가 발생한다. 
  • 현재 국내 private 클라우드 환경중에 vmware에 종속된 사이트들은 아직까지도 레거시하게 수동운영을 하는 경우를 종종 보곤 한다.. 그 이유를 말하자면, 아직 파트너, 운영인력의 기술력이 부족하기 때문이다.
vRealize Automation 8.3 라는 Terraform이나 Cloudformation처럼 잘 알려지진 않은 vmware 계열의 인프라 자동화 솔루션이 있지만, 1~2년 전부터 도입하기 시작하는 고객사가 종종 보이기 시작한 것 같은데, 일부 파트너중에서도 규모가 어느정도 되는 회사가 아니라면, 활성화 되어 사용되고 있지 않고 은행권이나 보수적인 집단 역시 현재 도입이 완벽하게 된 곳이 없기 때문에 잘 알려지지 않은것 같다.

 

4단계: IAC 단계 ( 클라우드 인프라 )

  • 인프라를 더이상 소유하지 않고 상품화 된 인프라와 데이터 센터를 사용하는 단계이다.
  • API를 통해 더 많은 기술 계층을 가상화 하고, 더많은 소프트웨어와 자동화 기술로 지금의 데이터 센터를 포함한 그 이외의 환경을 제공 할수 있다.
  • 빠른 인프라 시작과 구성이 가능하고 확장성이 뛰어나다.
  • Terraform을 사용하여 거의 모든 자동화 API를 통합 가능하다.
  • 멀티 클라우드 자동화를 위해서는 클라우드 제공자마다 서로 다른 API를 활용하기 때문에 개별작업이 필요하다.

 

5단계 : 컨테이너 

  • 컨테이너는 물리적 머신과 가상머신을 지나 OS를 가상화한 환경을 제공하여 더욱 빠른 서비스 개발을 뒷받침 한다.
  •  

 

인프라 관리 방법이 점차 발달 되면서 IAC라는 단어가 최근 굉장히 자주 들리는것 같다.

그중에서도 이번 스터디에서는 테라폼에 대해서 학습해보는 시간을 가져보겠다.

 

1. 테라폼이란?

HashiCorp 사에서 만든 Go언어로 개발한 오픈소스 코드형 인프라스트럭처 입니다.


  • HCL언어로 인프라 리소스를 선언하고, 선언된 tf 파일을 읽고 실행합니다.
선언적 언어? 구체적인 절차를 기술하는것이 아닌 최종적 상태를 정의하는 방식


쿠버네티스 = 선언적 언어
  • 인프라를 일정한 상태로 유지하기 위해 코드로 정의하여 멱등성을 보장합니다.

 

멱등성? 여러번 적용하더라도 결과가 달라지지 않는 성질, 테라폼은 코드로 정의된 리소스를 명시된 대로 적용하여 항상 같은 결과를 도출
  • 멀티 클라우드 provider을 지원합니다.
  • 깃과 같은 scm (버전 관리 시스템)을 통해 인프라 변경 기록을 유지 관리하여 인프라 변경에 따른 버전 관리가 용이 합니다.
  • Ansible,Chef,Puppet,Saltstack 등과 같은 툴을 활용하여 소프트웨어 설치와 인프라 구성의 자동화를 할 수 있습니다.