Terraform 치트시트 - 유용한 명령어 및 예제

전체 Terraform 명령어 목록

Page content

다음은 필수 명령어, 구성 요소, 리소스 관리, 모듈, 변수, 상태 처리 및 모범 사례를 포함한 포괄적인 Terraform 치트시트 입니다.

Terraform 은 HashiCorp 에서 개발한 오픈소스 인프라스트럭처 코드 (IaC) 도구로, 선언형 구성 파일을 사용하여 AWS, Azure, GCP 등 여러 클라우드 공급자에 걸쳐 인프라를 정의하고 프로비저닝할 수 있게 합니다. 주요 목적은 인프라 프로비저닝을 자동화하고 일관성을 보장하며 수동 오류를 줄이는 것입니다. Terraform 은 멀티 클라우드, 모듈형, 상태 기반 워크플로우를 지원하여 현대적인 DevOps 관행의 핵심이 됩니다.

더 많은 개발 도구 및 워크플로우에 대해서는 개발자 도구: 현대적 개발 워크플로우 완전 가이드 를 참조하세요.

student using terraform

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"
  • 유형: 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 사용의 가장 일반적이고 고급적인 측면에 대한 빠른 참조 자료로, 명령어부터 모범 사례까지 초급자와 고급 사용자 모두에게 실용적입니다. 좋은 하루 되세요!

유용한 링크