Arquitectura de Software Cloud Technology
Terraform

Terraform es una de las herramientas más potentes para implementar DevOps en nuestros proyectos, en este blog veremos y aprenderemos sus principales características.

¿Qué es Terraform?

Terraform es lo que consideramos un IaC, Infrastructure as Code. IaC es simplemente código en el que declaramos la infraestructura que deseamos crear en un proveedor específico, este código es entendible por herramientas como Terraform y aplicado contra el proveedor seleccionado.

Declarativo

Imaginemos que queremos ir de punto A al punto B en coche, nos subimos lo arrancamos y vamos hacia nuestro destino. Esta analogía es muy usada ya que eso sería lo que antiguamente haríamos cuando se nos pedía un servidor con ciertas características. Ahora con IaC únicamente nos hace falta saber nuestro  destino, que es lo que queremos implementar y Terraform se ocupará de todo el tedioso proceso de implementarlo en nuestro proveedor.

terraform
  • Identificación de los recursos necesarios para nuestra arquitectura, por ejemplo una EC2, una VPC y un S3.

  • Preparación de los archivos tf en los cuales definimos los recursos, con sus atributos (nombre, tamano de instancia etc etc…)

  • Planeamos el despliegue, Terraform posee un verbo plan en su CLI este comando nos permite ver de manera versionada todo lo que se creará y todo lo que se destruirá.

  • Aplicamos los cambios, Terraform posee un verbo apply en su CLI el cual nos permite aplicar los cambios previamente planeados contra el proveedor seleccionado.

Conectable

Terraform no sólo es Open Source, sino que también es conectable. Con esto nos referimos a que podemos trabajar de una manera muy modular con Terraform debido a que es capaz de entender módulos, sean propios o externos a la vez que herramientas de terceros que complementan Terraform ya sea Terragrunt.

DevOps lo primero

Devops como cultura nos hace pensar que los cambios y despliegues manuales deberían de ser erradicados de la faz de la tierra, por desgracia sigue habiendo. Es por eso que Terraform simplifica los despliegues de cualquier proveedor. Terraform fue diseñado con una cosa en mente, que DevOps fuera siempre lo primero. 

Esto se consigue de varias maneras:

  • La primera de todas es la manera en la que resuelve dependencias, si nosotros hoy desplegamos una versión 1.0 de una arquitectura y el día de mañana queremos desplegar una versión 2.0, no tenemos que destruir nada, simplemente aplicamos nuestros cambios. Terraform realizará un diff con lo que él ya conoce que está desplegado y aplicará los cambios restantes.
  • La segunda, es que Terraform fue pensado para que un equipo entero de arquitectos pueda realizar cambios dinámicos contra un mismo proyecto a la vez. Cuando aplicamos cambios Terraform genera una serie de archivos los cuales guardan toda la información relacionada con la infraestructura ya desplegada. Cuando otra persona desea realizar un cambio, Terraform leerá esos archivos y sabrá en qué punto de la arquitectura se encuentra.

Fiabilidad

La fiabilidad que nos puede dar Terraform en conjunción con los proveedores Cloud actuales es muy grande. El mero hecho de poder definir plantillas que nos sirvan para desplegar nuestra infraestructura de manera dinámica y sin error humano es bastante agradable.

¿Cómo se estructura?

Las mejores prácticas de Terraform son las siguientes:

  • No repetir te innecesariamente
  • Parametrizar todo lo que puedas
  • Generar código que a futuro sea reusable

Terraform utiliza el lenguaje HCL creado por ellos mismos con el fin de proveer al usuario un lenguaje simple pero con el potencial suficiente para realizar todo lo que el usuario se proponga.

Terraform trabaja por bloques, tenemos:

  • Variable nos permite definir variables que pueden ser cargadas en runtime.
  • Outputs nos permite definir outputs para cuando termine el despliegue recibir datos, ya puede ser la IP publica de una EC2 como la URL de un Bucket de S3.
  • Resource nos permiten declarar recursos válidos del proveedor seleccionado.
  • Data nos permiten realizar una llamada a las API ‘s del proveedor y recoger algún dato que necesitemos, como por ejemplo el FQDN de una base de datos.
terraform blog

Si seguimos las buenas prácticas de Terraform, deberemos de separar todas las variables en un archivo,  los outputs en otra y los recursos finalmente en otra. Lo ideal es generar un módulo por cada grupo de recursos que deseemos crear y llamarlos desde el archivo root.

Poseemos los siguientes archivos:

  • main.tf → Se llaman todos los módulos desde aquí
  • modules → Carpeta que alberga todos los módulos
  • outputs.tf → Definimos todos los outputs aquí
  • variables.tf → Definimos todas las variables aquí
  • version.tf → Definimos las versiones y los proveedores así como su configuración
  • tfvars_template → Definimos los templates de los archivos de variables

 

Consejos
Os dejamos unos consejos para los que quieran ir aprendiendo de Terraform,

Apoyaron mucho en la documentación, puede parecer una tontería pero hashicorp explica muy bien su documentación y pocas veces he tenido problemas con ella.

Usarlo y mucho. Cuando más se use mejor se va a comprender su funcionamiento.

Cuanto más os acostumbreis a usarlo antes que hacerlo a mano mejor.

 
// ¿Quieres saber más sobre Terraform?

¡Habla con nuestros expertos!

Author

CloudAPPi

Leave a comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *