DEV Community

Cover image for Automatizar un despliegue en Google Cloud con Terraform
Robert Orozco
Robert Orozco

Posted on

Automatizar un despliegue en Google Cloud con Terraform

Terraform es una poderosa herramienta de infraestructura como código (IaC) que permite crear, modificar y gestionar tu infraestructura de manera segura, repetible y predecible.

TAREA 1️⃣: Usar Terraform en Cloud Shell

Google Cloud Shell ya viene con Terraform instalado. Para verificar la versión, ejecuta:

terraform --version
Enter fullscreen mode Exit fullscreen mode

📁 Ahora, crea un nuevo directorio de trabajo:
Image description
Abre el editor integrado de Cloud Shell y crea la siguiente estructura de carpetas y archivos:
Image description
🔧 Inicializa Terraform
En el archivo provider.tf define el proveedor de Google Cloud:
Image description
Luego ejecuta:

terraform init
Enter fullscreen mode Exit fullscreen mode

✅ Esto descargará los plugins necesarios y preparará tu entorno de trabajo:
Image description

TAREA 2️⃣: Configura los archivos .tf

Main.tf
Este archivo define el recurso principal, en este caso, una instancia de máquina virtual en GCP:

resource "google_compute_instance" "vm_instance" {
  name         = "${var.instance_name}"       #Nombre de la instancia
  zone         = "${var.instance_zone}"       #Zona donde se desplegará
  machine_type = "${var.instance_type}"       #Tipo de máquina (e.g. e2-medium)

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"        #Imagen base del disco (Debian 11)
    }
  }

  network_interface {
    network = "${var.instance_network}"       #Red en la que estará la VM
    access_config {
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Variables.tf
Aquí definimos las variables utilizadas en el módulo de la instancia:

variable "instance_name" {}
variable "instance_zone" {}
variable "instance_type" {
  default = "e2-micro"
  }
variable "instance_network" {}
Enter fullscreen mode Exit fullscreen mode

Mynetwork.tf
Este archivo define tres componentes fundamentales para tu infraestructura:

  • Una red VPC en modo automático
  • Una regla de firewall que permite tráfico HTTP, SSH, RDP e ICMP.
  • Dos máquinas virtuales (instancias) desplegadas en diferentes regiones.
# Crear la red "mynetwork" en modo automático
resource "google_compute_network" "mynetwork" {
  name                    = "mynetwork"
  auto_create_subnetworks = "true"  # Crea subredes automáticamente en todas las regiones
}

# Añadir una regla de firewall para permitir tráfico HTTP, SSH, RDP e ICMP
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
  name    = "mynetwork-allow-http-ssh-rdp-icmp"
  network = google_compute_network.mynetwork.self_link  # Apunta a la red creada

  allow {
    protocol = "tcp"
    ports    = ["22", "80", "3389"]  # SSH (22), HTTP (80), RDP (3389)
  }

  allow {
    protocol = "icmp"  # Permite ping
  }

  source_ranges = ["0.0.0.0/0"]  # Permite tráfico desde cualquier IP
}

# Crear la instancia "mynet-vm-1" en la zona us-west1-a usando un módulo
module "mynet-vm-1" {
  source           = "./instance"
  instance_name    = "mynet-vm-1"
  instance_zone    = "us-west1-a"
  instance_network = google_compute_network.mynetwork.self_link
}

# Crear la instancia "mynet-vm-2" en la zona asia-south1-b usando el mismo módulo
module "mynet-vm-2" {
  source           = "./instance"
  instance_name    = "mynet-vm-2"
  instance_zone    = "asia-south1-b"
  instance_network = google_compute_network.mynetwork.self_link
}
Enter fullscreen mode Exit fullscreen mode

TAREA 3️⃣: Despliegue de infraestructura

terraform plan
terraform apply
Enter fullscreen mode Exit fullscreen mode

El resultado
Image description

Image description

🎯 Terraform te da el poder de automatizar tu infraestructura desde código, garantizando entornos replicables, consistentes y fáciles de mantener.

Top comments (1)

Collapse
 
nevodavid profile image
Nevo David

pretty cool seeing this broken down into real steps tbh - you think keeping these setups reliable long-term is all about regular updates or does it get more complicated?