Puntos de control
Creating Resources in terraform
/ 30
Change Infrastructure
/ 20
Destructive Changes
/ 20
Create Resource Dependencies
/ 20
Create bucket dependent instance
/ 10
Infraestructura como código con Terraform
Este lab se desarrolló junto con nuestro socio HashiCorp. Es posible que tu información personal se comparta con HashiCorp, el patrocinador del lab, si aceptaste recibir actualizaciones, anuncios y ofertas de productos en el perfil de tu cuenta.
GSP750
Descripción general
Terraform es la oferta de infraestructura como código de HashiCorp. Es una herramienta para crear, cambiar y administrar la infraestructura de forma segura y repetible. Los operadores y equipos de infraestructura pueden usar Terraform para administrar entornos con el lenguaje de configuración de HashiCorp (HCL) y lograr implementaciones automatizadas y legibles por humanos.
La infraestructura como código es el proceso de administrar infraestructura en uno o varios archivos, en lugar de configurar recursos manualmente en una interfaz de usuario. En este caso, un recurso es cualquier elemento de infraestructura en un entorno específico, como una máquina virtual, un grupo de seguridad, una interfaz de red, etc. En general, Terraform permite a los operadores usar HCL para crear archivos que contengan definiciones de los recursos que deseen en casi cualquier proveedor (AWS, Google Cloud, GitHub, Docker, etc.) y automatiza la creación de estos recursos en el momento de su aplicación.
Un flujo de trabajo sencillo para implementación será muy similar a estos pasos:
- Determinar el alcance. Confirma qué recursos se deben crear para un proyecto específico.
- Crear. Crea el archivo de configuración en HCL según los parámetros con permisos.
-
Inicializar. Ejecuta
terraform init
en el directorio del proyecto con los archivos de configuración para descargar los complementos correctos del proveedor para el proyecto. -
Planificar y aplicar. Ejecuta
terraform plan
para verificar el proceso de creación y, luego,terraform apply
para crear recursos reales y el archivo de estado, que compara los cambios futuros en tus archivos de configuración con lo que existe realmente en tu entorno de implementación.
Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
- Crear, cambiar y destruir la infraestructura con Terraform
- Crear dependencias de recursos con Terraform
- Aprovisionar infraestructura con Terraform
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
- Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su 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 debe 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: Ordene 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 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.
Activa Cloud Shell
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. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
- Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.
Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. El resultado contiene una línea que declara el PROJECT_ID para esta sesión:
gcloud
es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.
- Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
-
Haz clic en Autorizar.
-
Ahora, el resultado debería verse de la siguiente manera:
Resultado:
- Puedes solicitar el ID del proyecto con este comando (opcional):
Resultado:
Resultado de ejemplo:
gcloud
, consulta la guía con la descripción general de gcloud CLI en Google Cloud.
Tarea 1. Crea infraestructura
Terraform ya está preinstalado en Cloud Shell. Es decir, podrás comenzar a crear infraestructura de inmediato.
Comienza por crear tu configuración de ejemplo en un archivo llamado main.tf
. Terraform reconoce los archivos que terminan en .tf
o .tf.json
como archivos de configuración y los cargará cuando se ejecute.
- Crea el archivo
main.tf
:
-
Haz clic en el botón Abrir editor en la barra de herramientas de Cloud Shell. Puedes cambiar entre Cloud Shell y el editor de código con los íconos Abrir editor y Abrir terminal según sea necesario, o bien haz clic en el botón Abrir en una ventana nueva para dejar el editor abierto en una pestaña aparte.
-
En el editor, agrega el siguiente contenido al archivo
main.tf
.
terraform {}
.Bloque de Terraform
Se requiere el bloque terraform {}
, que le permite a Terraform saber qué proveedor descargar desde Terraform Registry. En la configuración anterior, la fuente del proveedor google
se definió como hashicorp/google
, que es la abreviatura de registry.terraform.io/hashicorp/google
.
También puedes asignar una versión a cada proveedor definido en el bloque required_providers
. El argumento version
es opcional, pero se recomienda incluirlo. Se utiliza para limitar el proveedor a una versión específica o a un rango de versiones para evitar que se descargue un proveedor nuevo que tal vez contenga cambios rotundos. Si no se especifica la versión, Terraform descargará automáticamente el proveedor más reciente cuando se inicialice.
Para obtener más información, consulta Requisitos para proveedores en el sitio web de HashiCorp Terraform.
Proveedores
El bloque provider
se usa para configurar el proveedor nombrado, en este caso google
. Los proveedores son responsables de crear y administrar recursos. Pueden existir varios bloques “provider” si una configuración de Terraform administra recursos de diferentes proveedores.
Inicialización
El primer comando que se debe ejecutar para obtener un archivo de configuración nuevo (o después de verificar uno existente desde el control de versiones) es terraform init
, que inicializa diversos parámetros de configuración y datos locales que se usarán en comandos posteriores.
- Ejecuta el comando
terraform init
en el mismo directorio que el archivomain.tf
para inicializar tu configuración de Terraform:
Crea recursos
- Ahora aplica tu configuración ejecutando el comando
terraform apply
:
El resultado tiene un signo +
junto al recurso "google_compute_network" "vpc_network"
, lo que significa que Terraform creará el recurso. Debajo se muestran los atributos que se establecerán. Cuando el valor que se muestra es (known after apply)
, significa que no se conocerá el valor hasta que se cree el recurso.
Si se creó correctamente el plan, Terraform se pausará y esperará a obtener la aprobación antes de continuar. Si cualquier parte del plan parece incorrecta o peligrosa, es seguro anular el proceso aquí sin que se realicen cambios en tu infraestructura.
Si terraform apply
falla y muestra un mensaje de error, léelo y corrígelo.
- En este punto, el plan parece aceptable, así que escribe
yes
en la solicitud de confirmación para continuar.
El plan tardará algunos minutos en ejecutarse porque Terraform esperará a que la red se cree correctamente:
Después de eso, Terraform habrá terminado. Puedes ir a la consola de Cloud para ver la red que aprovisionaste.
- En la consola, ve a Red de VPC en el menú de navegación. Verás que aprovisionaste
terraform-network
.
- En Cloud Shell, ejecuta el comando
terraform show
para inspeccionar el estado actual:
Estos valores podrán tomarse como referencia para configurar otros recursos o resultados que se mencionarán más adelante en este lab.
Haz clic en Revisar mi progreso para verificar el objetivo.
Tarea 2. Cambia la infraestructura
En la sección anterior, creaste una infraestructura básica con Terraform: una red de VPC. En esta sección, modificarás tu configuración y verás cómo Terraform maneja el cambio.
La infraestructura está evolucionando continuamente, y Terraform se creó para administrar y aplicar esos cambios. A medida que cambias la configuración de Terraform, el servicio crea un plan de ejecución que solo modifica lo que es necesario para alcanzar el estado deseado.
Cuando usas Terraform para cambiar la infraestructura, puedes controlar las versiones no solo de los parámetros de configuración, sino también del estado, de manera que puedes ver la forma en que la infraestructura evoluciona con el paso del tiempo.
Agrega recursos
Para incluir recursos nuevos, agrégalos a tu configuración de Terraform y ejecuta terraform apply
para aprovisionarlos.
- En el editor, agrega un recurso de instancia de procesamiento a
main.tf
:
Este recurso incluye argumentos adicionales. El nombre y el tipo de máquina son cadenas sencillas, pero boot_disk
y network_interface
son bloques más complejos. Puedes ver todas las opciones disponibles en la documentación de google_compute_instance.
Por ejemplo, tu instancia de procesamiento usará un sistema operativo Debian y se conectará a la red de VPC que creaste antes. Observa la forma en que esta configuración hace referencia a la propiedad del nombre de la red con google_compute_network.vpc_network.name
. google_compute_network.vpc_network
es el ID, que coincide con los valores del bloque que define la red, y name
es una propiedad de ese recurso.
La presencia del bloque access_config
, incluso sin ningún argumento, garantiza que se podrá acceder a la instancia a través de Internet.
- Ahora ejecuta
terraform apply
para crear la instancia de procesamiento:
- Una vez más, responde
yes
a la solicitud de confirmación.
Este es un cambio bastante sencillo: agregaste un recurso “google_compute_instance” llamado “vm_instance” a tu configuración, y Terraform creó el recurso en Google Cloud.
Cambia los recursos
Además de crear recursos, Terraform también puede realizar cambios en ellos.
- Agrega un argumento
tags
a tu "vm_instance" para que se vea así:
- Ejecuta
terraform apply
nuevamente para actualizar la instancia:
- El prefijo
~
indica que Terraform actualizará el recurso implementado. Para aplicar el cambio de inmediato, respondeyes
, y Terraform agregará las etiquetas a tu instancia.
Haz clic en Revisar mi progreso para verificar el objetivo.
Cambios destructivos
Un cambio destructivo es uno que requiere que el proveedor reemplace el recurso existente en lugar de actualizarlo. Por lo general, esto sucede porque el proveedor de servicios en la nube no admite la actualización del recurso como se describe en tu configuración.
Un ejemplo de cambio destructivo es modificar la imagen de disco de tu instancia.
- Edita el bloque
boot_disk
dentro del recursovm_instance
en tu archivo de configuración y cámbialo por lo siguiente:
- Ahora ejecuta
terraform apply
nuevamente para ver cómo Terraform aplicará el cambio a los recursos existentes:
El prefijo -/+
indica que Terraform destruirá y volverá a crear el recurso, en lugar de actualizarlo localmente. Si bien algunos atributos se pueden actualizar localmente (los que se muestran con el prefijo ~
), cambiar la imagen de disco de arranque por una instancia requiere volver a crearla. Terraform y el proveedor de Google Cloud controlan estos detalles por ti, y el plan de ejecución deja en claro lo que hará Terraform.
Además, el plan de ejecución muestra que el cambio de la imagen de disco es lo que requería tu instancia para reemplazarse. Con esta información, puedes ajustar los cambios para evitar destruir o crear actualizaciones si no son aceptables en algunas situaciones.
- Una vez más, Terraform te solicitará que apruebes el plan de ejecución antes de continuar. Responde
yes
para ejecutar los pasos planificados.
Como lo indica el plan de ejecución, Terraform primero destruyó la instancia existente y, luego, creó una nueva. Puedes usar terraform show
otra vez para ver los valores nuevos asociados con esta instancia.
Destruye la infraestructura
Ya aprendiste cómo crear y cambiar la infraestructura. Antes de crear varios recursos y mostrar sus dependencias, verás cómo destruir completamente tu infraestructura administrada por Terraform.
Destruir la infraestructura es un evento poco común en los entornos de producción, pero, si utilizas Terraform para iniciar varios entornos como desarrollo, pruebas y etapa de pruebas, es con frecuencia una acción útil.
Los recursos se pueden destruir con el comando terraform destroy
, que es similar a terraform apply
, pero este se comporta como si todos los recursos se hubieran quitado de la configuración.
- Prueba el comando
terraform destroy
. Respondeyes
para ejecutar este plan y destruir la infraestructura:
El prefijo -
indica que se destruirán la instancia y la red. Tal como sucede con apply, Terraform muestra su plan de ejecución y espera a que se apruebe antes de realizar cualquier cambio.
Al igual que con terraform apply
, Terraform determina el orden en que deben destruirse los elementos. Google Cloud no permitirá que se borre una red de VPC si aún hay recursos en ella. Por esto, Terraform espera hasta que se destruya la instancia antes de destruir la red. Cuando Terraform realiza operaciones, crea un gráfico de dependencias para determinar el orden correcto de las operaciones. En casos más complicados con varios recursos, Terraform realizará operaciones en paralelo cuando sea seguro hacerlo.
Haz clic en Revisar mi progreso para verificar el objetivo.
Tarea 3. Crea dependencias de recursos
En esta sección, aprenderás más sobre las dependencias de recursos y cómo usar parámetros de recursos para compartir información acerca de un recurso con otros recursos.
Las infraestructuras reales tienen un conjunto diverso de recursos y tipos de recursos. La configuración de Terraform puede contener muchos recursos y varios tipos de ellos, los cuales pueden incluso abarcar varios proveedores.
En esta sección, se mostrará un ejemplo básico para configurar varios recursos y cómo usar los atributos de recursos para configurar otros recursos.
- Vuelve a crear tu red y la instancia. Después de responder
yes
a la solicitud, se crearán los recursos:
Asigna una dirección IP estática
- Ahora suma a tu configuración al asignar una IP estática a la instancia de VM en
main.tf
:
Esto te parecerá similar al ejemplo anterior de adición de un recurso de instancia de VM, salvo que esta vez crearás un tipo de recurso “google_compute_address”, que asigna una dirección IP reservada a tu proyecto.
- A continuación, ejecuta
terraform plan
:
Puedes ver lo que se creará con terraform plan
:
A diferencia de terraform apply
, el comando plan
solo mostrará lo que cambiará y nunca aplicará los cambios directamente. Observa que el único cambio que hiciste hasta ahora fue agregar una IP estática. A continuación, debes conectarla a tu instancia.
- Actualiza la configuración de
network_interface
para tu instancia:
El bloque access_config
tiene varios argumentos opcionales y, en este caso, definirás nat_ip
como la dirección IP estática. Cuando Terraform lea esta configuración, hará lo siguiente:
- Se asegurará de que
vm_static_ip
se cree antes devm_instance
. - Guardará las propiedades de
vm_static_ip
en el estado. - Definirá
nat_ip
en el valor de la propiedadvm_static_ip.address
.
- Ejecutará de nuevo el plan de Terraform, pero esta vez lo guardará:
Guardar el plan de este modo garantizará que puedas aplicarlo de forma idéntica en el futuro. Si tratas de aplicar el archivo que crea el plan, Terraform se asegurará de que se realice exactamente el mismo conjunto de cambios antes de aplicarlo.
En este caso, verás que Terraform creará un nuevo recurso google_compute_address
y actualizará la VM existente para usarlo.
- Ejecuta
terraform apply "static_ip"
para ver cómo Terraform planifica aplicar este cambio:
Como se mostró anteriormente, Terraform creó la IP estática antes de modificar la instancia de VM. Debido a la expresión de interpolación que la dirección IP pasa a la configuración de la interfaz de red de la instancia, Terraform puede inferir una dependencia y sabe que esta debe crear la IP estática antes de actualizar la instancia.
Haz clic en Revisar mi progreso para verificar el objetivo.
Dependencias implícitas y explícitas
A través del análisis de los atributos de recursos utilizados en expresiones de interpolación, Terraform puede inferir automáticamente cuándo un recurso depende de otro. En el ejemplo anterior, la referencia a google_compute_address.vm_static_ip.address
crea una dependencia implícita en el recurso google_compute_address
con el nombre vm_static_ip
.
Terraform usa esta información para determinar el orden correcto en el que crear y actualizar diferentes recursos. En el ejemplo anterior, Terraform sabe que vm_static_ip
debe crearse antes de que se actualice el recurso vm_instance
para usarlo.
Las dependencias implícitas mediante expresiones de interpolación son la forma principal de informar a Terraform acerca de estas relaciones y deberían utilizarse siempre que sea posible.
A veces, hay dependencias entre los recursos que no son visibles para Terraform. El argumento depends_on
puede agregarse a cualquier recurso y acepta una lista de recursos para los cuales creará dependencias explícitas.
Por ejemplo, es posible que una aplicación que se ejecutará en tu instancia espere usar un bucket de Cloud Storage específico, pero esa dependencia está configurada dentro del código de la aplicación y, por lo tanto, no es visible para Terraform. En ese caso, puedes usar depends_on
para declarar explícitamente la dependencia.
- Incluye un bucket de Cloud Storage y una instancia con una dependencia explícita en el bucket. Para ello, agrega el siguiente código a
main.tf
:
UNIQUE-BUCKET-NAME
por un nombre válido y único para un bucket. Por lo general, usar un nombre y la fecha es una excelente forma de deducir un nombre de bucket único.
Tal vez te preguntes a qué parte de tu configuración deberían ir estos recursos. El orden en que se definen los recursos en un archivo de configuración de Terraform no afecta la forma en que este aplica tus cambios. Organiza los archivos de configuración de la manera que tenga más sentido para ti y tu equipo.
- Ahora ejecuta terraform plan y terraform apply para ver los cambios en acción:
Haz clic en Revisar mi progreso para verificar el objetivo.
- Antes de continuar, quita los recursos nuevos de tu configuración y ejecuta
terraform apply
una vez más para destruirlos. No usarás más el bucket ni la segunda instancia en este lab.
Tarea 4: Aprovisiona la infraestructura
La instancia de procesamiento que iniciaste en este punto se basa en la imagen de Google especificada, pero no tiene software adicional instalado ni una configuración aplicada.
Google Cloud permite que los clientes administren sus propias imágenes personalizadas de sistema operativo. Esta puede ser una excelente manera de asegurarte de que las instancias que aprovisiones con Terraform se configuren previamente según tus necesidades. Packer es la herramienta perfecta para esto que, además, incluye un compilador para Google Cloud.
Terraform usa aprovisionadores para subir archivos, ejecutar secuencias de comandos de shell o instalar y activar otros software, como herramientas de administración de configuración.
Define un aprovisionador
- Para definir un aprovisionador, modifica el bloque de recursos que define el primer recurso
vm_instance
en tu configuración para que se vea de la siguiente forma:
Esto agrega un bloque provisioner
dentro del bloque resource
. Se pueden agregar diferentes bloques provisioner
para definir varios pasos de aprovisionamiento. Terraform admite muchos aprovisionadores, pero, en este ejemplo, se utilizará el aprovisionador local-exec
.
El aprovisionador local-exec
ejecuta un comando localmente en la máquina que ejecuta Terraform, no en la instancia de VM. Dado que usarás este aprovisionador en lugar de los otros, no tenemos que preocuparnos de especificar información de conexión por ahora.
Esto también muestra un ejemplo más complejo de interpolación de cadena que los que viste antes. Cada instancia de VM puede tener varias interfaces de red, así que haz referencia a la primera con network_interface[0]
. El recuento comienza desde 0, como lo hace la mayoría de los lenguajes de programación, y cada interfaz de red también puede tener varios bloques access_config, por lo que una vez más debes especificar el primero.
- Ejecuta
terraform apply
:
En este punto, el resultado puede ser confuso, en un principio.
Terraform no encontró nada que hacer y, si revisas el resultado, descubrirás que no hay un archivo ip_address.txt
en tu máquina local.
Terraform trata los aprovisionadores de forma diferente a otros argumentos. Los aprovisionadores solo se ejecutan cuando se crea un recurso, pero agregar un aprovisionador no obliga a destruir y volver a crear el recurso en cuestión.
- Utiliza
terraform taint
para indicarle a Terraform que recree la instancia:
Durante la siguiente ejecución de apply
, se destruirá y se volverá a crear un recurso con fallas.
- Ejecuta
terraform apply
ahora:
- Para verificar que todo funciona correctamente, examina el contenido del archivo
ip_address.txt
.
Este contiene las direcciones IP como las solicitaste.
Aprovisionadores con errores y recursos con fallas
Si un recurso se crea correctamente, pero falla en un paso del aprovisionamiento, Terraform generará un error y marcará el recurso como fallado. Un recurso con fallas sigue existiendo, pero no es seguro para usarlo, ya que el aprovisionamiento falló.
Cuando generes tu siguiente plan de ejecución, Terraform quitará los recursos con fallas y creará recursos nuevos, y tratará de aprovisionarlos nuevamente apenas se creen.
Aprovisionadores de destrucción
Los aprovisionadores también se pueden definir para que se ejecuten solo durante una operación de destrucción. Estos son útiles para limpiar el sistema y extraer datos, entre otras acciones.
Para muchos recursos, se recomienda usar mecanismos de limpieza incorporados (como las secuencias de comandos init) si es posible, pero se pueden utilizar aprovisionadores si es necesario.
En este lab, no se mostrarán ejemplos de aprovisionadores de destrucción. Si necesitas usarlos, consulta la documentación sobre aprovisionadores.
¡Felicitaciones!
En este lab, aprendiste a crear, cambiar y destruir infraestructura con Terraform. Luego, creaste dependencias de recursos y aprovisionaste infraestructura básica con archivos de configuración de Terraform.
Próximos pasos y más información
Asegúrate de consultar los siguientes recursos para adquirir más práctica con Terraform:
- Hashicorp en Google Cloud Marketplace
- Hashicorp Learn
- Comunidad de Terraform
- Ejemplos de Google con Terraform
Capacitación y certificación de Google Cloud
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Última actualización del manual: 26 de enero de 2024
Prueba más reciente del lab: 25 de septiembre de 2023
Copyright 2024 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.