Terraform 치트시트 - 유용한 명령어 및 예제
전체 Terraform 명령어 목록
다음은 필수 명령어, 구성 요소, 리소스 관리, 모듈, 변수, 상태 처리 및 모범 사례를 포함한 포괄적인 Terraform 치트시트 입니다.
Terraform 은 HashiCorp 에서 개발한 오픈소스 인프라스트럭처 코드 (IaC) 도구로, 선언형 구성 파일을 사용하여 AWS, Azure, GCP 등 여러 클라우드 공급자에 걸쳐 인프라를 정의하고 프로비저닝할 수 있게 합니다. 주요 목적은 인프라 프로비저닝을 자동화하고 일관성을 보장하며 수동 오류를 줄이는 것입니다. Terraform 은 멀티 클라우드, 모듈형, 상태 기반 워크플로우를 지원하여 현대적인 DevOps 관행의 핵심이 됩니다.
더 많은 개발 도구 및 워크플로우에 대해서는 개발자 도구: 현대적 개발 워크플로우 완전 가이드 를 참조하세요.

Terraform 의 주요 이점:
- 선언형 문법: 코드로 원하는 인프라 상태를 정의합니다.
- 공급자 독립성: AWS, Azure, GCP, Kubernetes 및 기타 서비스와 호환됩니다.
- 상태 관리: 충돌을 방지하기 위해 인프라 변경 사항을 추적합니다.
설치 및 설정 가이드
https://developer.hashicorp.com/terraform/tutorials#get-started
Terraform 설치 과정은 매우 간단합니다.
-
Linux (Ubuntu/Debian):
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform -
Windows (WSL):
wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip unzip terraform.zip -
macOS (Homebrew):
brew install terraform
Terraform 작업 시 터미널 생산성 향상을 위해 Ubuntu 키보드 단축키: 완전한 치트시트 를 참조하세요.
확인
terraform --version
Terraform CLI 명령어
다음은 모든 Terraform 명령어 목록입니다:
| 명령어 | 설명 |
|---|---|
terraform init |
새 또는 기존 Terraform 구성 디렉토리를 초기화합니다 |
terraform validate |
구성이 유효한지 확인합니다 |
terraform plan |
변경 사항 없이 실행 계획을 보여줍니다 |
terraform apply |
원하는 상태를 달성하기 위해 필요한 변경 사항을 적용합니다 |
terraform destroy |
Terraform 이 관리하는 인프라를 제거합니다 |
terraform fmt |
구성 파일을 표준 스타일로 재포맷합니다 |
terraform show |
현재 상태 또는 계획을 보여줍니다 |
terraform refresh |
실제 인프라로 상태를 업데이트합니다 |
terraform providers |
구성에 사용된 공급자를 표시합니다 |
terraform graph |
리소스 종속성을 그래프로 시각화합니다 |
terraform workspace list |
모든 사용 가능한 워크스페이스를 나열합니다 |
terraform workspace new |
새로운 워크스페이스를 생성합니다 |
terraform workspace select |
지정된 워크스페이스로 전환합니다 |
terraform workspace show |
현재 워크스페이스 이름을 표시합니다 |
terraform workspace delete |
지정된 워크스페이스를 삭제합니다 |
terraform output |
상태 파일의 출력 값을 표시합니다 |
terraform import |
기존 리소스를 Terraform 으로 가져옵니다 |
terraform taint |
다음 적용 시 재생성하도록 리소스를 표시합니다 |
terraform untaint |
리소스의 오염 (taint) 표시를 해제합니다 |
terraform state list |
상태 파일의 리소스를 나열합니다 |
terraform state show |
상태에 있는 단일 리소스의 속성을 표시합니다 |
구성 필수 요소
파일 확장자
.tf: 주요 구성 파일 (HCL 문법).tfvars: 변수 값
Terraform 블록 유형
- 공급자 예시
provider "aws" { region = "us-east-1" } - 리소스 예시
resource "aws_instance" "web" { ami = "ami-0abcdef" instance_type = "t2.micro" } - 변수 예시
variable "instance_count" { type = number default = 2 } - 출력 예시
output "instance_ip" { value = aws_instance.web.public_ip } - 모듈 예시
module "vpc" { source = "./modules/vpc" cidr_block = var.vpc_cidr }
변수 활용
- 변수 선언
variable "region" { description = "AWS region" default = "us-east-1" } - 값 할당
- CLI:
terraform apply -var="region=us-west-2" - tfvars 파일:
terraform apply -var-file="prod.tfvars"
- CLI:
- 유형:
string,number,bool,list,map,object
상태 관리
- 상태 파일:
terraform.tfstate - 원격 상태 (S3 예시)
backend "s3" { bucket = "my-tf-state" key = "state.tfstate" region = "us-east-1" } - 상태 보기:
terraform show
terraform state list
반복문과 조건문
- Count
resource "aws_instance" "web" { count = 3 ... } - For_each
resource "aws_s3_bucket" "b" { for_each = var.bucket_names bucket = each.value } - 조건문
instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
함수
- 문자열 보간:
resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" } - 리스트, 맵 예시:
locals { my_map = { a = 1, b = 2 } }
프로비저너 (Provisioners)
리소스 부트스트래핑에 사용됩니다. 예시:
resource "aws_instance" "web" {
...
provisioner "local-exec" {
command = "echo Instance created"
}
}
모범 사례
- 모든
.tf파일에 대해 버전 관리 사용 - 일관된 배포를 위해 공급자 버전 잠금 사용
- 상태 관리를 위한 원격 백엔드 사용 (S3, Azure Blob 등)
- 원격 백엔드에서 상태 파일 암호화
- 재사용 가능한 모듈을 통해 인프라 모듈화
- 구성에 대한 문서화
- 프로덕션 배포 전 스테이징 환경에서 테스트
추가 참고 자료
- 도움말:
terraform --help또는[command] --help로 명령어별 도움말 확인 - 디버깅: 자세한 로그를 위해
TF_LOG=INFO또는TF_LOG=DEBUG설정 - 포맷팅:
terraform fmt - 인코딩: Base64 인코딩/디코딩 작업에 대해서는 인코딩 - Windows, Linux, Mac 에서 Base64 인코딩/디코딩 을 참조하세요
이 치트시트는 Terraform 사용의 가장 일반적이고 고급적인 측면에 대한 빠른 참조 자료로, 명령어부터 모범 사례까지 초급자와 고급 사용자 모두에게 실용적입니다. 좋은 하루 되세요!
유용한 링크
- https://developer.hashicorp.com/terraform
- Docker 치트시트
- Docker Compose 치트시트 - 가장 유용한 명령어와 예시
- Kubernetes 치트시트
- 백엔드를 포함한 Flutter 프로젝트 AWS Amplify 배포
- Hugo 생성 웹사이트를 AWS S3 에 배포
- AWS Lambda 성능: JavaScript vs Python vs Golang
- AWS SAM 과 Python 을 활용한 레이어 기반 Lambda
- AWS SAM + AWS SQS + Python PowerTools
- AWS S3 대안인 Minio. Minio 개요 및 설치