Terraform
Hoy en día, cada vez más empresas utilizan la nube para implementar entornos de trabajo o incluso estructuras de TIC completas. Para ello, la infraestrutura como servicio (IaaS) se presenta en muchos casos como una forma sencilla y económica de crear la base de los proyectos. Además, las soluciones en la nube permiten responder con precisión a las necesidades que vayan surgiendo: mientras que, en el centro de datos de un proveedor, componentes como el servidor, el cortafuegos o el balanceador de carga permanecen estáticos, en un entorno en la nube virtualizado estos pueden modificarse de forma dinámica. De este modo, los usuarios siempre pueden aumentar o disminuir los recursos según lo requieran.
Para garantizar esta flexibilidad, los proveedores proporcionan diferentes API con las que escalar el entorno IaaS alquilado cuando sea necesario usando el software pertinente. Aunque disponer de esta libertad presenta un gran atractivo, también requiere un importante trabajo de gestión. Terraform, de la empresa estadounidense HashiCorp, puede minimizar dicho esfuerzo a largo plazo. Descubre a continuación en qué consiste esta herramienta de infraestructura como código (IaC, del inglés infrastructure as code).
¿Qué es Terraform?
En el desarrollo de software, cuando los administradores tratan con la infraestructura subyacente se han de enfrentar a desafíos continuos: una inclinación cada vez mayor por el desarrollo ágil contribuye a un acortamiento progresivo de los ciclos de desarrollo y una implementación más rápida de los cambios. Pero llevar este ritmo también tiene unas exigencias altas, para lo que los administradores de TIC necesitan automatizar al máximo la gestión de los recursos, lo que supone escribir un código de configuración legible para las máquinas. A esto se lo conoce como infraestructura como código (IaC).
Para simplificar este proceso, los administradores de TIC pueden recurrir a los servicios del software Terraform, el cual, por un lado, permite describir de manera uniforme la infraestructura de destino y, por el otro, garantiza que esta se implemente de acuerdo con los requisitos de los proveedores de IaaS compatibles. El software también permite guardar las configuraciones de la infraestructura aprovisionada para que puedan reutilizarse en una fecha posterior o ampliarse o adaptarse de cualquier forma.
Terraform es un servicio de IaC de código abierto (Mozilla Public License 2.0) desarrollado en 2012 por la empresa con sede en San Francisco HashiCorp que se puede usar y descargar sin coste. No obstante, hay algunas funciones para el trabajo en equipo, así como para instituciones y organizaciones públicas, a las que solo se puede acceder con las ediciones de pago “Enterprise Pro” y “Enterprise Premium”.
Terraform trabaja con más de 160 socios diferentes, entre los que se incluyen Amazon Web Services (AWS), Atlassian, Cloudflare, Google, Microsoft y Oracle. En el sitio web oficial de HashiCorp encontrarás un listado con todos los socios oficiales.
Cómo apoya Terraform al usuario en la IaC
Dado que normalmente se recurre a más de un servicio en la nube para implementar la infraestructura de TIC o los recursos necesarios para el desarrollo de software, el usuario debe adaptarse a una serie de interfaces (API) diferentes y familiarizarse con las particularidades de cada plataforma. Todo ello con independencia de cómo se controlen estas API, si de forma manual en el momento en que se llevan a cabo los cambios en la infraestructura, o escribiendo las instrucciones de IaC para el acceso automatizado.
Como usuario de Terraform, no te tienes que enfrentar a este problema: para describir la infraestructura de destino, puedes utilizar JSON, el lenguaje de marcado simplificado de JavaScript, o el HashiCorp Configuration Language (HCL), basado en JSON, en lugar de los lenguajes de interfaz. HCL es la opción recomendada por HashiCorp, ya que, gracias, entre otras cosas, a los comentarios, facilita aún más la escritura y lectura de código. En Terraform, los archivos de configuración han de tener un formato de texto, aunque la herramienta utiliza la extensión .tf. Con la ayuda de una herramienta como Git o SVN puedes cambiar la versión de estos archivos si es necesario.
Aunque no haya que escribir las órdenes en las formas estándar de las interfaces, Terraform necesita las claves API para comunicarse con los diferentes servicios y ajustar o implementar la infraestructura, tal y como se define en el archivo .tf de configuración.
Los componentes más importantes de Terraform
La tarea principal de Terraform es la de simplificar la configuración de los recursos de infraestructura para el usuario. En ella, desempeña un rol central la notación con HCL (JSON). No obstante, la sencillez del lenguaje no es lo único que distingue a la herramienta de IaC: para que los archivos de configuración que se crean logren el efecto deseado, es necesario que la herramienta coopere con los proveedores de software y hardware más importantes, que haya una interacción con la arquitectura de base personalizable y que la interfaz de línea de comandos sea fácil de usar. A continuación, se presentan los diferentes componentes de Terraform para aclarar la funcionalidad del software de IaC.
El lenguaje de configuración HCL
El HashiCorp Configuration Language (HCL) mencionado arriba tiene como principal objetivo describir el resultado y no los pasos para lograrlo. El elemento más importante del lenguaje de Terraform son los recursos, ya que estos describen los componentes de la infraestructura, cuya gestión se va a automatizar con la herramienta. Todas las demás características del lenguaje existen única y exclusivamente para especificar los recursos. Son tres los elementos con un papel central:
- Bloques: los bloques son contenedores para contenido. En esta función, proporcionan espacio para las configuraciones de cualquier objeto, especialmente para recursos configurados. Cada bloque cuenta con un bloque tipo, una o más etiquetas y un área para el cuerpo. Este último contiene tantos argumentos y subbloques como se requieran.
- Argumentos: sirven para asignar un valor a un nombre. Los argumentos siempre se declaran dentro de bloques.
- Expresiones: las expresiones representan un valor. Se puede tratar de un valor concreto o de una referencia a uno o más valores. Una expresión actúa como un valor de un argumento o dentro de otros argumentos.
Con HCL como lenguaje declarativo, la secuencia de los bloques no es, en principio, relevante. Terraform procesa automáticamente los recursos descritos en la secuencia correcta, basándose en relaciones predefinidas. El orden solo desempeña un papel para los llamados bloques aprovisionadores (provisioner), necesarios para ejecutar scripts.
Terraform CLI (interfaz de línea de comandos)
Terraform ofrece su propia interfaz de línea de comandos para poder evaluar y utilizar los archivos de configuración que se han creado. Esta interfaz define la sintaxis y la estructura general del lenguaje de Terraform y coordina todos los cambios necesarios para implementar la infraestructura configurada. En sí, la propia CLI carece del conocimiento sobre los tipos específicos de recursos de infraestructura, sino que obtiene esta información a través de extensiones “provider” especiales. Es así como la interfaz sabe cómo debe definirse y gestionarse cada tipo de recurso en los proveedores de servicios cloud que soporta y puede pasar a las diferentes API de la nube las instrucciones formuladas de forma universal en los archivos de configuración de Terraform.
La interfaz de línea de comando o CLI es una interfaz basada en texto mediante la cual los usuarios pueden dar instrucciones con comandos a la máquina. El concepto difiere del manejo de la máquina con elementos de control gráfico como iconos, menús o botones. Este último tipo de funcionamiento se denomina interfaz gráfica o GUI (Graphical User Interface).
Función de almacenamiento e importación
Con el fin de asignar recursos reales a la configuración, realizar un seguimiento de los metadatos y mejorar continuamente el rendimiento de las grandes infraestructuras, Terraform almacena el estado de los recursos y la configuración. Por defecto, el software almacena el archivo terraform.tfstate creado para este propósito en un directorio local, aunque también es posible seleccionar una ubicación diferente, lo que sobre todo se recomienda para el trabajo en equipo. Con objeto de sincronizar este estado con la infraestructura actual, Terraform lleva a cabo una actualización automática en la CLI antes de cada operación del programa.
Para almacenar los estados no locales y para ejecutar operaciones, Terraform utiliza backends especiales en lugar del backend local establecido por defecto (si bien esto es posible solo con “Enterprise Pro” y “Enterprise Premium”). Estas capas especiales de abstracción deben definirse directamente en el archivo de configuración e iniciarse a través de la CLI para su uso.
Si has creado una infraestructura por otros medios, una función integrada permite importar esta configuración. Así podrás gestionar en el futuro los recursos con Terraform. Actualmente, solo es posible añadir al estado actual los recursos, pero no su configuración. Esto último, sin embargo, debería ser posible en las versiones futuras de la herramienta de IaC.
Gráfico de dependencias
Terraform permite crear gráficos de dependencia de la configuración de la infraestructura o del plan de ejecución definidos. Basta con usar el comando “terraform graph” en la interfaz de línea de comandos y definir el tipo de gráfico deseado para que Terraform genere automáticamente el archivo de salida correspondiente en formato DOT. Esto puede reproducirse con el software de visualización Graphviz, herramienta recomendada por el propio HashiCorp en su documentación oficial online. La línea de comandos también se puede utilizar para convertir el archivo en un formato de imagen como SVG.
Plugins de Terraform
Terraform se erige sobre una arquitectura basada en plugins que permite ampliar la funcionalidad de la suite de IaC en cualquier momento. Entre ellos se encuentran los aprovisionadores para ejecutar los scripts o las extensiones de los proveedores que proporcionan a la CLI toda la información relevante sobre los servicios web compatibles. Los desarrolladores que conocen el lenguaje de programación Go(lang) y conocen las API de los proveedores pueden incluso escribir sus propias extensiones para vincular Terraform a los servicios cloud que no cuentan con soporte oficial. Los nuevos plugins de HashiCorp se descargan e incluyen automáticamente, mientras que todas las extensiones de terceros requieren que el propio usuario las incluya manualmente.
Casos de uso: ¿cuáles son las áreas de aplicación de Terraform?
Gracias a una amplia gama de proveedores de servicios en la nube compatibles que HashiCorp amplía constantemente y que también puede completarse con el know how necesario, Terraform se presenta como la herramienta perfecta para una amplia variedad de aplicaciones. Entre los casos de uso más populares de esta herramienta se encuentran:
Configuración de Heroku
Heroku es uno de los proveedores de PaaS para alojamiento de aplicaciones web más conocido. Todas las herramientas y servicios necesarios para la aplicación pueden añadirse como extensiones y monitorizarse en el panel de control de la plataforma. Terraform reduce en gran medida la carga de trabajo, pues, además de escribir el código para configurar la aplicación, también garantiza que todos los complementos necesarios estén siempre disponibles.
Aplicaciones de varios niveles (aplicaciones multi-tier)
La arquitectura de capas se ha posicionado como concepto de estructuración para sistemas de software. Muy popular es, en particular, la arquitectura de dos capas con un nivel de servidor web y otro de base de datos subordinado. Para muchos proyectos, poder escalar niveles de forma independiente se presenta como una gran ventaja. Terraform es la herramienta ideal para ello, puesto que cada capa puede describirse como un conjunto de recursos. El software también regula las dependencias: así, por ejemplo, en el caso del modelo mencionado, se encarga de garantizar que el nivel de la base de datos esté disponible antes de que se inicie el servidor web.
Redes definidas por software (SDN)
Las redes definidas por software adquieren cada vez una importancia mayor en los centros de datos. La gestión controlada por software de recursos de red virtualizados proporciona a los administradores y desarrolladores un alto grado de control y flexibilidad. Terraform permite escribir la configuración completa para estos servicios SDN y utilizarla para configurar y personalizar automáticamente las estructuras de red definidas por el software.
Concepto multinube
Para muchos administradores, resulta muy atractivo el modelo de distribución de la infraestructura en múltiples nubes, puesto que incrementa la seguridad ante caídas y la tolerancia a errores y simplifica el restablecimiento de los recursos perdidos. Gracias a la sintaxis universal, Terraform simplifica la creación de estas estructuras multinube. Además, la aplicación puede gestionar varios proveedores con una única configuración e incluso gestionar dependencias entre nubes.
Terraform: ventajas y desventajas
La infraestructura como código es muy útil para mantener la competitividad en un entorno de TIC en constante cambio. El alto nivel de automatización contribuye, además, a que puedas hacer un seguimiento de los recursos que necesitas y realizar los cambios de infraestructura necesarios con la mayor rapidez posible. Terraform se presenta como una herramienta eficaz tanto en la creación como en la ejecución de infraestructuras programables, gracias también a su compatibilidad con servicios cloud como AWS, Azure y Google Cloud. Uno de los puntos fuertes del software de IaC es la sintaxis uniforme para describir la infraestructura. Con todo, siempre puedes elegir entre el lenguaje de configuración HCL de HashiCorp y el marcado en JSON.
Entre los plugins de Terraform disponibles se encuentra también la extensión “IONOS Provider”. Gracias a ella, la herramienta de IaC puede acceder a la página de información de la API del servidor en la nube de IONOS y, por lo tanto, también permite la configuración y gestión de recursos de servidores en la nube en los centros de datos de IONOS.
Otra de las ventajas de Terraform es su estructura basada en plugins, que permite, tanto al fabricante, como a terceros, ampliar la funcionalidad del software. En el caso de las extensiones del fabricante, Terraform las descarga automáticamente sin necesidad de iniciarse de forma manual. Además, la solución de código abierto cuenta con atractivas funciones, como la de almacenamiento, que permite recuperar y adaptar cómodamente configuraciones de infraestructura que ya se han configurado, y la creación de gráficos de dependencia para todos los pasos de la creación y ejecución de IaC.
En términos de costes, Terraform tampoco supone una gran inversión debido a su naturaleza open source. El uso del software es, en principio, gratuito, pero, si necesitas funciones de colaboración, como un enlace para la gestión de versiones o gestionar recursos de forma remota, necesitarás acudir a los planes empresariales que sí tienen un coste. Para las empresas pequeñas, por tanto, puede resultar menos rentable. Asimismo, el primer contacto con la herramienta es muy laborioso, aunque, una vez estés familiarizado con Terraform y el lenguaje HCL, el trabajo rutinario y la trabajosa gestión de recursos entre servicios serán cosa del pasado.
Ventajas | Desventajas |
---|---|
Código abierto | Proceso de familiarización largo |
Sintaxis uniforme para IaC | Sin función de retroceso automático para cambios con errores de recursos |
Compatible con diferentes soluciones en la nube | Funciones de colaboración y seguridad disponibles solo en planes empresariales de pago |
Escalable | |
Función de almacenamiento e importación para arquitecturas existentes | |
Posibilidad de generar gráficos de dependencia |