Terraform이란?

: 테라폼(Terraform)은 하시코프(Hashicorp)에서 오픈소스로 개발 중인 *IaC 도구로, 인프라를 안전하고 효율적으로 구축, 변경, 버전 관리할 수 있게끔 한다. 여기에서 말하는 인프라는, 컴퓨팅 인스턴스, 스토리지, 네트워킹과 같은 low-level 컴포넌트와 DNS 항목 및 SaaS 기능과 같은 High-level의 컴포넌트를 모두 포함한다.

 

*IaC(Infrastructure as Code) : 수동 프로세스가 아닌, 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말한다.

 


Terraform의 Arhictecture

Terraform Architecture / 출처 : https://spacelift.io/blog/terraform-architecture

Terraform Core

: Terraform CLI라고도 하는 Terraform Core는 Go 언어를 사용하여 개발된 정적으로 컴파일된 바이너리를 기반으로 만들어졌다.

  • 이 바이너리는 'terraform' 이라는 CLI 도구를 생성하며, 이 CLI 도구가 테라폼 사용자를 위한 기본 인터페이스 역할
  • 이 바이너리는 오픈 소스이며, Terraform GitHub 리포지토리를 통해 접근 가능

 

Terraform Provider

: Terraform provider는 테라폼이 다양한 범주의 서비스 및 리소스와 통신을 가능하게끔 해주는 모듈이다. 이러한 서비스 및 리소스는 단순히 Cloud providers, 데이터베이스, DNS 서비스 등으로만 제한되지 않는다.

  • 각 Provider는 특정 서비스 내에서 Terraform이 관리할 수 있는 리소스에 대한 정의 및 Terraform configuration 내용을 해당 서비스에 대한 특정 API 호출로 변환하는 역할을 가지고 있다.
  • Provider는 AWS, Azure, Goolge Colud와 같은 주요 클라우드 공급자에 의해 개발된 서비스 및 리소스는 물론이고, community-supported provider를 통해 다양한 서비스에 대해서도 사용이 가능하다.

 

State file

: state file은 테라폼의 기능 중 필수 요소로, 테라폼이 관리하는 리소스 정보뿐만 아니라, 리소스에 대한 현재 상태, 종속성 등을 저장하는 JSON 파일이다.

  • Terraform은 State file을 활용하여 새로운 테라폼 configuration이 적용될 때에 실제 인프라 리소스에 반영되어야 할 변경사항을 결정한다.
  • State file은 Terraform Core를 실행하는 Machine에 로컬로 보관할 수도 있고, Azure 스토리지 계정, AWS S3, 하시코프 Consul과 같은 원격 백엔드를 사용하여 원격으로 보관할 수도 있다.
  • State file에는 현재 관리 중인 인프라에 대한 민감한 정보가 포함되어 있으므로, 안전하게 보호 및 보관되어야 하고, 자주 백업하는 것이 좋다.

 

Terraform Provisioners

: 새로 생성된 리소스나 인스턴스에 대해 스크립트나 명령을 실행할 수 있도록 하는 기능. 여기에 사용되는 스크립트는 인프라 설정 및 구성, 소프트웨어 설치, 테스트 실행, 기타 필요한 작업 수행 등의 다양한 용도로 사용될 수 있음.

  • Provisioner는 리소스가 생성된 후에 실행되며, 리소스가 파괴될 때에 트리거되는 것도 가능하다.
  • 테라폼에는 해당 리소스에 파일을 복사하기 위한 file provisioner와 원격 명령 실행을 위한 remote-exec provisioner를 비롯한 여러 가지 기본 제공 provisioner가 포함되어 있다. 
  • 또한, 더 다양한 유즈케이스에 대한 커스텀 provisioner를 생성하는 것도 가능하다. 그런데 이러한 커스텀 provisioner는 테라폼에 존재하는 기존 리소스 블록으로 원하는 결과를 얻을 수 없는 경우에 최후의 수단으로 사용하는 것이 좋다.

Terraform의 동작 방식

  • Write : 다수의 클라우드 provider 및 서비스에 걸쳐 있을 수 있는 리소스에 대해서 정의하는 단계
    ex) 보안 그룹과 로드밸런서가 있는 VPC(Virtual Private Cloud) 네트워크 안에 있는 VM에 애플리케이션을 배포하도록 configuration 생성

  • Plan : 기존 인프라와 사용자가 작성한 configuration을 기반으로, 인프라스트럭처에 생성, 업데이트 ,삭제에 관한 실행 계획을 테라폼이 생성하고 리뷰하는 단계

  • Apply : Plan에 대한 리뷰 승인 후, 리소스에 대한 종속성을 고려하여 Plan에서 제안된 작업을 올바른 순서대로 수행하는 단계
    ex) VPC의 property값과 VPC 내부의 VM 개수를 변경한다고 가정하면, 이 apply 단계에서 테라폼은 VM 스케일링 작업 이전에 VPC를 먼저 다시 만든다.

다음은 테라폼 설치에 대해 알아보자!

필자의 경우, AWS의 다양한 리소스를 프로비저닝하기 위해 테라폼을 사용할 것이며, 사용 환경에 별도의 VM을 만들지 않고, 윈도우에서 제공하는 WSL을 이용하여 ubuntu 22.04 의 리눅스 OS 환경을 구성 후, 테라폼을 실행할 예정이다.

따라서 아래 Linux 기반으로 수행되는 명령어들은 모두 ubuntu 22.04 임을 참고하자!

 

Terraform 설치

https://developer.hashicorp.com/terraform/install?product_intent=terraform

 

Install | Terraform | HashiCorp Developer

Explore Terraform product documentation, tutorials, and examples.

developer.hashicorp.com

Terraform 공식 홈페이지의 Download 페이지(위 링크)로 가면, Linux에서 테라폼을 설치하는 방법이 나온다. 다음과 같이 명령어를 수행해 주자.

# 미리 생성해둔 Terraform 디렉토리로 이동하여 명령어 수행
# Terraform 디렉토리는 어디에 놔도 상관 없음

# 테라폼 설치
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

# 테라폼 설치 완료 확인(버전 확인)
terraform version

설치된 Terraform 버전 확인

 

이렇게 버전 확인이 된다면, 테라폼 설치가 완료된 것이다!


참고

https://developer.hashicorp.com/terraform/intro

 

What is Terraform | Terraform | HashiCorp Developer

Terraform is an infrastructure as code tool that lets you build, change, and version cloud and on-prem resources safely and efficiently.

developer.hashicorp.com

 

https://spacelift.io/blog/terraform-architecture

 

Terraform Architecture Introduction - Structure and Workflow

See the beginner friendly introduction to Terraform architecture and it's several key components.

spacelift.io

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기