Devops/Terraform

[테라폼] 테라폼(Terraform) 완전 정복: GCP 인프라를 Terraform으로 완전 자동화하기: GCP Compute (VM) 마스터 - 1

일요일좋아하는사람 2025. 4. 26. 21:32
728x90
반응형

 


1. 들어가며

이번 시간에는 Terraform을 이용해서 GCP의 Compute Engine VM 인스턴스를 구축하는 방법을 단계별로 알아봅니다.

Terraform은 클라우드 리소스를 코드로 관리(Infrastructure as Code)할 수 있게 해주는 강력한 도구입니다. GCP와 Terraform을 연동하면, 클릭 없이 수십, 수백 대의 VM을 안정적으로 만들고 관리할 수 있습니다.

본 글에서는 GCP 프로젝트 생성 → 서비스 계정 발급 → Terraform Provider 설정 → VPC 구성 → VM 생성까지 완전 실습합니다.


2. 기본 개념 정리

개념 설명

Terraform 인프라를 코드로 관리하는 IaC 도구 (HashiCorp 제작)
GCP Compute Engine GCP에서 제공하는 가상 머신 서비스
Provider Terraform이 클라우드와 통신하게 해주는 플러그인 (GCP, AWS 등)

3. 환경 준비

3.1 GCP 프로젝트 생성

  1. GCP Console 접속
  2. 새 프로젝트 생성 (예: terraform-gcp-project)

3.2 서비스 계정 발급

  1. IAM & Admin → 서비스 계정 → 새 서비스 계정 생성
  2. 역할(Role): Editor
  3. JSON 키 다운로드 (중요!)

환경변수 설정:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account.json"

3.3 API 활성화

  • Compute Engine API 활성화

3.4 Terraform 설치

brew install terraform

(또는 Terraform 공식 다운로드 페이지 참고)


4. Terraform 프로젝트 생성

4.1 디렉터리 구조 만들기

mkdir terraform-gcp-vm
cd terraform-gcp-vm

# 파일 생성
touch provider.tf variables.tf outputs.tf main.tf

4.2 파일 내용 준비

provider.tf

provider "google" {
  project     = var.project_id
  region      = var.region
  credentials = file(var.credentials_file)
}

variables.tf

variable "project_id" {}
variable "region" {}
variable "credentials_file" {}

outputs.tf

output "instance_ip" {
  value = google_compute_instance.default.network_interface[0].access_config[0].nat_ip
}

5. VPC와 Subnet 만들기

main.tf (VPC 부분)

resource "google_compute_network" "vpc_network" {
  name = "terraform-vpc"
}

resource "google_compute_subnetwork" "subnet" {
  name          = "terraform-subnet"
  ip_cidr_range = "10.0.0.0/16"
  region        = var.region
  network       = google_compute_network.vpc_network.id
}

6. VM 인스턴스 만들기

main.tf (VM 부분)

resource "google_compute_instance" "default" {
  name         = "terraform-vm"
  machine_type = "e2-medium"
  zone         = "${var.region}-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network    = google_compute_network.vpc_network.id
    subnetwork = google_compute_subnetwork.subnet.id
    access_config {}
  }

  metadata_startup_script = <<-EOT
    #!/bin/bash
    sudo apt update
    sudo apt install -y nginx
  EOT
}
  • metadata_startup_script를 통해 VM 생성 직후 nginx가 자동 설치됩니다.

7. 여러 대의 VM 인스턴스 생성하기

count 사용하기

resource "google_compute_instance" "multiple" {
  count        = 3
  name         = "terraform-vm-${count.index}"
  machine_type = "e2-medium"
  zone         = "${var.region}-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network    = google_compute_network.vpc_network.id
    subnetwork = google_compute_subnetwork.subnet.id
    access_config {}
  }
}
  • 위 코드로 3개의 VM을 한 번에 생성할 수 있습니다.

8. Terraform 적용하기

초기화 (Init)

terraform init

출력 예시:

Terraform has been successfully initialized!

플랜 (Plan)

terraform plan

출력 예시:

Plan: 5 to add, 0 to change, 0 to destroy.

적용 (Apply)

terraform apply

출력 예시:

Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
  • GCP Console에서도 VM 인스턴스가 생성된 걸 확인할 수 있습니다.

9. 에러 케이스 & 트러블슈팅

에러 메시지 해결 방법

provider "google" requires credentials 환경변수 경로 잘못 설정했는지 확인
Quota exceeded VM 수를 줄이거나 GCP에 쿼터 상향 요청
Resource already exists 동일한 리소스 이름 중복 생성. 이름 변경 필요

10. 정리

오늘은 Terraform을 이용해 GCP에 직접 VPC, Subnet, 그리고 VM 인스턴스를 자동으로 구축해봤습니다. 단순한 클릭 작업 없이 코드 한 줄로 클라우드 인프라를 통제하는 경험을 해봤습니다.

728x90
반응형