Blog

Terraform: workspaces vs. directorios

Una de las herramientas con las que trabajamos diariamente es Terraform, pero ¿qué es?

Terraform es una herramienta de infraestructura como código (IaC) desarrollada por HashiCorp, siendo su objetivo principal permitirnos automatizar y gestionar la infraestructura de nuestros clientes de manera eficiente.

Una de las principales preguntas que hay que plantearse antes de comenzar a trabajar con Terraform es la organización del código, ya que lo normal en las arquitecturas es tener varios entornos: producción, preproducción, desarrollo o los que en cada caso existan.

Pues bien, para tener el código organizado por cada entorno pueden existir infinitas formas de plantearlo, pero hoy nos centraremos en dos:

  • Opción 1: Mediante directorios.
  • Opción 2: Uso de workspaces.

Opción 1: Organización usando directorios

Suele ser la opción que se plantea cuando se empieza a trabajar con Terraform.

Como os podéis estar imaginando consiste en generar una estructura de directorios por entornos, quién lo diría ¿verdad?. El planteamiento puede tener varias opciones pero una de ellas es como la que podemos ver en la siguiente imagen:

opcion_estructura_directorio.png

Como se puede ver cada directorio representa un entorno separado, y para trabajar en cada uno de los entornos será necesario ejecutar Terraform situándose dentro de cada directorio.

Ventajas

  • Posibilidad de eliminar/añadir recursos de forma individual en cada entorno.
  • Simplicidad en la gestión de los recursos y variables.

Inconvenientes

  • Existe código duplicado, aunque este punto se puede mejorar haciendo uso de módulos que puedan usarse en los diferentes entornos.
  • En caso de necesitar realizar un cambio en alguno de los recursos se tendrá que realizar de forma individual en cada entorno.

Opción 2: Organización usando workspaces

Los workspaces es una funcionalidad de Terraform que nos permite mantener varios entornos de forma independiente en un mismo proyecto compartiendo el mismo código base.

opcion_workspaces.png

En este caso vemos que los ficheros se encuentran dentro del mismo proyecto y aunque tienen ficheros de estado y de variables diferenciados por entorno, comparte el resto de código.

Para gestionar los diferentes espacios de trabajo tenemos los siguientes comandos:

  • terraform workspace new <WORKSPACE_NAME>: Crear un workspace.
  • terraform workspace select <WORKSPACE_NAME>: Seleccionar un workspace.
  • terraform workspace list: Listar los workspace disponibles.
  • terraform workspace show: Muestra el workspace actual.
  • terraform workspace delete <WORKSPACE_NAME>: Eliminar un workspace

Ventajas

  • No hay código duplicado.
  • En el caso de realizar una corrección de algún recurso se hace de forma centralizada al compartir código.

Inconvenientes

  • Aunque se pueden generar recursos independientes para cada entorno, es más complejo.
  • Los cambios que se realicen en el código pueden afectar a todos los recursos.
  • Complejidad a la hora de gestionar cada uno de los entornos.

Conclusión

Terraform es una herramienta muy útil y que nos puede facilitar la gestión de la arquitectura cuando se trata de organizar el código para trabajar con diferentes entornos.

Dependiendo de nuestros requisitos podemos organizar nuestro entorno de trabajo por directorios, esta opción nos ofrece una mayor simplicidad, pero generamos código duplicado. Si preferimos evitar duplicar código y una corrección de errores y tratamiento de código de forma centralizada, el uso de workspaces nos resultará más útil, aunque será más complejo de gestionar.

 

Newsletter de STR Sistemas

Suscríbete a nuestra newsletter para recibir contenido interesante del mundo DevOps y artículos escritos por nuestros técnicos

¡Usamos cookies propias y de terceros para mejorar tu experiencia en esta web! Si sigues navegando, consientes y aceptas estas cookies en tu ordenador, móvil o tablet.

Más información sobre las cookies y cómo cambiar su configuración en tu navegador aquí.

x