πŸ”— Lab 2: Infrastructure as Code (λ¦¬μ†ŒμŠ€ μ˜μ‘΄μ„±)

λͺ©ν‘œ: VPC λ„€νŠΈμ›Œν¬μ™€ μ„œλΈŒλ„·μ„ 직접 μ •μ˜ν•˜κ³ , VM μΈμŠ€ν„΄μŠ€κ°€ ν•΄λ‹Ή λ„€νŠΈμ›Œν¬λ₯Ό μ°Έμ‘°(reference)ν•˜λ„λ‘ κ΅¬μ„±ν•˜μ—¬ λ¦¬μ†ŒμŠ€ κ°„μ˜ **μ•”μ‹œμ  μ˜μ‘΄μ„±(Implicit Dependency)**을 μ΄ν•΄ν•©λ‹ˆλ‹€.

1. main.tf μž‘μ„±

μž‘μ—… 디렉토리: terraform-labs/lab2/

provider "google" {
  region = "us-central1"
}
 
# 1. VPC λ„€νŠΈμ›Œν¬ 생성
resource "google_compute_network" "vpc_network" {
  name = "terraform-network"
  auto_create_subnetworks = false # μ»€μŠ€ν…€ μ„œλΈŒλ„· μ‚¬μš©
}
 
# 2. μ„œλΈŒλ„· 생성
resource "google_compute_subnetwork" "subnetwork" {
  name          = "terraform-subnetwork"
  ip_cidr_range = "10.20.0.0/16"
  region        = "us-central1"
  network       = google_compute_network.vpc_network.id # πŸ”— μ°Έμ‘° (μ˜μ‘΄μ„± λ°œμƒ)
}
 
# 3. λ°©ν™”λ²½ κ·œμΉ™ 생성 (SSH ν—ˆμš©)
resource "google_compute_firewall" "allow_ssh" {
  name    = "allow-ssh"
  network = google_compute_network.vpc_network.id
 
  allow {
    protocol = "tcp"
    ports    = ["22"]
  }
 
  source_ranges = ["0.0.0.0/0"] # 주의: μ‹€μŠ΅μš©μœΌλ‘œλ§Œ 전체 ν—ˆμš©
}
 
# 4. VM μΈμŠ€ν„΄μŠ€ 생성 (μ„œλΈŒλ„· μ•ˆμ— 배치)
resource "google_compute_instance" "vm_instance" {
  name         = "terraform-instance-2"
  machine_type = "e2-micro" # ✨ Free Tier
  zone         = "us-central1-a"
 
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
 
  network_interface {
    subnetwork = google_compute_subnetwork.subnetwork.id # πŸ”— μ°Έμ‘°
    access_config {
      # Public IP λΆ€μ—¬
    }
  }
}

2. ν•™μŠ΅ 포인트 (Dependency Graph)

Terraform은 μœ„ μ½”λ“œλ₯Ό 보고 μ‹€ν–‰ μˆœμ„œλ₯Ό μžλ™μœΌλ‘œ κ²°μ •ν•©λ‹ˆλ‹€.

  1. vpc_network 생성 (독립적)
  2. subnetwork 생성 (vpc_network IDκ°€ ν•„μš”ν•˜λ―€λ‘œ 1번 ν›„ μ‹€ν–‰)
  3. vm_instance 생성 (subnetwork IDκ°€ ν•„μš”ν•˜λ―€λ‘œ 2번 ν›„ μ‹€ν–‰)

3. μ‹€μŠ΅ κ°€μ΄λ“œ

  1. terraform init
  2. terraform apply
  3. 확인: GCP μ½˜μ†” > VPC λ„€νŠΈμ›Œν¬μ—μ„œ terraform-network와 10.20.0.0/16 λŒ€μ—­ 확인.
  4. terraform destroy (ν•„μˆ˜)

4. πŸ€– Gemini Prompt Tip (정석 μš”μ²­λ²•)

λ³΅μž‘ν•œ μ˜μ‘΄μ„± 관계도 사양 λͺ©λ‘(List)으둜 λͺ…ν™•νžˆ μ „λ‹¬ν•˜μ„Έμš”.

Prompt:

Generate Terraform configuration for a custom VPC network and a VM instance based on the following specifications:
 
*   VPC Name: terraform-network
*   Subnet Name: terraform-subnetwork
*   Subnet Region: us-central1
*   Subnet Range: 10.20.0.0/16
*   VM Name: terraform-instance-2
*   VM Machine Type: e2-micro
*   VM Zone: us-central1-a
*   Dependency: The VM must use the custom subnet created above.

GeminiλŠ” depends_on을 λͺ…μ‹œν•˜κ±°λ‚˜ λ¦¬μ†ŒμŠ€ ID μ°Έμ‘°λ₯Ό 톡해 μ˜μ‘΄μ„±μ„ μ˜¬λ°”λ₯΄κ²Œ μ„€μ •ν•œ μ½”λ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.


Supported by gemini-3.0-pro preview