Terraform: plataforma de infraestructura como código
La Infraestructura como Código (IaC por sus siglas en inglés) es un término para designar herramientas que permiten configurar recursos computacionales de forma automática haciendo uso de archivos de definición declarativos. Es decir, que recursos como los servidores, las bases de datos, las redes y otros elementos de infraestructura como software son creados y configurados de manera programática. Por lo anterior, se puede afirmar que la IaC es un método de automatización del aprovisionamiento y la gestión de la infraestructura TI. Algunas de las ventajas presentadas por esta herramienta son la automatización de despliegues, las actualizaciones controladas, la escalabilidad, la rapidez, la minimización de riesgos y la capacidad para crear un versionamiento de los recursos.
Una de las herramientas usadas por la compañía actualmente a la hora de desplegar la infraestructura por medio de código es Terraform. Esta es una herramienta de código abierto desarrollada por HashiCorp que permite definir y aprovisionar la infraestructura como código usando un lenguaje declarativo llamado HCL (lenguaje de configuración de HashiCorp). El objetivo de esta herramienta es el aprovisionamiento además del almacenamiento de la configuración de la infraestructura como código. Esto es muy similar a otras tecnologías como CloudFormation usada en AWS (Amazon Web Services); pero en el caso de Terraform esta no depende de una nube en particular, como si es el caso del ejemplo mencionado.
Adicionalmente, es importante resaltar que Terraform tiene soporte para una gran cantidad de proveedores de infraestructura en la nube como lo son AWS, Microsoft Azure u OCI (Oracle Cloud Infrastructure) para el despliegue de la infraestructura como código desarrollada por medio de Terraform. Lo anterior, es posible mediante el uso de archivos declarativos, los cuales se encargan de la comunicación con los proveedores mencionados. En un paso posterior a la comunicación mencionada es la revisión de los recursos a crear, modificar o eliminar de acuerdo a las necesidades particulares. Esto es importante debido a que después de esta revisión, solo por medio del uso de un comando, es posible llevar a cabo cualquiera de estas acciones y, por lo tanto, crear modificaciones sobre la infraestructura de la forma deseada. Es decir, después de realizar la comunicación con el proveedor deseado se procede a crear junto con las propiedades y valores los recursos a nivel de infraestructura.
Lo anterior, es posible a la definición previa de componentes de Terraform como lo son los archivos “provider”, “resources”, “modules” y “data ”. Así, podemos afirmar que algunas de las características de Terraform son la realización de la orquestación y no solo la gestión de la configuración. Además, de su capacidad de admitir múltiples proveedores, proporcionar una sintaxis simple y unificada que permite describir casi cualquier recurso, proporcionar una infraestructura inmutable donde la configuración cambia sin problemas. La capacidad de reutilizar y compartir las configuraciones que se realizan en Terraform, su escalabilidad traducida en el hecho de poder administrar tanto infraestructuras considerablemente grandes como una sola aplicación si es lo que se requiere. Adicionalmente, los despliegues pueden ser versionados, de esta forma, es más sencillo observar su progreso y así controlar los cambios de la infraestructura.
Otra característica fundamental, que posee Terraform como tecnología es que es una herramienta que puede considerarse “agnóstica” en relación al proveedor de la nube que se use para su implementación. Es decir, que el código desarrollado por medio de la infraestructura como código puede hacer referencia a elementos particulares del proveedor de nube al que se esté haciendo referencia. Así, se pueden crear los recursos particulares que solicita o identifica cada uno de los proveedores de la nube como lo son AWS, OCI o Microsoft Azure, lo que facilita la implementación de la infraestructura deseada. Lo anterior, a su vez permite que la implementación de la infraestructura para un determinado cliente no esté restringida por la opción de una nube particular, sino que por el contrario de acuerdo a sus necesidades y preferencias se pueda hacer el despliegue de la infraestructura como código con el proveedor de nube acorde a las necesidades y preferencias del negocio, logrando que Terraform sea una herramienta transversal al proveedor de nube en donde se quiera crear una infraestructura particular.
Actualmente nuestro equipo Cloud, se encuentra desarrollando un repositorio base cuyo objetivo es crear los recursos más solicitados a nivel de implementaciones de infraestructura en la nube en los tres proveedores de servicios en la nube mencionados anteriormente. La idea principal de este repositorio es que se convierta en un recurso que permita la implementación ágil de infraestructuras a la medida para los diferentes clientes, garantizando beneficios tanto para los clientes como para la organización en sí, principalmente podrán enfocarse en las tareas del negocio en lugar de estar preocupados por su transición o migración a la nube de recursos.
Como compañía el impacto también es innegable, convertir el aprovisionamiento de infraestructuras en la nube como un proceso que pueda realizarse en unas cuantas horas en vez de ser un proceso de días es un gran avance, además, permite a los consultores de las diferentes áreas enfocarse en crear valor para los clientes al prestar servicios de consultoría en temas más críticos e innovadores para ellos.
Adicionalmente, por la modularidad con la que cuenta una herramienta como Terraform es posible que el código de la infraestructura pueda ser consultado y modificado solo por las áreas asociadas al mismo. Es decir, se podría tener el código relacionado con las bases de datos de forma separada al código relacionado con la red de la infraestructura, así los especialistas en bases de datos serían los únicos autorizados para acceder al código asociado a su área. Por lo tanto, se podrían evitar cambios o modificaciones a la infraestructura por desconocimiento de los diferentes actores del proceso. Lo anterior, garantiza una diversificación del código necesaria para mantener y responder rápidamente a los requerimientos de los clientes cuya infraestructura este desarrollada bajo esta modalidad. Por último, permitirá a los consultores de las diferentes áreas enfocarse en las mejores prácticas y la innovación que podrían aportar con su conocimiento a los diferentes proyectos en los que se encuentren involucrados.
Quisimos ejemplificar algunas de las aplicaciones de Terraform en diferentes proyectos productivos, para ello entrevistamos a dos consultores que han hecho parte de estos procesos de implementación y uso de Infraestructura como Código, preguntamos sobre sus cargos y ventajas de haber usado Terraform y el valor que se generó para el cliente al usar esta tecnología. Por último, cada uno de ellos nos presenta algunos de los retos a los que se enfrentaron al empezar a usar Terraform y nos ofrecen recomendaciones a partir de su experiencia.
Entrevista con William Blanco
Cargo y responsabilidad del entrevistado en el proyecto
Actualmente me desempeño como Consultor de Aplicaciones, es decir, soy el responsable en la compañía del equipo de aplicaciones de la operación. Además, me encargo de la mejora continua de los procesos. La definición o nombre de mi cargo es “Consultor de Aplicaciones Junior” donde algunas de mis funciones son la creación de arquitecturas para soluciones, además de ser el implementador y administrador de las mismas.
¿Aporto al valor de la organización usar IaC?
Si, mucho. Por ejemplo, en el caso de los procesos de recuperación ante desastres después de la implementación con Terraform se tiene más claro que hacer en estos casos. Adicionalmente, los tiempos de recuperación son considerablemente menores y el ciclo del mismo se puede automatizar fácilmente. En relación con los tiempos de implementación, estos son considerablemente menores. E igual que en el caso anterior se puede tanto automatizar como integrar esta tecnología (Terraform) con otras soluciones usando orquestadores y otras herramientas. Teniendo en cuenta lo anterior, este ahorro de tiempo permite enfocar esfuerzos en tareas de automatización y mejora continua (teniendo en cuenta la estabilidad de las plataformas Cloud).
¿Qué fue lo más difícil para usted cuando empezó a implementar Terraform?
Para mí lo más retador fue el proceso de comprender la sintaxis del lenguaje y el uso del IDE donde se realiza el proceso de desarrollo. Pero gracias a conocimientos previos en otros lenguajes de programación y conceptos de desarrollo. Me tomó poco tiempo adaptarme al nuevo escenario.
¿Qué se debe tener en cuenta a la hora de trabajar con Terraform bajo su perspectiva?
Lo primero, es tener la necesidad y los objetivos claros. Esto incluye tanto las arquitecturas, como los tiempos y los responsables del proyecto. Lo segundo, sería realizar una definición de los lineamientos y estándares con los que se espere que cuente el proyecto desde el inicio del mismo. Además, de por supuesto respetarlos por parte de todos los miembros del equipo. Así, considero que, al tener estos dos puntos claro, lo demás se convierte en carpintería.
Entrevista con Andrés Fonseca
Cargo y responsabilidad del entrevistado en el proyecto
Consultor especialista, encargado de los proyectos de Azure.
¿Cuál cree que es la ventaja de usar Terraform?
La ventaja de usar Terraform, es que nos permite definir nuestra infraestructura como código, usando un lenguaje de programación declarativo y simple, adicional Terraform es compatible con diferentes proveedores de servicio.
¿Aporto al valor de la organización usar IaC?
Fue bastante provechoso el usar IaC en el proyecto, ya que nos permitió llevar un control de versiones en los cambios que íbamos realizando con base en las necesidades que se iban dando, además nos permitió ejecutar las tareas de despliegue de manera segura y con unos tiempos favorables.
¿Qué fue lo más difícil para usted cuando empezó a implementar Terraform?
Estructurar el código por módulos, pero es algo que con la práctica se va adaptando y volviendo manejable.
¿Qué se debe tener en cuenta a la hora de trabajar con Terraform bajo su perspectiva?
Es importante que el código que se desarrolle para desplegar su infraestructura sea modular, ya que nos permite poder reutilizar código a lo largo de varios entornos o despliegues que vayamos ejecutando. Es necesario que se asegure el fichero “tfstate” que básicamente es donde se guardan los datos con los recursos que se han ido creando con las declaraciones que hemos realizado por medio de Terraform.