본문 바로가기
  • lakescript
스터디 이야기/Terraform

[T101] 1-1. Terraform - IaC와 테라폼

by lakescript 2024. 6. 11.

 

더보기

이 스터디는 CloudNet@에서 진행하는 T101 스터디를 참여하면서 공부하는 내용을 기록하는 블로그 포스팅입니다.

CloudNet@에서 제공해주는 자료들과 테라폼으로 시작하는 IaC 를 바탕으로 작성되었습니다.

 

 

Iac와 테라폼

코등형 인프라(IaC)는 말 그대로 '코드로서의 인프라'입니다. 인프라가 코드로 표현되고, 코드가 인프라를 설명한다는 의미로 UI나 Command를 이용한 수동 조작이 아닌 Code로 관리합니다.

 

인프라 자동화의 성숙도 변화

인프라 운영이 물리적인 자체 데이터 센터 같은 온프레미스 환경부터 클라우드 환경에 이르기까지 형태가 변화하면서 운영하는 방식도 지속적으로 바뀌고 있습니다.  

 

보통 인프라 관련 모든 정보와 구성 방법, 변경 방법, 기존 아키텍처에 대한 내용등을 엑셀과 같은 문서로 매뉴얼로서 관리되던 방식이 초기에 관리되던 방식입니다. 그렇게 성숙도가 쌓이다보면 반복되는 작업들이 보이게 되고, 해당 작업들에 대하여 스크립트를 작성하여 자동화하는 스크립트 방식으로 진화합니다. 이를 통해 반복되는 스크립트들을 가상 머신을 통해 template화 하여 반복적으로 사용할 수 있게 미리 구성하고 더 나아가 더 이상 소유하지 않고 상품화된 인프라와 데이터 센터등을 사용하는 클라우드 리소스를 원격으로 관리하는 클라우드 인프라 단계, 마지막으로 물리적 머신과 가상 머신을 넘어 운영 체제(OS)를 가상화한 환경을 제공하여 사용하는 컨테이너 단계까지 많은 변화와 성숙도가 진행되었습니다.

 

프로세스로서의 자동화

자동화를 위한 노력은 특정 반복 작업을 단순화하려는 단일 프로세스부터 다수의 팀과 조직이 결합하는 엔지니어링 기반으로도 확장되었습니다. 자동화는 각 '프로세스' 작업을 통합하고 재활용성을 높이는 것이 중요한데, workflow로 정의되는 프로세스 간 연계를 설계하고 적용하면 모든 동작을 파악하기 쉽고, 언제나 더 나은 것으로 확장할 수 있습니다. 하지만 고정적이지 않고 추상화된 리소스를 다룰 때는 항상 기존에 구성된 자동화 프로세스를 재적용해야 하는데 어려움이 따릅니다. 마이크로 서비스 아키텍처와 같이 작은 규모로 독립성을 유지 관리하면서 주기적인 변경과 적용 방식을 지향하여 빠른 시장 적응과 장애 극복 능력을 키워야 합니다.

 

IaC의 이해

코드로 인프라를 관리한다는 것은 '자유롭게 변경'하고, '환경을 이해'하고, '반복적으로 동일한 상태를 만들 수 있다'는 의미 입니다. 그리고 코드로 관리하게 되면 이에 대한 명세를 별도의 문서로 정리하지 않아도 인프라가 기록되게 됩니다. 즉, IaC는 컴퓨터에서 읽을 수 있는 정의 파일을 사용해 인프라나 서비스를 관리하고 프로비저닝하는 프로세스입니다. 간단히 실행 가능한 '문서'라고 생각하면 편합니다. 이런 방식은 기존에 수동으로 작업하거나 이전에 사용되던 자동화 도구로는 지속적으로 변경 사항을 관리할 수 없었던 단점을 극복할 수 있습니다.

 

IaC의 긍정적인 측면

  • 속도와 효율성
  • 버전 관리
  • 협업
  • 재사용성
  • 기술의 자산화

IaC의 부정적인 측면

  • 코드 문법 학습
  • 파이프라인 통합 필요
  • 대상 인프라에 대한 이해 필요

 

테라폼의 특성

테라폼은 하시코프사에서 공개한 IaC 도구입니다. 테라폼에는 중요한 철학 3가지가 담겨있는데, 워크플로우에 집중, 코드형 인프라, 실용주의입니다. 

  • 워크플로우 : 몇년 전에 도입한 특정 인프라 환경이 회사 전략에 따라 새로운 환경으로 변경되어도 워크플로는 그대로 유지될 수 있으며, 그동안의 노하우도 적용할 수 있습니다.
  • 코드형 인프라 : 구현되거나 구성된 모든 것은 코드로 표현되어야 한다는 의미로 '문서화된 실행 가능한 텍스트'로서 코드화된 구성은 기록뿐 아니라 버전 관리 대상이 되어 여러가지 장점을 가질 수 있습니다.
  • 실용주의

테라폼은 terraform apply와 같은 명령으로 작성된 코드를 실행하여 동작하고 배포하는 방식입니다. 하지만 테라폼 자체만으로는 다양한 인프라와 서비스를 프로비저닝하는 것은 불가능합니다.

 

대상 인프라와 서비스를 테라폼으로 작업하기 위해서는 대상의 제공자, 즉 프로바이더(provider)가 인터페이싱을 해야합니다. 각 인프라와 서비스는 고유의 API를 갖고 있고 프로바이더는 각 API 명세를 테라폼 코드를 통해 동작합니다. 이렇듯 테라폼은 다양한 프로바이더와 조합해 다중 클라우드와 하이브리드 인프라를 지원합니다.

 

테라폼 제공 유형

 

On-premise

일반적으로 Terraform이라 불리는 형태로, 사용자의 컴퓨팅 환경에 오픈소스 바이너리툴인 테라폼이 구성되며 가장 널리 이용됩니다.
Hosted SaaS

Terraform Cloud로 불리는 SaaS로 제공되는 구성 환경으로 하시코프가 관리하는 서버 환경이 제공하는 형태입니다.
Private Install

Terraform Enterprise로 불리는 서버 설치형 구성 환경으로, 기업의 사내 정책에 따라 프로비저닝 관리가 외부 네트워크와 격리됩니다.

 

제공 유형별로 기능에 차이가 있습니다. 

 

 

테라폼 사용 목적과 과제

워크플로

인프라와 서비스 구성 및 변경 작업인 프로비저닝을 위해 체계화된 워크플로를 제공합니다. 테라폼과 같은 IaC도구 이전 작업은 프로비저닝 작업이 GUI나 CLI를 통해 수동으로 수행되었습니다. 

자산화

테라폼을 통해 프로비저닝 작업에 일관성을 보장하고 축적된 프로비저닝 노하우를 자산화할 수 있습니다. 코드 형태로 되어 있으므로 git, CI, CD와 같은 코드 기반의 공유 도구들과 통합되기 쉬우며 쉬운 공유와 재사용이 가능합니다.

표준화

작성된 테라폼 코드는 조직 내부의 표준화를 거쳐 모듈화된 상태로, 숙련자가 아니더라도 이미 작성된 코드 집합을 사용해 쉽게 재사용이 가능합니다. 내부 정책과 외부 팀과의 공동 작업 위한 정책도 정의할 수 있습니다.

프로비저닝 자동화

테파롬은 작업 수행전에 실행 계획을 작성하여 변경사항을 미리 확인하므로 안전하고 빠른 프로비저닝을 수행합니다.

누가 하는가?

테라폼은 적용되는 대상 인프라를 알고, 새로운 프로젝트가 생겼을 때 설계와 구축을 담당하는 사람에게 유용한 기술입니다. 하지만 운영이나 유지보수를 하려면 운영을 담당하는 작업자도 테라폼과 관련한 지식을 갖춰야 하고 공부를 해야하기에 여러 상황을 고려해야 합니다.