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 API 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 de VM, 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 de VM
- 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 o escribe el nombre del servicio o producto en el campo Búsqueda.
Tarea 1: Instala Terraform y Cloud Shell
En esta tarea, configurarás tu entorno de Cloud Shell para usar Terraform.
Instala Terraform
Terraform ahora está integrado a Cloud Shell. Verifica qué versión se instaló.
- En la consola de Google Cloud, haz clic en Activar Cloud Shell (
).
- Si se te solicita, haz clic en Continuar.
- Para confirmar que Terraform esté instalado, ejecuta el siguiente comando:
terraform --version
El resultado debería verse así:
Terraform v1.5.7
Nota: No te preocupes si recibes una advertencia de que la versión de Terraform está desactualizada, ya que las instrucciones del lab funcionan con Terraform v1.5.7 y versiones posteriores. Las descargas disponibles de la versión más reciente de Terraform están en el sitio web de Terraform. Terraform se distribuye como un paquete binario para todas las plataformas y arquitecturas compatibles, y Cloud Shell usa Linux de 64 bits.
- Ejecuta el siguiente comando a fin de 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 el proveedor para inicializar Terraform.
- Para crear un archivo nuevo dentro de 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 de 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:
# Create the mynetwork network
resource [RESOURCE_TYPE] "mynetwork" {
name = [RESOURCE_NAME]
# RESOURCE properties go here
}
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. 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, en la configuración auto_create_subnetworks toma el valor true.
- Verifica que el archivo mynetwork.tf se vea de la siguiente manera:
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
- Para guardar
mynetwork.tf, haz clic en Archivo > Guardar.
Cómo configurar la regla de firewall
Define una regla de firewall para permitir el tráfico HTTP, SSH, RDP e ICMP en mynetwork.
- Agrega el siguiente código base a
mynetwork.tf:
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" {
name = [RESOURCE_NAME]
# RESOURCE properties go here
}
- En
mynetwork.tf, reemplaza [RESOURCE_TYPE] por "google_compute_firewall" (con las comillas).
Nota: El recurso google_compute_firewall es una regla de firewall. 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 indicar 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"]
La lista de reglas allow especifica qué protocolos y puertos se permiten.
- Verifica que el archivo
mynetwork.tf se vea de la siguiente manera:
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# RESOURCE properties go here
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.
Cómo configurar 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 dentro de tfinfra, selecciona la carpeta tfinfra y haz clic en Archivo > Carpeta nueva.
- 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]
# RESOURCE properties go here
}
- 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. 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. Esto te permitirá controlar el nombre de la variable desde mynetwork.tf. Más información sobre las variables de entrada en Terraform: Define Input Variables Guide.
- 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-11"
}
}
Esta propiedad define el disco de arranque para que use la imagen de SO de Debian 11. Debido a que ambas instancias de VM usarán la misma imagen, puedes codificar esta propiedad en el módulo.
- Agrega las siguientes propiedades a
main.tf:
network_interface {
network = "${var.instance_network}"
access_config {
# Allocate a one-to-one NAT IP to the instance
}
}
Esta propiedad define la interfaz de red proporcionando su nombre como una variable de entrada y la configuración de acceso. Al dejar la configuración de acceso vacía, se obtiene una IP externa efímera (que se requiere en 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-11"
}
}
network_interface {
network = "${var.instance_network}"
access_config {
# Allocate a one-to-one NAT IP to the instance
}
}
}
- Para guardar main.tf, haz clic en Archivo > Guardar.
- 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 Archivo > Guardar.
- Agrega las siguientes instancias de VM a
mynetwork.tf:
# Create the mynet-vm-1 instance
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
}
# Create the mynet-vm-2" instance
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 indicar 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 Archivo > Guardar.
-
Verifica que mynetwork.tf se vea tal como se muestra a continuación, incluidas las llaves {}
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# RESOURCE properties go here
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
# Create the mynet-vm-1 instance
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
}
# Create the mynet-vm-2" instance
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 tu configuración, descarga y consulta estas configuraciones terminadas:
- 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, RDP e ICMP |
| 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 Check my progress para verificar el objetivo.
Crear mynetwork y sus recursos
Nota: Si recibes un mensaje de error durante la ejecución, 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.
Tarea 3: Verifica tu implementación
En la consola de Google Cloud, verifica que se hayan creado los recursos.
Verifica tu red en la consola de 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 <Enter mynet-vm-2's internal IP here>
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. Revisión
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.
Finalice su lab
Cuando haya completado el lab, haga clic en Finalizar lab. Google Cloud Skills Boost quitará los recursos que usó y limpiará la cuenta.
Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.
La cantidad de estrellas indica lo siguiente:
- 1 estrella = Muy insatisfecho
- 2 estrellas = Insatisfecho
- 3 estrellas = Neutral
- 4 estrellas = Satisfecho
- 5 estrellas = Muy satisfecho
Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.
Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.
Copyright 2020 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.