Connecting

모두의 Terraform(테라폼) PART 1 - 개념 본문

IaC

모두의 Terraform(테라폼) PART 1 - 개념

팬도라 2023. 3. 13. 13:48
반응형

Introduction to Terraform


어떠한 기술 혹은 소프트웨어에는 사용자를 위한 소개 문구가 적혀있습니다. 다음은 테라폼 공식 문서에서 확인할 수 있는 문구 입니다.

"Terraform is an open-source infrastructure as code software tool that enables you to safely and predictably create, change, and improve infrastructure."
"Terraform은 인프라를 안전하고 예측 가능하게 만들고, 변경하고, 개선할 수 있는 코드 소프트웨어 도구로서의 오픈 소스 인프라입니다."

어떠한 이유로 인해 테라폼이 나오게 되었는지 살펴보도록 하겠습니다.

가상화 기술의 발전으로 하나의 서버로 여러개의 VM을 실행할 수 있게 되었고, 이는 클라우드 환경에 이전되어 여러 자원들을 AWS, GCP, AZURE와 같은 클라우드 제공 업체 (CSP)에서 실행되고 있습니다.
클라우드 환경으로 도래하면서 서비스 개발자들은 여러 리소스를 생성, 수정, 삭제가 자유로워 지면서 이전에 비해 인프라 구조가 유연하게 변경되게 되었습니다. CSP에서 콘솔을 통해서 자원에 쉽게 접근할 수 있게 되었지만, 서비스를 운영하면서 발생하는 다양한 이슈를 콘솔에서 관리하기에는 반복적인 작업과 휴먼에러가 발생할 수 있는 상황이 발생하게 되었습니다. Vender Lock-in을 피하기 위해 여러 Vender의 리소스를 사용하거나, 하이브리드 형태로 인프라 구성의 요구성이 높아지자 이를 통합으로 관리하고자 하는 요구가 높아졌습니다.
이러한 문제를 한번에 해결할 수 있는 방법이 인프라를 코드로 관리하는 컨셉이였고 이를 IaC (Infra as a code)라고 지칭합니다.

IaC 는 영역에 따라 Provisioning Tool, SCM Tool 두 종류로 분류할 수 있습니다.

  • Provisioning Tool - (AWS CloudFormation, Terraform)
    • 인프라팀이 개발팀에서 필요한 서버 자원을 생성하는 행위를 지칭합니다.
    • 개발과 동일하게 코드를 버저닝하고 업데이트 합니다.
  • SCM Tool - (Chef, Puppet, Ansible)
    • SCM (Software Configuration Management)은 시스템 운영을 관리하는 것을 지칭합니다.
    • 요구사항, 설계 및 운영 정보, 애플리케이션 구성 설정이 이에 포함됩니다.

테라폼은 하시코프에서 오픈소스로 개발하고 있는 IaC 도구 입니다. AWS, GCP, AZURE 이외에도 주요 클라우드 서비스를 Hashicorp Configuration Language (HCL)를 사용해서 리소스를 선언하여 사용합니다. 이를 통해 테라폼만 사용해서 멀티 클라우드의 리소스를 선언하고 코드로 관리하는 것이 가능합니다.

테라폼을 공식적으로 지원하는 Providers 항목은 Official, Partner, Community 3가지로 분류되며 현존하는 거의 모든 서비스를 지원한다고 생각하면 됩니다.

Terraform 장점

  • 자동화
    • console 환경에서 수동으로 작업하는 것이 아닌 코드로 생성하기 때문에 서버 운영 및 관리를 자동화 할 수 있습니다.
  • 속도 및 안정성
    • 한번 코드를 작성하면, 언제든지 재사용할 수 있어 생성속도가 빨라지고 휴먼에러를 방지할 수 있습니다.
  • 문서화
    • 작업일지가 아닌 코드로 모든 기록이 관리되기 때문에 자연스럽게 문서화가 진행됩니다.
    • 신규 입사자가 Terraform 코드를 확인하여 사내 인프라 구조를 파악하고, 이해할 수 있습니다.
  • 형상관리
    • Git을 활용하여 형상관리를 사용할 수 있습니다.
  • 리뷰 및 테스트
    • 작업 이전에 코드 리뷰를 통해서 발생할 수 있는 문제점을 미리 파악하는데 도움이 됩니다.

Terraform 기본 구성 개념

테라폼의의 기본 동작 개념은 아래 사진과 같이 정의할 수 있습니다.

  1. write : 인프라 환경을 HCL를 통해 리소스 정의
  2. plan : 정의된 리소스들을 생성, 수정, 삭제하기 위해 실행 계획 확인
  3. apply : 확인된 실행 계획을 리소스 종속성을 고려하여 올바른 순서대로 정의

CSP에서 필요한 서비스들과 하위 리소스 설정을 모듈화 하여 정의하고 리소스를 추가 생성, 수정, 삭제하기 위한 싱행 계획을 확인하고 리소스간의 종속성을 고려하여 테라폼이 자동으로 리소스들을 배포합니다.
plan을 통해 작성된 리소스의 변동사항이나 오류사항을 확인할 수 있고, 이를 그대로 apply를 통해 반영되기 때문에 plan 내용을 정확하게 인지하고 apply를 진행해야 합니다.

본 가이드에서는 테라폼을 사용하여 AWS 환경에 적용하는 방법을 중점적으로 확인하도록 하겠습니다.

Comments