Home » Tips Terraform para triunfar
Tips Terraform para triunfar

Tips Terraform para triunfar

Con mis años de experiencia, he decidido recopilar Tips sobre Terraform para triunfar en mis proyectos de Infraestructura como Código. Ahora te voy a mostrar cuáles son.

1. Usar VSCode (u otra alternativa)

Parece obvio, pero usar la herramienta correcta para codificar es para mí el primer gran paso. Por ahora, uso más VSCode con la extensión oficial de Hashicorp para Terraform. De forma complementaria, también instalado la extensión más genérica de Hashicorp para lenguaje HCL. Sobretodo, cuando trabajo con Terragrunt y/o Packer.

Ejemplo de VSCode con código Terraform

No pretendo que todos usen VSCode como yo, pero sí que se tomen un tiempo en elegir la herramienta correcta. También, es bueno dedicarle un tiempo a personalizarla para que nos ayude a hacer las cosas mejor.

Hay quienes prefieren usar VIM con plugins y otras configuraciones. Yo también suelo hacerlo, muchas veces.

En fin, hay varias opciones.

2. Usar tfenv para instalar versiones de Terraform

No suelo instalar Terraform manualmente (es decir, instalando desde aquí). En su lugar, uso tfenv que me asiste en la instalación de distintas versiones de Terraform. También, me ayuda a cambiar entre una versión y otra con unos simples comandos.

Aquí comparto los subcomandos de tfenv que más uso:

tfenv list-remote
tfenv install 1.4.4
tfenv use 1.4.4
tfenv list

Existen alternativas a tfenv que también podrías usar. Por ejemplo, Terraform Switcher (tfswitch), tfvm o asdf-vm. Esta última es mucho más completa porque maneja instalaciones de múltiples herramientas, no solo Terraform.

Quizá pronto me anime a hacer el cambio a asdf-vm, pero por ahora sigo usando tfenv.

Eres libre de usar la herramienta que más te guste, pero recomiendo usar alguna de estas para evitar instalaciones manuales de Terraform.

3. Usar tflint para revisar sintaxis y errores

La herramienta tflint me ayuda mucho a detectar errores o ausencia de buenas prácticas en mi código Terraform.

Si bien, editores de código como VSCode u otras alternativas, ya incluyen una revisión de sintaxis y errores, tflint ayuda. Es que esta herramienta es más completa porque soporta plugins y es extensible con reglas extras. Además, ya existe una acción para GitHub Actions, llamada setup-tflint.

Ejemplo de uso de tflint

En esta imagen de arriba muestro un ejemplo de cómo tflint detecta algunos errores que se me pasó por alto.

4. Usar terraform-docs para documentar módulos

Cada vez que trabajo con módulos, me parece súper importante generar una documentación del código. Usualmente, se incluye el listado de recursos, módulos hijo, variables, providers y outputs que están incluidos.

Toda esta información la podría generar manualmente (lo cual es tedioso y no recomendado). Pero, mejor aún si me apoyo en la herramienta terraform-docs para que lo haga por mí.

Su forma de uso es simple. Desde el mismo direictorio donde tengo mis archivos de Terraform, ejecuto esto:

terraform-docs markdown . > README.md

El archivo generado luce así:

Código Terraform y README generado

Y así es como luce el archivo README.md con su formato interpretado:

Archivo README formateado

5. Crear ejemplos de uso de código

Este último tip es más que todo una práctica que no depende de ninguna herramienta usada. Veamos de qué se trata.

Cuando se desarrolla módulos de Terraform, estos pueden volverse algo grandes y complejos en poco tiempo. De acuerdo al nivel de personalización y flexibilidad que se requiera, el número de variables y condiciones crece. Esto implica que el módulo soportará distintos casos de uso, según las variables que se le configure.

Módulo de ejemplo: AWS Security Group

Por ejemplo, asumamos que creado un módulo que soportará las siguientes funcionalidades:

  • Crear Security Groups sin reglas.
  • Crear Security Groups con reglas ingress y egress, por separado.
  • Crear reglas basadas en bloques CIDR.
  • Crear reglas basadas en Source Security Groups.
  • Crear reglas basadas en Prefix Lists.
  • Crear reglas basadas en protocolos y puertos específicos.
  • Crear reglas válidas para cualquier protocolo.
  • Crear reglas para todos los rangos de puertos.
  • Crear reglas para el protocolo ICMP.

Son muchas posibilidades si es que mi módulo soporta todas ellas. Idealmente, mi archivo variables.tf debería servir como primera fuente de documentación para entender estas posibilidades. Sino, el archivo README.md también podría ayudar.

Sin embargo, no suele ser suficiente. Ambos archivos pueden quedar cortos para explicar las diferentes formas de usar dicho módulo. Incluso si agregamos comentarios en el archivo de variables, sigue siendo insuficiente.

Ejemplo práctico

Por ejemplo, mira esta definición de la variable que uso para crear reglas del módulo ya mencionado:

Variable rules en un archivo de variables de Terraform

Intenté documentar algo con comentarios, pero el espacio queda corto. Con tan solo mirar ese código, ¿entiendes claramente toda las formas diferentes de usar la variable rules? Sospecho que no. Quizá lo hagas leyendo la documentación de AWS y Terraform, junto con un análisis detallado del resto del código. Pero esto no es práctico, mucho menos es ideal.

Archivo de ejemplo de uso del módulo Terraform creado

Fíjate que he creado un único archivo main.tf dentro del subdirectorio examples/. Ahí he invocado al módulo, al cual le paso variables necesarias. Presta atención a la variable rules y cómo he especificado los diferentes tipos de valores que admite. Además, le he agregado comentarios arriba de cada regla.

Este ejemplo del módulo de AWS Security Group parece poco complejo y pequeño. Pero, ¿te imaginas un módulo bastante grande con múltiples casos de uso? ¿Te imaginas usando variables con diccionarios de objetos complejos? En esos casos sí te servirá tener no solo un archivo de ejemplo, sino varios.

Importante

No olvides poner esto en práctica, porque la mente es frágil. Muchas veces me ha pasado que ni yo mismo recuerdo el detalle de cómo usar mi módulo bajo condiciones específicas. Más aún cuando deseo añadir funcionalidades a mi código y ya no recuerdo qué debo o no tocar.

Finalmente, el tener estos archivos de ejemplo será de gran ayuda cuando más adelante incorporemos tests con Terratest para nuestro código Terraform. Así que ya estamos preparados para entonces.

La práctica hace al maestro

Para finalizar, solo quiero resaltar que poco a poco debemos madurar en el uso de buenas prácticas de Terraform. Hay herramientas que nos ayudarán mucho, pero lo más importante será nuestro buen criterio. Así, podremos sacarle el máximo provecho a cada una de ellas.

Si te gustó el artículo, pon en práctica lo aquí aprendido y compártelo con tus colegas.

Post navigation

Deja un comentario

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *