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 프로젝트 생성
- GCP Console 접속
- 새 프로젝트 생성 (예: terraform-gcp-project)
3.2 서비스 계정 발급
- IAM & Admin → 서비스 계정 → 새 서비스 계정 생성
- 역할(Role): Editor
- 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
반응형