Terraform 공식 문서
Terraform | HashiCorp Developer
AWS 콘솔만 사용하다가 Terraform을 사용해보니 정말 말도 안되게 편하다. HCL 파일도 매우 직관적이고 명령어 몇개만으로 인프라를 올리고 내리고 할 수 있는 점이 너무 편하다.
심지어 user data로 자동으로 swap 설정을 하고, docker 설치부터 Nginx Proxy Manager, MySQL, Redis 환경을 한 번에 구성할 수 있었다. 앞으로 자주 사용할 것 같다.
Terraform은 클라우드, 온프레미스 리소스를 사람이 읽을 수 있는 설정 파일로 정의해 버전 관리, 재사용, 공유를 편하게 할 수 있는 인프라 도구이다.
컴퓨팅, 스토리지, 네트워킹 리소스부터 DNS, Saas 같은 구성 요소도 관리할 수 있다.
Amazon Web Service, Azure, Google Cloud Platform, Oracle Cloud Infrastructure, Docker 등의 서비스의 인프라 관리에 활용할 수 있다.
Terraform을 사용하면 CLI보다 인프라 관리를 편하게 할 수 있다.
API를 통해 클라우드 플랫폼 및 기타 서비스의 리소스를 생성하고 관리한다.

핵심 워크플로우는 다음과 같다.

https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
Terraform 업데이트
brew update
brew upgrade hashicorp/tap/terraform
설치 확인
terraform -help
우선 AWS CLI가 설치되어 있고, 리소스를 생성할 수 있는 AWS 계정 자격 증명이 완료되어 있어야 한다.
작업 디렉토리에 인프라를 정의하는 파일을 생성해야 한다.
예시 코드에서는 단순하게 VPC를 생성하도록 한다.
main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
}
}
}
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "example"
}
}
terraform { } 블록에 Terraform 설정을 작성한다. 여기선 AWS 인프라를 관리하는데 필요한 필수 provider hashicorp/aws을 정의했다.
Terraform은 기본적으로 Terraform Registry에서 provider를 설치한다.
provider는 Terraform이 리소스를 생성하고 관리하는데 사용하는 플러그인이다. “aws” provider에 리전을 설정해줬다.
resource { } 블록으로 인프라의 구성 요소를 정의한다. EC2 인스턴스 같은 물리적 가상 구성 요소일 수도 있고, Heroku 같은 논리적 리소스일 수도 있다.
새로운 구성을 생성하거나 버전 제어에서 기존 구성을 체크하웃하는 경우 디렉토리를 초기화해야한다.
terrafrom init
init 명령어를 사용하면,
.terraform에 provider를 설치하고 버전을 표시한다..terraform.lock.hcl 이라는 잠근 파일을 생성해서 프로젝트에 사용되는 provider의 업데이트를 제어할 수 있도록 한다.가독성, 일관성을 위해 구성을 자동으로 업데이트할 수 있다.
terraform fmt
구성의 구문이 유효한지, 내부적으로 동작 가능한지 확인할 수 있다.
terraform validate
현재 구성으로 인프라에 생기게 되는 변경을 확인할 수 있다.
terraform plan
terraform apply
변경사항을 적용하기 전에 인프라를 구성에 맞게 변경하기 위해 Terraform이 어떻게 동작할지 설명하는 실행 계획을 출력한다.
출력 형식은 Git 같은 도구의 diff 형식과 유사하다. +, -로 변경 사항을 확인할 수 있다.
작업 계획에 문제가 없다면, yes로 확인해 진행하면 반영된다.
인프라를 형상관리 하듯이 다룰 수 있다는 점, 여러 인프라 구성을 한 번에 자동화할 수 있다는 점에서 큰 장점이 있는 것 같다.
AWS의 서비스들부터 NCP 네이버 클라우드까지 다양한 클라우드 플랫폼에 연동 가능하다. (공식문서의 사용법 참고)
인프라 설정에 사용되는 문법 구조를 정확히는 몰라도 직관적인 구조라,
생성형 AI의 도움을 받으면 처음 사용하더라도 어렵지 않다.
인프라 구성이 단순하지 않을 때 자주 사용하게 될 것 같다.