
인프라를 코드로 작성하고 관리할 수 있게 해주는 도구이다.
AWS, GCP, Azure 같은 클라우드 인프라를 콘솔에서 직접 클릭하는 대신, .tf 파일에 코드로 정의해서 생성·변경·삭제할 수 있다.
가장 큰 특징: 선언형(Declarative) 방식
"어떤 순서로 만들지"가 아니라 "최종적으로 어떤 상태여야 하는지"만 정의하면, 나머지는 Terraform이 알아서 처리한다.
IaC(Infrastructure as Code): 인프라를 코드로 관리한다는 개념
Terraform: IaC의 개념을 실제로 구현한 도구 중 하나
기존 방식
콘솔에서 직접 인프라 생성/변경
↓
설정이 사람의 작업에 의존
↓
동일 환경 재현이 어렵고, 변경 이력 추적이 어려움
Terraform 방식
인프라를 코드(.tf 파일)로 정의
↓
코드를 Git으로 버전 관리
↓
동일한 인프라를 반복적으로 구성 가능
콘솔 작업은 사람 손에 의존하는 만큼, 같은 환경을 다시 만들거나 변경 이력을 챙기기 어려움.
반면 코드로 관리하면 변경 내역을 커밋 단위로 추적할 수 있고, 같은 코드로 동일한 구성을 반복해서 만들 수 있다.
한 줄 설명: Terraform이 어떤 플랫폼과 통신할지 지정하는 설정
resource가 어느 플랫폼의 리소스인지는 provider가 결정함provider "aws" {
region = "ap-northeast-2"
}
aws 로 지정ap-northeast-2)로 지정한 줄 설명: 실제로 생성하고 관리할 인프라 대상
resource "aws_instance" "web" {
ami = "ami-0c9c942bd7bf113a2"
instance_type = "t2.micro"
}
aws_instance라는 리소스 타입으로 EC2 하나를 정의web이라는 이름으로 참조한 줄 설명: Terraform이 관리하는 리소스와 실제 인프라를 연결하고, 변경 사항을 추적하는 데 쓰는 상태 정보
terraform.tfstate 파일에 저장되는 상태 정보한 줄 설명: 코드에서 사용하는 값을 분리해 재사용할 수 있게 해주는 요소
variable "instance_type" {
default = "t2.micro"
}
instance_type이라는 값을 변수로 분리해두면, 환경이나 상황에 따라 값만 바꿔서 같은 코드를 재사용할 수 있다.
Terraform 코드 작성
↓
terraform init
↓
terraform plan
↓
terraform apply
↓
인프라 생성/변경
plan 단계가 중간에 있는 이유
1. 실제로 바꾸기 전에 어떤 작업이 수행될지 확인하기 위함
2.현재 작업할 코드의 dependency를 고려하며 작업하기 위함
| 개념 | 역할 |
|---|---|
| IaC | 인프라를 코드로 관리한다는 개념 자체 |
| Terraform | 그 개념(IaC)을 실제로 구현한 도구 |
| AWS | 실제로 서버·네트워크 등 인프라를 제공하는 클라우드 플랫폼 |
| 개념 | 역할 |
|---|---|
| terraform plan | 변경 사항을 미리 확인함 (실제 적용 X) |
| terraform apply | 계산된 변경 사항을 실제로 적용함 |
"코드로 원하는 인프라 상태를 선언하면, Terraform이 현재 상태와 비교해 필요한 변경 사항을 계산하고 실제 인프라에 반영한다"