Terraform 참고 자료 - 유용한 명령어 및 예제

모든 terraform 명령어 목록

Page content

이곳에는 Terraform 사용에 필수적인 명령어, 구성 요소, 리소스 관리, 모듈, 변수, 상태 관리 및 최고의 실천 방법을 포함한 포괄적인 Terraform cheatsheet가 있습니다.

Terraform은 HashiCorp에서 개발한 오픈소스 인프라-as-code(IaC) 도구로, 사용자가 선언형 구성 파일을 통해 여러 클라우드 제공업체(AWS, Azure, GCP 등)의 인프라를 정의하고 배포할 수 있도록 합니다. 주요 목적은 인프라 배포를 자동화하고 일관성을 유지하며 수동 오류를 줄이는 것입니다. Terraform은 다중 클라우드, 모듈식, 상태 기반 워크플로우를 지원하여 현대 DevOps 실천의 핵심 요소로 자리 잡고 있습니다.

학생이 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 --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 다음 apply 시 리소스를 재생성하도록 표시합니다.
terraform untaint 리소스가 오염되었음을 해제합니다.
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 지역"
      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 }
    }
    

프로비저너

리소스를 부트스트랩하는 데 사용됩니다. 예시:

resource "aws_instance" "web" {
  ...
  provisioner "local-exec" {
    command = "echo 인스턴스 생성됨"
  }
}

최고의 실천 방법

  • 모든 .tf 파일을 버전 관리합니다.
  • 프로바이더 버전을 고정하여 일관된 배포를 보장합니다.
  • 원격 백엔드를 사용하여 상태 관리(S3, Azure Blob 등)를 수행합니다.
  • 원격 백엔드의 상태 파일을 암호화합니다.
  • 모듈을 사용하여 재사용 가능한 인프라를 구성합니다.
  • 구성을 문서화합니다.
  • 생산 전 스테이징 환경에서 테스트합니다.

추가 참고 자료

  • 도움말: terraform --help 또는 [명령어] --help로 명령어별 도움말을 확인합니다.
  • 디버깅: TF_LOG=INFO 또는 TF_LOG=DEBUG를 설정하여 상세 로그를 확인합니다.
  • 포맷팅: terraform fmt

이 cheatsheet은 Terraform 사용의 가장 일반적이고 고급적인 측면에 대한 빠른 접근 참고 자료를 제공하여, 초보자와 고급 사용자 모두에게 실용적인 도움을 줍니다.
좋은 하루 되세요!

유용한 링크