ποΈ Lab 1: Terraform Fundamentals
λͺ©ν: Terraform μ€μ νμΌμ μμ±νκ³ , GCP VM μΈμ€ν΄μ€λ₯Ό μμ±/μμ /μμ νλ κΈ°λ³Έ μν¬νλ‘μ°(init β plan β apply β destroy)λ₯Ό μ΅νλλ€.
1. main.tf μμ±
μμ
λλ ν 리: terraform-labs/lab1/
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "4.51.0"
}
}
}
provider "google" {
# gcloud config set projectλ‘ μ€μ νλ€λ©΄ μλ΅ κ°λ₯νμ§λ§ λͺ
μ κΆμ₯
# project = "[YOUR_PROJECT_ID]"
region = "us-central1"
zone = "us-central1-a"
}
resource "google_compute_instance" "vm_instance" {
name = "terraform-instance"
machine_type = "e2-micro" # β¨ Free Tier (μλ λ©: e2-medium)
tags = ["web", "dev"]
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "default"
access_config {
# Ephemeral public IP
}
}
}2. μ€μ΅ μ§ν (Workflow)
Step 1. μ΄κΈ°ν
Terraform Provider νλ¬κ·ΈμΈμ λ€μ΄λ‘λν©λλ€.
terraform initStep 2. κ³ν νμΈ
μ΄λ€ 리μμ€κ° μμ±λ μ§ λ―Έλ¦¬ λ΄ λλ€.
terraform plan+ createνμ νμΈ.
Step 3. μ μ© (μμ±)
μ€μ λ‘ GCPμ 리μμ€λ₯Ό μμ±ν©λλ€.
terraform apply
# Enter a value: yes μ
λ ₯- μλ£ ν GCP μ½μ > Compute Engineμμ
terraform-instanceκ° μμ±λμλμ§ νμΈνμΈμ.
Step 4. μΈνλΌ μμ λ° κ²μ¦
main.tfλ₯Ό μμ νμ¬ νκ·Έλ₯Ό λ³κ²½ν΄λ΄
λλ€.
tags = ["web", "dev", "test"] # "test" μΆκ°4.1 μ½λ νμ§ κ΄λ¦¬ (Best Practice)
μ€λ¬΄μμλ μ μ© μ μ νμ μ½λλ₯Ό μ 리νκ³ κ²μ¬ν©λλ€.
# μ½λ ν¬λ§·ν
(λ€μ¬μ°κΈ° μ λ ¬)
terraform fmt
# λ¬Έλ² μ ν¨μ± κ²μ¬
terraform validate4.2 μΆλ ₯ λ³μ (Outputs) μΆκ°
μμ±λ VMμ λ΄λΆ IP λ±μ νμΈνκ³ μΆλ€λ©΄ outputs.tfλ₯Ό μμ±ν©λλ€.
# outputs.tf
output "vm_internal_ip" {
value = google_compute_instance.vm_instance.network_interface.0.network_ip
}λ€μ μ μ©νλ©΄ IPκ° μΆλ ₯λ©λλ€.
terraform apply
# Apply complete! Outputs:
# vm_internal_ip = "10.128.0.2"Step 5. μμ (μ€μ!)
μ€μ΅μ΄ λλλ©΄ 리μμ€λ₯Ό μμ νμ¬ κ³ΌκΈμ λ°©μ§ν©λλ€.
terraform destroy
# Enter a value: yes μ
λ ₯3. π€ Gemini Prompt Tip (μ μ μμ²λ²)
Gemini Code Assistμκ² λͺ νν μ¬μ(Specification)μ μ μνμ¬ μ½λλ₯Ό μμ±νλ μ μμ μΈ λ°©λ²μ λλ€.
Prompt:
Generate the Terraform configuration for a Google Compute Engine virtual machine, saving it to main.tf, based on the following specifications: * Name: terraform-instance * Machine Type: e2-micro * Zone: us-central1-a * Boot Disk: Debian 11 * Network: Default network * Tags: web, dev
Geminiκ° μ μ¬μμ μλ²½νκ² λ°μν resource "google_compute_instance" λΈλ‘μ μμ±ν΄μ€λλ€. e2-microλ₯Ό λͺ
μν¨μΌλ‘μ¨ λΉμ© λ°μμ μμ² μ°¨λ¨νλ κ²μ΄ ν΅μ¬μ
λλ€.