Introducción
Las salidas de Terraform se utilizan para extraer información sobre los recursos de infraestructura del estado del proyecto. Utilizando otras características del Lenguaje de Configuración de Hashicorp (HCL), que utiliza Terraform, se puede consultar e transformar información de recursos en estructuras de datos más complejas, como listas y mapas. Las salidas son útiles para proporcionar información a software externo, que puede operar sobre los recursos de infraestructura creados.
En este tutorial, aprenderá sobre la sintaxis de las salidas de Terraform y sus parámetros creando una infraestructura simple que implementa Dropletes. También parseará las salidas de forma programática convirtiéndolas en JSON.
Prerrequisitos
- Un token de acceso personal de DigitalOcean, que puede crear a través del panel de control de DigitalOcean. Puede encontrar instrucciones en los documentos de producto de DigitalOcean, Cómo Crear un Token de Acceso Personal.
- Terraform instalado en tu máquina local y un proyecto configurado con el proveedor de DigitalOcean. Complete Paso 1 y Paso 2 del tutorial Cómo Usar Terraform con DigitalOcean, y asegúrate de denominar la carpeta del proyecto
terraform-outputs
, en lugar deloadbalance
. Durante Paso 2, no incluya la variablepvt_key
y el recurso de la clave SSH. - Familiaridad con los tipos de datos y bucles en HCL. Para obtener más información, vea el tutorial Cómo Mejorar la Flexibilidad Usando Variables, Dependencias y Condicionales en Terraform.
Nota: Este tutorial ha sido específicamente probado con Terraform 1.0.2
.
Definiendo Salidas
En esta sección, declararás un Droplet, lo desplegarás en la nube, y aprenderás sobre las salidas definiendo una que mostrará la dirección IP del Droplet.
Desde la carpeta terraform-outputs
que creaste como precondición, cree y abra el archivo droplets.tf
para edición:
Agregue el recurso de Droplet y la definición de salida siguientes:
Lo primero es declarar una instancia de Droplet llamada web
. Su nombre real en la nube será test-droplet
, en la región fra1
, con Ubuntu 20.04.
Luego, declara un salida llamada droplet_ip_address
. En Terraform, las salidas se usan para exportar y mostrar valores y información sobre los recursos internos y calculados. Aquí, establece el parámetro value
, que acepta el dato a exportar, como la dirección IP de la instancia Droplet declarada. En Terraform, el valor es desconocido hasta que la instancia de Droplet sea deployada. Las salidas se muestran después de cada deploy.
Guarde y cierre el archivo, luego deploye el proyecto ejecutando el siguiente comando:
Entrar si
cuando se le pregunte. El final del resultado será similar a este:
La dirección IP resaltada pertenece al nuevo Droplet deployeado. Al finalizar el deploy, Terraform muestra la información de las salidas al final, cuando todos los atributos de los recursos estén disponibles. Sin la salida droplet_ip_address
, Terraform solo mostraría que la instancia de Droplet fue deployeada.
Pueden también ser mostradas usando el comando output
:
El output listará todas las salidas
en el proyecto:
Outputdroplet_ip_address = ip_address
Puedes consultar una salida específica por nombre especificándola como argumento:
Para droplet_ip_address
, la salida consistirá únicamente en la dirección IP:
Outputip_address
Además de especificar el parámetro obligatorio value
, las salidas tienen algunos parámetros opcionales:
descripción
: incorpora una breve documentación detallada sobre lo que muestra la salida.depende_de
: un parámetro meta disponible en cada recurso que permite especificar explícitamente los recursos en los que el resultado depende y que Terraform no puede deducir automáticamente durante la planificación.sensible
: acepta un valor booleano, que previene que el contenido de la salida sea mostrado después de desplegarla si se establece comotrue
.
El parámetro sensible
es útil cuando las trazas de la implementación de Terraform serán públicamente disponibles, pero el contenido de la salida debería mantenerse oculto. Ahora agregaráslo a tu definición de recurso de Droplets.
Abre droplets.tf
para editar y agrega la línea resaltada:
Guarda y cierra el archivo cuando haya terminado. Deploy the project again by running:
Enter yes
when prompted. You’ll see that the output is redacted:
Even if it’s marked as sensible
, the output and its contents will still be available through other channels, such as viewing the Terraform state or querying the outputs directly.
En el paso siguiente, crearás un Droplet diferente y una estructura de salida diferente, por lo que destruye los Droplet actualmente implementados mediante la ejecución:
La salida al final será:
Output...
Destroy complete! Resources: 1 destroyed.
Ha declarado y desplegado un Droplet y creado una salida que muestra su dirección IP. Ahora aprenderás sobre el uso de salidas para mostrar estructuras más complejas, como listas y mapas.
Espacio de trabajo complejo
En esta sección, utilizarás el parámetro count
para ejecutar múltiples instancias de la misma definición de recurso con una definición modificada que incluye el índice actual y así poder distinguir entre ellas posteriormente.
Uso del bucle for
Primero deberás abrir la definición de recurso de la mochila para editarla:
La definición debe parecer así:
Estás especificando que se cree tres instancias usando el parámetro count
y has agregado el índice actual al nombre de la instancia de la nube, de manera que puedas diferenciar entre ellas más tarde. Elimine la salida existente debajo. Cuando lo haya hecho, guarde y cierre el archivo.
Aplique el código mediante la ejecución:
Terraform planeará la creación de tres nubes llamadas test-droplet-0
, test-droplet-1
, y test-droplet-2
. Entrará en sí
cuando le pregunten para finalizar el proceso. Verás la siguiente salida al final:
Output...
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Esto significa que las tres nubes han sido desplegadas exitosamente y que toda la información sobre ellas está almacenada en la estructura de estado del proyecto.
La manera más fácil de acceder a los atributos de recursos es mediante salidas, pero crear una para cada Dropletto no es escalable. La solución es usar el bucle for
para iterar sobre la lista de Droplettos y obtener sus atributos, o alternativamente usar expresiones splat (que aprenderás más tarde en este paso).
Primero definirás una salida que emitirá las direcciones IP de los tres Droplet, parejadas con sus nombres. Abre droplets.tf
para editar:
Agrega las siguientes líneas:
La valorización de salida de droplet_ip_addresses
se construye utilizando un bucle for
. Porque está encerrado entre paréntesis, el tipo resultante será un mapa. El bucle recorre la lista de Dropletos y para cada instancia, combina su nombre con su dirección IP y lo anade al mapa resultante.
Guarda y cierra el archivo, luego aplica el proyecto de nuevo:
Escribe si
cuando se le pregunte y recibirás los detalles de la salida al final:
El contenido de la salida droplet_ip_addresses
muestra las direcciones IP de los tres droplet deployados.
Usando la comanda output
de Terraform, puedes obtener el contenido de la salida como JSON usando su argumento de comando:
El resultado será similar a lo siguiente:
La interpretación de JSON es ampliamente utilizada y soportada en muchos lenguajes de programación. De esta manera, puedes analizar información programáticamente sobre los recursos deployados de Droplet.
Utilizando expresiones de dispersión
Las expresiones de dispersión proporcionan una manera compacta de iterar sobre todos los elementos de una lista y recopilar el contenido de un atributo de cada uno de ellos, resultando en una lista. Una expresión de dispersión que extraería las direcciones IP de los tres derrames desplegados tendría la siguiente sintaxis:
El simbolo [*]
trae a cabo la iteración sobre la lista a su izquierda y para cada elemento, toma el contenido del atributo especificado en la derecha. Si la referencia a la izquierda no es una lista por sí misma, se convertirá en una donde será el único elemento.
Puedes abrir droplets.tf
para editar y modificar las líneas siguientes para implementar esta funcionalidad:
Después de guardar el archivo, aplica el proyecto ejecutando el siguiente comando:
Recibirás una salida que ahora es una lista, y que contiene solo las direcciones IP de los Drops:
Para obtener la salida como JSON, ejecuta el siguiente comando:
La salida será una sola array:
Has usado conjuntos de salidas junto con expresiones de dispersión y bucles for
para exportar las direcciones IP de los Dropletas desplegadas. También has recibido el contenido de la salida como JSON, y ahora utilizarás jq
—una herramienta para filtrar dinámicamente JSON según expresiones proporcionadas—para analizarlos.
Ejecución de la salida utilizando jq
En este paso, instalarás y aprenderás los fundamentos de jq
, una herramienta para manipular documentos JSON. Usarálo para analizar las salidas de su proyecto de Terraform.
Si estás en Ubuntu, ejecuta el siguiente comando para instalar jq
:
En macOS, puede usar Homebrew para instalarlo:
jq
aplica la expresión de procesamiento proporcionada sobre la entrada que se puede enviar por tubería. La tarea más fácil en jq
es imprimir la entrada con formato atractivo:
Una vez más, siempre se puede pedir que se ejecute sin modificaciones con la operadora identidad (.
):
Puedes obtener solo la segunda dirección IP usando notación de corchetes para contar desde cero:
El resultado será:
Puedes pedir que el resultado de la expresión de procesamiento sea un arreglo, envolviéndola entre paréntesis:
Obtendrás un arreglo de JSON muy formateado:
Puedes extraer partes de arrays en lugar de elementos individuales especificando un rango de índices dentro de corchetes:
La salida será:
La rango 0:2
devuelve los dos elementos más próximos al comienzo de la lista; el límite superior no es incluyente, por lo que se obtienen solo los elementos en las posiciones 0
y 1
.
Ahora puedes destruir recursos implementados ejecutando:
En este paso, has instalado jq
y lo ha utilizado para procesar y manipular la salida de tu proyecto de Terraform, el cual despliega tres Dropletas.
Conclusión
Has aprendido sobre salidas de Terraform, usándolas para mostrar detalles sobre los recursos implementados y para exportar estructuras de datos construidas para posterior procesamiento externo. También has usado salidas para mostrar atributos de un único recurso, así como para mostrar mapas y listas conteniendo atributos de recursos.
Para más información detallada sobre las características de jq
, visite las documentaciones oficiales.
Este tutorial es parte de la serie Cómo administrar infraestructura con Terraform . La serie cubre varios temas relacionados con Terraform, desde la instalación de Terraform por primera vez hasta la gestión de proyectos complejos.