Descripción general
Terraform te permite crear, cambiar y mejorar infraestructura de forma segura y predecible. Es una herramienta de código abierto que codifica las APIs en archivos de configuración declarativa que se pueden compartir entre los miembros de un equipo, tratar como código, editar, revisar o cambiar de versión.
En este lab, crearás una configuración de Terraform con un módulo para automatizar la implementación de la infraestructura de Google Cloud. En particular, implementarás una red de modo automático con una regla de firewall y dos instancias, como se muestra en este diagrama:

Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
- Crear una configuración para una red de modo automático
- Crear una configuración para una regla de firewall
- Crear un módulo para instancias
- Crear e implementar una configuración
- Verificar la implementación de una configuración
Configuración
En cada lab, recibirás un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.
-
Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá una ventana emergente para que selecciones tu forma de pago.
A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
- El botón Abrir la consola de Google Cloud
- El tiempo restante
- Las credenciales temporales que debes usar para el lab
- Otra información para completar el lab, si es necesaria
-
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordena las pestañas en ventanas separadas, una junto a la otra.
Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta.
-
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}}
También puedes encontrar el nombre de usuario en el panel Detalles del lab.
-
Haz clic en Siguiente.
-
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}}
También puedes encontrar la contraseña en el panel Detalles del lab.
-
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud.
Nota: Usar tu propia cuenta de Google Cloud para este lab podría generar cargos adicionales.
-
Haga clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Nota: Para ver un menú con una lista de productos y servicios de Google Cloud, haz clic en el menú de navegación que se encuentra en la parte superior izquierda.
Tarea 1: Instala Terraform y Cloud Shell
En esta tarea, configurarás tu entorno de Cloud Shell para que use Terraform.
Activa Google Cloud Shell
Google Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud.
Google Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
-
En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.

-
Haz clic en Continuar.
El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. Por ejemplo:

gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con el completado de línea de comando.
- Puedes solicitar el nombre de la cuenta activa con este comando:
gcloud auth list
Resultado:
Credentialed accounts:
- @.com (active)
Resultado de ejemplo:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Puedes solicitar el ID del proyecto con este comando:
gcloud config list project
Resultado:
[core]
project =
Resultado de ejemplo:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Nota:
La documentación completa de gcloud está disponible en la
guía de descripción general de gcloud CLI
.
Instala Terraform
Terraform no está preinstalado en Cloud Shell. Debes instalar la CLI de Terraform y configurarla para que persista en tus sesiones de Cloud Shell.
- Para configurar el repositorio de HashiCorp e instalar Terraform, y asegurarte de que esta instalación persista en sesiones futuras, ejecuta los siguientes comandos en la terminal de Cloud Shell:
cat <<'EOF' > ~/.customize_environment
# Set up HashiCorp repository and install Terraform
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install -y terraform
EOF
bash ~/.customize_environment
- Para verificar que Terraform se haya instalado correctamente, ejecuta el siguiente comando:
terraform --version
En el resultado, se debería mostrar la versión instalada (v1.5.7 o posterior):
Terraform v1.9.0
Crea los archivos de configuración
Ahora que instalaste Terraform, crea el directorio y los archivos para tu configuración de Terraform.
- Ejecuta el siguiente comando para crear un directorio para tu configuración de Terraform:
mkdir tfinfra
- En Cloud Shell, haz clic en Abrir editor (
).
Nota: Si ves el mensaje "No se puede cargar el editor de código porque las cookies de terceros no están habilitadas", haz clic en Abrir en una ventana nueva. El editor de código se abrirá en una pestaña nueva. Regresa a la pestaña original, haz clic en Abrir terminal y luego vuelve a la pestaña del editor de código. Deberás volver varias veces a la terminal de Cloud Shell en este lab.
- En el panel izquierdo del editor de código, expande la carpeta tfinfra.
Inicializa Terraform
Terraform usa una arquitectura basada en complementos para admitir la gran cantidad de proveedores de servicio y de infraestructura disponibles. Cada "proveedor" es su propio objeto binario encapsulado y distribuido por separado de Terraform. Configura Google como proveedor para inicializar Terraform.
- Para crear un archivo nuevo en la carpeta tfinfra,
haz clic con el botón derecho en la carpeta tfinfra y, luego, haz clic en New File.
- Asígnale el nombre provider.tf al archivo nuevo y, luego, ábrelo.
- Copia el código en
provider.tf:
provider "google" {}
-
Para guardar provider.tf, haz clic en File > Save.
-
Para inicializar Terraform, ejecuta el siguiente comando:
cd tfinfra
terraform init
Ya puedes comenzar a trabajar con Terraform en Cloud Shell.
Tarea 2: Crea mynetwork y sus recursos
En esta tarea, crearás la red de modo automático mynetwork junto con su regla de firewall y dos instancias de VM (mynet_vm_1 y mynet_vm_2).
Configura mynetwork
Crea una configuración nueva y define mynetwork.
- Para crear un archivo nuevo dentro en la carpeta tfinfra,
haz clic con el botón derecho en la carpeta tfinfra y, luego, haz clic en New File.
- Asígnale el nombre mynetwork.tf al archivo nuevo y, luego, ábrelo.
- Copia el siguiente código base en
mynetwork.tf:
# Crea la red mynetwork
resource [RESOURCE_TYPE] "mynetwork" {
name = [RESOURCE_NAME]
# Aquí van las propiedades del RECURSO
}
Esta plantilla base es un gran punto de partida para todos los recursos de Google Cloud. El campo name permite asignarle un nombre al recurso y el campo type permite especificar el recurso de Google Cloud que quieres crear. También puedes definir propiedades, aunque para algunos recursos son opcionales.
- En
mynetwork.tf, reemplaza [RESOURCE_TYPE] por "google_compute_network" (con las comillas).
Nota: El recurso google_compute_network es una red de VPC. Los recursos disponibles se encuentran en la documentación del proveedor de Google Cloud. Obtén más información sobre este recurso en particular en la documentación de Terraform.
- En
mynetwork.tf, reemplaza [RESOURCE_NAME] por "mynetwork" (con las comillas).
- Agrega la siguiente propiedad a
mynetwork.tf:
auto_create_subnetworks = true
Por definición, una red de modo automático crea una subred en cada región automáticamente. Por lo tanto, debes configurar auto_create_subnetworks como true.
- Verifica que el archivo mynetwork.tf se vea de la siguiente manera:
# Crea la red mynetwork
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# Aquí van las propiedades del RECURSO
auto_create_subnetworks = true
}
- Para guardar
mynetwork.tf, haz clic en File > Save.
Configura la regla de firewall
Define una regla de firewall para permitir el tráfico HTTP, SSH, ICMP y RDP en mynetwork.
- Agrega el siguiente código base a
mynetwork.tf:
# Agrega una regla de firewall para permitir el tráfico HTTP, SSH, ICMP y RDP en mynetwork
resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" {
name = [RESOURCE_NAME]
# Aquí van las propiedades del RECURSO
}
- En
mynetwork.tf, reemplaza [RESOURCE_TYPE] por "google_compute_firewall" (con las comillas).
Nota: El recurso google_compute_firewall es una regla de firewall. Obtén más información sobre este recurso en particular en la documentación de Terraform.
- En
mynetwork.tf, reemplaza [RESOURCE_NAME] por "mynetwork-allow-http-ssh-rdp-icmp" (con las comillas).
- Agrega la siguiente propiedad a
mynetwork.tf:
network = google_compute_network.mynetwork.self_link
Nota: Dado que la regla de firewall depende de su red, usa la referencia google_compute_network.mynetwork.self_link para indicarle a Terraform que resuelva esos recursos en un orden dependiente. En este caso, se crea la red antes que la regla de firewall.
- Agrega las siguientes propiedades a
mynetwork.tf:
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
En la lista de reglas allow, se especifica qué protocolos y puertos se permiten.
- Verifica que el archivo
mynetwork.tf se vea de la siguiente manera:
# Crea la red mynetwork
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# Aquí van las propiedades del RECURSO
auto_create_subnetworks = "true"
}
# Agrega una regla de firewall para permitir el tráfico HTTP, SSH, ICMP y RDP en mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# Aquí van las propiedades del RECURSO
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
- Para guardar mynetwork.tf, haz clic en File > Save.
Configura la instancia de VM
Crea un módulo para definir las instancias de VM. Un módulo es una configuración reutilizable dentro de una carpeta. Usarás ese módulo para ambas instancias de VM de este lab.
- Para crear una carpeta nueva en tfinfra, selecciona la carpeta tfinfra y haz clic en File > New Folder.
- Asígnale el nombre instance a la carpeta nueva.
- Para crear un archivo nuevo dentro de instance,
haz clic con el botón derecho en la carpeta instance y, luego, haz clic en New File.
- Asígnale el nombre main.tf al archivo nuevo y, luego, ábrelo.
Debería tener la siguiente estructura de carpetas en Cloud Shell:

- Copia el siguiente código base en main.tf:
resource [RESOURCE_TYPE] "vm_instance" {
name = [RESOURCE_NAME]
# Aquí van las propiedades del RECURSO
}
- En
main.tf, reemplaza [RESOURCE_TYPE] por "google_compute_instance" (con las comillas).
Nota: El recurso google_compute_instance es una instancia de Compute Engine. Obtén más información sobre este recurso en particular en la documentación de Terraform.
- En
main.tf, reemplaza [RESOURCE_NAME] por "${var.instance_name}" (con las comillas).
Debido a que usarás este módulo para ambas instancias de VM, definirás el nombre de la instancia como una variable de entrada. Así, podrás controlar el nombre de la variable desde mynetwork.tf. Obtén más información sobre las variables de entrada en la guía para definir variables de entrada de Terraform.
- Agrega las siguientes propiedades a
main.tf:
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
Estas propiedades definen la zona y el tipo de máquina de la instancia como variables de entrada.
- Agrega las siguientes propiedades a
main.tf:
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
}
}
Esta propiedad define el disco de arranque para que use la imagen de SO de Debian 12. Debido a que ambas instancias de VM usarán la misma imagen, hacer que esta propiedad esté hard-coded en el módulo.
- Agrega las siguientes propiedades a
main.tf:
network_interface {
network = "${var.instance_network}"
access_config {
# Asígnale una IP con NAT uno a uno a la instancia
}
}
Esta propiedad define la interfaz de red brindando su nombre como una variable de entrada y la configuración de acceso. Si se deja vacía la configuración de acceso, el resultado será una dirección IP externa efímera (que es uno de los requisitos de este lab). Para crear instancias con solo una dirección IP interna, quita la sección access_config. Para obtener más información, consulta la documentación de Terraform.
- Verifica que
main.tf se vea tal como se muestra a continuación, incluidas las llaves {}:
resource "google_compute_instance" "vm_instance" {
name = "${var.instance_name}"
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
}
}
network_interface {
network = "${var.instance_network}"
access_config {
# Asígnale una IP con NAT uno a uno a la instancia
}
}
}
- Para guardar main.tf, haz clic en File > Save.
- Para crear un archivo nuevo dentro de instance,
haz clic con el botón derecho en la carpeta instance y, luego, haz clic en New File.
- Asígnale el nombre variables.tf al archivo nuevo y, luego, ábrelo.
- Define las 4 variables de entrada en
variables.tf.
variable "instance_name" {}
variable "instance_zone" {}
variable "instance_type" {
default = "e2-micro"
}
variable "instance_network" {}
Cuando le asignas un valor predeterminado a instance_type, haces que la variable sea opcional. Los valores de instance_name, instance_zone e instance_network son obligatorios y los definirás en mynetwork.tf.
- Para guardar variables.tf, haz clic en File > Save.
- Agrega las siguientes instancias de VM a
mynetwork.tf:
# Crea la instancia mynet-vm-1
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Crea la instancia mynet-vm-2
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
Estos recursos aprovechan el módulo de la carpeta instance y proporcionan el nombre, la zona y la red como entradas. Puesto que esas instancias dependen de una red de VPC, debes utilizar la referencia google_compute_network.mynetwork.self_link para indicarle a Terraform que resuelva esos recursos en un orden dependiente. En este caso, la red se crea antes que la instancia.
Nota: El beneficio de escribir un módulo de Terraform es que se puede reutilizar en varios parámetros de configuración. En lugar de escribir tu propio módulo, también puedes aprovechar otros disponibles en el registro de módulos de Terraform.
-
Para guardar mynetwork.tf, haz clic en File > Save.
-
Verifica que mynetwork.tf se vea tal como se muestra a continuación, incluidas las llaves {}
# Crea la red mynetwork
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# Aquí van las propiedades del RECURSO
auto_create_subnetworks = "true"
}
# Agrega una regla de firewall para permitir el tráfico HTTP, SSH, ICMP y RDP en mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# Aquí van las propiedades del RECURSO
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
# Crea la instancia mynet-vm-1
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Crea la instancia mynet-vm-2
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
Crea mynetwork y sus recursos
Llegó la hora de aplicar la configuración mynetwork.
- Para volver a escribir los archivos de configuración de Terraform en un formato y estilo canónicos, ejecuta el siguiente comando:
terraform fmt
El resultado debería verse así:
mynetwork.tf
Nota: Si recibes un mensaje de error, revisa los pasos anteriores para asegurarte de que tu configuración coincida con las instrucciones del lab. Si no puedes solucionar el problema de configuración, descarga y consulta estos archivos terminados:
- Para inicializar Terraform, ejecuta el siguiente comando:
terraform init
El resultado debería verse así:
Initializing modules...
- mynet-vm-2 in instance
- mynet-vm-2 in instance
...
Terraform has been successfully initialized!
Nota: Si recibes un mensaje de error, revisa los pasos anteriores para asegurarte de que cuentas con la estructura de carpetas y archivos correcta. Si el problema persiste, consulta los archivos de configuración terminados que vinculamos anteriormente. Una vez resuelto el problema, vuelve a ejecutar el comando anterior.
- Para crear un plan de ejecución, ejecuta el siguiente comando:
terraform plan
El resultado debería verse así:
...
Plan: 4 to add, 0 to change, 0 to destroy.
...
Terraform determinó que se deben agregar los siguientes 4 recursos:
| Nombre |
Descripción |
| mynetwork |
Red de VPC |
| mynetwork-allow-http-ssh-rdp-icmp |
Regla de firewall para permitir HTTP, SSH, ICMP y RDP |
| mynet-vm-2 |
Instancia de VM en
|
| mynet-vm-2 |
Instancia de VM en
|
- Para aplicar los cambios deseados, ejecuta el siguiente comando:
terraform apply
- Para confirmar las acciones planificadas, escribe lo siguiente:
yes
El resultado debería verse así:
...
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear mynetwork y sus recursos
Nota: Si recibes un mensaje de error durante la ejecución, vuelve a revisar los pasos anteriores para asegurarte de que cuentas con la estructura de carpetas y archivos correcta. Si el problema persiste, consulta los archivos de configuración terminados que vinculamos anteriormente. Una vez resuelto el problema, vuelve a ejecutar el comando anterior.
Tarea 3: Verifica tu implementación
En la consola de Google Cloud, verifica que se hayan creado los recursos.
Verifica tu red de nube privada virtual (VPC) en la consola de Google Cloud
- En el menú de navegación (
) de la consola de Google Cloud, haz clic en Red de VPC > Redes de VPC.
- Visualiza la red de VPC mynetwork con una subred en cada región.
- En el menú de navegación, haz clic en Red de VPC > Firewall.
- Ordena las reglas de firewall por Red.
- Consulta la regla de firewall mynetwork-allow-http-ssh-rdp-icmp para mynetwork.
Verifica tus instancias de VM en la consola de Cloud
- En el menú de navegación (
), haz clic en Compute Engine > Instancias de VM.
- Revisa que estén las instancias mynet-vm-1 y mynet-vm-2.
- Toma nota de la dirección IP interna de mynet-vm-2.
- En mynet-vm-1, haz clic en SSH para iniciar una terminal y conectarte.
- Para probar la conectividad con la dirección IP interna de mynet-vm-2, ejecuta el siguiente comando en la terminal SSH (reemplaza la dirección IP interna de mynet-vm-2 por el valor que anotaste antes):
ping -c 3 <Ingresa aquí la IP interna de mynet-vm-2>
Nota: Este comando debería funcionar porque ambas instancias de VM están en la misma red y la regla de firewall permite el tráfico de ICMP.
Tarea 4: Haz un repaso
En este lab, creaste una configuración de Terraform con un módulo para automatizar la implementación de la infraestructura de Google Cloud. A medida que cambia tu configuración, Terraform puede crear planes de ejecución incrementales, lo que te permitirá crear tu configuración general paso a paso.
El módulo de instancia te permitió reutilizar la misma configuración para varios recursos y te brindó propiedades como variables de entrada. Puedes aprovechar la configuración y el módulo que creaste como punto de partida en implementaciones futuras.
Finaliza el lab
Cuando hayas completado el lab, haz clic en Finalizar lab. Google Skills quitará los recursos que usaste y limpiará la cuenta.
Tendrás la oportunidad de calificar tu experiencia en el lab. Selecciona la cantidad de estrellas que corresponda, ingresa un comentario y haz clic en Enviar.
La cantidad de estrellas indica lo siguiente:
- 1 estrella = Muy insatisfecho
- 2 estrellas = Insatisfecho
- 3 estrellas = Ni satisfecho ni insatisfecho
- 4 estrellas = Satisfecho
- 5 estrellas = Muy satisfecho
Puedes cerrar el cuadro de diálogo si no deseas proporcionar comentarios.
Para enviar comentarios, sugerencias o correcciones, usa la pestaña Asistencia.
Copyright 2026 Google LLC. Todos los derechos reservados. Google y el logotipo de Google son marcas de Google LLC. El resto de los nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que están asociados.