Infra/Terraform
Terraform
peanutwalnut
2025. 7. 17. 23:04
HashiCopr에서 개발한 IaC 를 하기 위한 도구이다.
Declarative 방식으로 어떤 리소스를 어떻게 프로비저닝할지를 선언하면, Terraform이 현재 상태와
비교하여 필요한 변경만 자동으로 수행한다.
멀티클라우드를 지원해서 aws, azure, gcp, vmware, k8s 등 수백 개의 프로바이더를 통해 다양한 플랫폼을
단일 언어로 관리할 수 있다.
코드로 작성되다보니 git에 저장해 변경 이력을 추적할 수 있다.
개념 설명
Provider | AWS, Azure 등의 API와 통신해 실제 리소스를 생성·변경·삭제하는 드라이버 역할 (aws, azurerm 등). |
Resource | 생성할 대상 리소스 하나하나를 의미 (aws_instance, azurerm_virtual_network 등). |
Data Source | 이미 존재하는 리소스를 참조할 때 사용 (aws_ami 등). |
Module | 재사용 가능한 리소스 집합으로, 디렉터리나 Registry(공식·커뮤니티)에서 불러와 사용할 수 있음. |
State | 실제 인프라 현황을 .tfstate 파일에 저장하여, 다음 plan/apply 시점에 변경량을 계산하는 핵심 엔진. |
terraform init
필요한 Provider 플러그인을 다운로드하고, 백엔드(remote state) 설정을 초기화합니다.
terraform plan
선언한 설정 파일과 현재 State를 비교해 “무엇이 생성·수정·파괴될지” 실행 계획을 보여줍니다.
terraform apply
plan 결과를 실제로 적용해 리소스를 생성·수정·파괴합니다.
terraform destroy
테스트 완료 후, 생성한 리소스를 한 번에 삭제합니다.
상태 관리(State Management)
- 로컬 State: 기본적으로 작업 디렉터리 내 terraform.tfstate 파일에 저장
- 원격 State: 협업 시 S3, Consul, Terraform Cloud 등 원격 백엔드에 보관해 충돌 방지 및 잠금(lock) 지원
- State Locking: 동시에 두 사람이 apply 하는 것을 방지해 일관성 유지