Terraform 기본 개념과 핵심 원리
1️⃣ 선언형(Declarative) vs 명령형(Imperative) 접근 방식
Terraform은 선언형(Declarative) 방식을 사용하는 인프라 도구입니다.
1 명령형(Imperative) 방식
- 사용자가 구체적인 작업 절차를 지정합니다.
- 예: 셸 스크립트, Ansible Task
aws ec2 create-instance --type t2.micro ...
aws ec2 associate-security-group ...
🧩 장점: 유연한 제어
❌ 단점: 상태 추적 어렵고 코드 재사용성 낮음
2 선언형(Declarative) 방식
- 사용자는 최종 상태(desired state) 만 정의합니다.
- 실행 순서는 Terraform이 판단하여 자동으로 수행합니다.
resource "aws_instance" "web" {
ami = "ami-12345678"
instance_type = "t2.micro"
}
🧩 장점: 상태 관리 쉬움, 유지보수 효율적
✅ Terraform은 이 방식을 채택합니다!
2️⃣ Terraform 실행 순서 (init, plan, apply, destroy)
Terraform의 기본 실행 흐름은 다음과 같습니다:
📌 Terraform 실행 흐름도
init → plan → apply → destroy
1 terraform init
- 작업 디렉터리 초기화
- Provider 다운로드
terraform init
2 terraform plan
- 현재 상태와 원하는 상태 비교
- 변경 사항 미리 확인
terraform plan
3 terraform apply
- 실제 리소스 생성
plan
결과 적용
terraform apply
4 terraform destroy
- 생성한 리소스 삭제
terraform destroy
3️⃣ Terraform 파일 구조 (.tf, .tfvars, .terraform.lock.hcl)
Terraform은 여러 종류의 파일로 구성됩니다.
📁 기본 구조 예시:
project/
├── main.tf
├── variables.tf
├── terraform.tfvars
├── outputs.tf
└── .terraform.lock.hcl
1 .tf
파일
- Terraform 설정 및 리소스 정의 파일
- HCL 문법 사용
2 terraform.tfvars
- 변수에 대한 값을 정의
instance_type = "t2.micro"
3 .terraform.lock.hcl
- 사용 중인 Provider의 버전 고정
- 팀 작업 시 동일 환경 유지
4️⃣ HCL(HashiCorp Configuration Language) 문법
Terraform은 HCL이라는 간단하고 사람이 읽기 쉬운 문법을 사용합니다.
resource "aws_instance" "web" {
ami = "ami-12345678"
instance_type = "t2.micro"
tags = {
Name = "WebServer"
}
}
HCL 기본 요소
- Key = Value 형식
- 중괄호
{}
로 구조화 - 문자열은 큰따옴표
"
5️⃣ 리소스 블록(Resource Block)과 기본 구성
Terraform에서 가장 기본 단위는 리소스 블록입니다.
1 형식
resource "<PROVIDER>_<TYPE>" "<NAME>" {
# 리소스 설정
}
2 예제 - AWS EC2 인스턴스
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
"aws_instance"
: 리소스 타입"example"
: 로컬 리소스 이름 (참조 시 사용)- 블록 내에서는 속성 설정
🎯 정리
항목 | 설명 |
---|---|
선언형 방식 | 최종 상태만 정의 |
실행 흐름 | init → plan → apply → destroy |
파일 구조 | .tf , .tfvars , .lock.hcl |
문법 | HCL 문법 |
리소스 블록 | 인프라 정의의 기본 단위 |
마지막 수정일자