Terraform 이란?

From_A_To_Z·2022년 7월 5일
0


현재 클라우드 시장이 활성화됨에 따라 AWS (Amazon Web Service), MS Azure, GCP (Google Cloud Platform)와 같은 Public Cloud, vSphere, OpenStack, oVirt와 같은 Private Cloud와 같이 다양한 클라우드 플랫폼이 사용되고 있다. 관리자가 이러한 클라우드 플랫폼에 필요한 리소스를 배포하고 관리하는데 있어서 일차적으로는 해당 클라우드 플랫폼의 콘솔, 혹은 Cloud Native API를 직접 호출하는 방식을 활용할 수가 있다. 하지만 이러한 접근 제어 방식은 실제 인프라 관리 측면에서 많은 공수와 휴먼 에러를 발생시킬 수 있으며 이러한 측면에서 도출되는 관리 도구로 현재 Hashicorp 사의 Terraform (테라폼)이 부각되고 있다. 본 포스팅에서는 Terraform이 무엇이고 Terraform의 장점 및 구조에 대해서 소개하고자 한다.

1. Terraform 이란?

  • 여러 클라우드에 리소스를 배포할 수 있도록 API를 호환해 놓은 오픈 소스 tool
  • 서비스 실행에 필요한 환경을 구축하는 도구라는 측면에 있어서 Chef, Ansible과 같은 프로비저닝 도구로써 분류됨
  • 선언형 언어 HCL (Hashicorp Configuration Language)로 인프라 구성을 작성
  • 테라폼이 선언형 언어를 분석 및 클라우드 프로바이더의 API를 호출

2. Terraform 특성

(1) Infrastructure as Code

  • 인프라를 코드로 정의하여 생산성과 투명성을 높일 수 있음
  • 정의한 코드를 쉽게 공유할 수 있어 효율적으로 협업 가능

(2) Execution Plan

  • 변경 계획과 변경 적용을 분리하여 변경 내용을 적용할 때 발생할 수 있는 실수를 줄일 수 있음

(3) Resource Graph

  • 사소한 변경이 인프라 전체에 어떤 영향을 미칠지 미리 확인 가능
  • 종속성 그래프를 작성하여 이 그래프를 바탕으로 계획을 세우고, 이 계획을 적용했을 때 변경되는 인프라 상태를 확인할 수 있음

(4) Change Automation

  • 여러 장소에 같은 구성의 인프라를 구축하고 변경할 수 있도록 자동화할 수 있음
  • 인프라를 구축하는 데 드는 시간을 절약 가능

3. Terraform Registry

  • 클라우드 플랫폼 제어를 위해 필요한 플러그인을 다운받기 위한 저장소
  • 500 개 이상의 서비스 프로바이더 지원
  • 서비스 프로바이더의 신뢰성에 따라 3개의 Tier로 구분 (Official, Verified, Community)

4. HCL (Hashicorp Configuration Language)

  • Hashicorp 사에서 개발한 선언형 언어 (Json-Format)
  • Terraform에서 리소스를 선언하는 용도로 사용
resource "aws_vpc" "main" {
  cidr_block = var.base_cidr_block
}

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
  # Block body
  <IDENTIFIER> = <EXPRESSION> # Argument
}

# Block: HCL 에서 나타내는 객체의 컨테이너 (e.g. Resource, Variable 등)
# Argument: 블록 내에서 변수에 값을 할당함
# Expression: 문자 그대로 혹은 다른 값을 참조하여 값을 나타냄

5. Terraform 구조

(1) 구성 모듈

(a) Terraform CLI

  • 테라폼 명령을 처리하기 위한 기본 명령줄 도구
  • Terraform Core 기능 포함: HCL 분석, 그래프 생성

(b) HCL (Hashicorp Configuration Language)

  • .tf 확장자를 가진 선언형 언어 파일
  • 프로비저닝할 리소스를 선언

(c) Terraform State File

  • .tfstate 확장자를 가진 상태 파일
  • terraform 동작이 수행되었을 때 자동으로 생성되며 테라폼 명령의 실행 결과에 따른 상태정보 관리를 위해 사용됨

(d) Terraform Plugin (Provider)

  • 사용하는 Cloud Platform (e.g. AWS, Azure)에 따라 동적으로 설치
  • "terraform init" 명령 실행 시에 동작으로 다운로드됨

(2) Core vs. Plugins

  • Terraform 특성 상, 모든 프로바이더를 설치 시점부터 지원하기에는 비효율적임
  • Terraform Plugin (Binary)를 동적으로 설치하는 방식으로 Architecture 구성

(3) Terraform 동작 흐름

  • 테라폼은 크게 4단계의 동작흐름으로 구성되어 있음

(a) terraform init

  • Working Directory에 필요한 Terraform 환경 구성
  • HCL 파일 내 리소스 내용을 기준으로 필요한 Terraform Plugin 모듈 설치

(b) terraform plan

  • 실제 프로비저닝 작업 이전에 플랜 생성
  • HCL 코드가 어떤 인프라를 만들게 될지 예측 결과를 미리 보여주는 단계

(c) terraform apply

  • HCL 파일 내용을 실제 인프라 환경에 적용 (Infrastructure as a Code)

(d) terraform destroy

  • Terraform Apply 이후에 배포한 리소스를 삭제하고 싶은 경우에 사용
profile
What goes around comes around.

0개의 댓글