상세 컨텐츠

본문 제목

Terraform 이란?? Quick Start로 빠르게 공부해보기

Infra/Terraform

by 데이터 개발자 2024. 10. 6. 18:08

본문

오늘은 Terraform에 대해서 공부해봤는데요.

기존에 업무 환경에서는 한번도 사용해본적이 없었던 기술이라 빠르게 학습하기 위해서 알아봤습니다.

 

 

Terraform? 

 

Terrafrom은 인프라를 코드로 관리할 수 있는 도구이다. (IaC = Infrastructure as code)

선언적으로 클라우드에 대한 인프라를 정의하고 관리할 수 있다.

low-level 컴포넌트들인 computer instance, storage, network 부터 high-level 컴포넌트들인 DNS, SaaS 등 다양하게 가능하다.

 

예를들어 AWS에 배포되는 다양한 인프라와 리소스들을 쉽게 관리하고 자동화 할 수 있다.

 

 

Terraform 동작

Terraform은 3가지 workflow로 동작하게 된다.

  • Write : 리소스를 정의한다
  • Plan : execution plan을 생성하고 어떤 인프라를 구축할지 설명한다.
  • Apply : 승인된 경우 인프라를 구축하게 된다.

 

 

실제 예시를 통해서 빠르게 알아보자.

 

 

Quick Start

Terraform 공식 문서에서 제공하는 Quick Start 이다.

 

Terraform 설치

Mac 환경에서 설치하였다.

 

# homebrew를 이용한 설치
$ brew tap hashicorp/tap
$ brew install hashicorp/tap/terraform

# 설치 확인
$ terraform -help

 

 

Local docker를 이용해 nginx 

로컬 환경에 도커를 이용해 nginx를 terraform을 이용해 구축해보자.

 

main.tf 를 이용해 Terraform configuration 을 작성하자.

$ cd workspace
$ code main.tf

 

실제 main.tf 내용이다.

아래 providers, Resources 를 정의했다.

(이 밖에 State, Modules 도 있다.)

  • Providers : 클라우드 서비스에 구축을 위해 프로바이더를 지정한다
  • Resources : 인프라의 개별 구성 요소이다. 리소스를 정의하면 Terraform 이 이를 클라우드에 생성, 수정, 삭제한다
  • State : 인프라의 상태를 기록하는 state 파일이다. 이 파일을 통해 클라우드 인프라 상태와 변경 사항을 비교하고 관리한다
  • Modules : Terraform 코드를 재사용 가능한 블록으로 묶는 방식이다. 예를 들어, 여러 프로젝트에서 사용한 VPC 구성을 모듈로 재사용 가능하다
terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0.1"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.image_id
  name  = "tutorial"

  ports {
    internal = 80
    external = 8000
  }
}

 

 

위와 같이 작성 후 Terraform 명령어를 통해 구축이 가능하다.

$ cd workspace

# 디렉토리에서 Terraform 을 초기화 한다. 필요한 프로바이더를 다운로드 하거나 환경을 설정한다
$ terraform init

# 어떤 리소스가 생성 될지 미리 보여준다
$ terraform plan

# 실제 리소스를 생성하게 된다.
$ terraform apply

# 모든 작업이 끝난 후 리소스를 삭제한다
$ terraform destroy

 

 

아래는 workspace에서 terraform apply 명령어로 실제 리소스를 생성하는 작업이다.

 

 

리소스 생성 후 Docker를 확인해보면 nginx 가 바로 배포되어있다.

이렇게 코드를 이용해 빠르게 구축가능한 Terrafrom이다.

 

더 많은 옵션과 기능이 있겠지만 하나하나 살펴보려고 한다.