Terraform

테라폼

필유아사 2022. 3. 28. 11:26

Infrstructure as Code 도구 테라폼Terraform

테라폼Terraform은 하시코프Hashicorp에서 오픈소스로 개발중인 인프라스트럭처 관리 도구입니다. 서비스 실행에 필요한 환경을 구축하는 도구라는 점에서 셰프Chef나 앤서블Ansible 같은 설정 관리 도구와 더불어 프로비저닝 도구로 분류됩니다. 테라폼은 코드로서의 인프라스트럭처Infrstructure as Code를 지향하고 있는 도구로서, GUI나 웹 콘솔을 사용해 서비스 실행에 필요한 리소스를 관리하는 대신 필요한 리소스들을 선언적인 코드로 작성해 관리할 수 있도록 해줍니다.

 

이 글에서는 테라폼의 기본적인 개념들을 소개하고, 테라폼으로 아마존 웹 서비스Amazon Web Serivce(이하 AWS)에서 간단한 웹 애플리케이션을 배포하기 위한 인프라스트럭처를 프로비저닝해보겠습니다.

 

테라폼 설치

테라폼을 사용하려면 먼저 설치를 해야 합니다.

Linux 는 OS에 따라 패키지를 설치해서 사용할 수 있습니다. 본 문서에서는 Debina/Ubuntu 기준으로 설명합니다.

시스템이 최신 상태이고 gnupg, software-properties-common 및 curl 패키지가 설치되어 있어야 합니다. 이 패키지를 사용하여 HashiCorp의 GPG 서명을 확인하고 HashiCorp의 Debian 패키지 저장소를 설치합니다.

sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl

 

HashiCorp GPG key 추가합니다.

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -

 

공식 HashiCorp Linux 저장소를 추가합니다.
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
 
apt-add-repository 명령어가 없다는 오류 메시지가 발생하면 아래 명령어를 수행합니다.
sudo apt install software-properties-common 
 

저장소를 추가하기 위해 업데이트하고 Terraform CLI를 설치합니다.

sudo apt-get update && sudo apt-get install terraform
 

설치가 잘 되었는지 아래 명령어로 확인합니다.

terraform -version

## Result
Terraform v1.1.7
on linux_amd64

 

Enable tab completion

Enable tab completion 이란 tab 키로 명령어나 파일명을 자동 완성하는 기능입니다.

Bash 또는 Zsh를 사용하는 경우 Terraform 명령에 대해 탭 완성을 활성화할 수 있습니다. 

자동 완성 패키지를 설치합니다.

terraform -install-autocomplete

자동 완성 기능이 설치되면  자동완성 기능을 사용하기 위해서는 셸을 다시 시작해야 합니다.

 

Quick start 

이제 Terraform을 설치했으므로 Mac, Windows 또는 Linux에서 Docker를 사용하여 NGINX 서버를 프로비저닝할 수 있습니다. 

이 문서의 내용을 실행하려면 Docker 엔진이 설치되어 있어야 합니다.
Learn-terraform-docker-container라는 디렉터리를 만들고 디렉터리로 이동합니다.

mkdir learn-terraform-docker-container
cd learn-terraform-docker-container

다음 내용을 Terraform 구성을 main.tf 파일로 저장합니다.

terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 2.13.0"
    }
  }
}

provider "docker" {}

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

resource "docker_container" "nginx" {
  image = docker_image.nginx.latest
  name  = "tutorial"
  ports {
    internal = 80
    external = 8000
  }
}

Terraform이 Docker와 상호 작용할 수 있도록 프로젝트를 초기화합니다.

terraform init

apply 사용하여 NGINX 서버 컨테이너를 프로비저닝합니다.

Terraform에서 확인을 요청하면 yes를 입력하고 Enter 키를 누릅니다.

terraform apply

웹 브라우저에서 localhost:8000을 입력하거나 docker ps를 실행하여 컨테이너를 확인하여 NGINX 컨테이너를 확인합니다.

 

$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS
      NAMES
3771450c61e3   f2f70adc5d89   "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   0.0.0.0:8000->80/tcp   tutorial

컨테이너를 중지하려면 terraform destroy를 실행합니다.

terraform destroy