Hoy en día, cada vez más empresas utilizan la nube para im­ple­me­n­tar entornos de trabajo o incluso es­tru­c­tu­ras de TIC completas. Para ello, la in­frae­s­tru­tu­ra 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 so­lu­cio­nes en la nube permiten responder con precisión a las ne­ce­si­da­des que vayan surgiendo: mientras que, en el centro de datos de un proveedor, co­m­po­ne­n­tes como el servidor, el co­r­ta­fue­gos o el ba­la­n­cea­dor de carga pe­r­ma­ne­cen estáticos, en un entorno en la nube vi­r­tua­li­za­do estos pueden mo­di­fi­car­se de forma dinámica. De este modo, los usuarios siempre pueden aumentar o disminuir los recursos según lo requieran.

Para ga­ra­n­ti­zar esta fle­xi­bi­li­dad, los pro­vee­do­res pro­po­r­cio­nan di­fe­re­n­tes API con las que escalar el entorno IaaS alquilado cuando sea necesario usando el software pe­r­ti­ne­n­te. Aunque disponer de esta libertad presenta un gran atractivo, también requiere un im­po­r­ta­n­te trabajo de gestión. Terraform, de la empresa es­ta­dou­ni­de­n­se HashiCorp, puede minimizar dicho esfuerzo a largo plazo. Descubre a co­n­ti­nua­ción en qué consiste esta he­rra­mie­n­ta de in­frae­s­tru­c­tu­ra como código (IaC, del inglés in­fra­s­tru­c­tu­re as code).

Private Cloud powered by VMware
Pago por uso y el más alto nivel de seguridad de los datos.

Bajo la división Arsys Cloud Solutions, diseñamos So­lu­cio­nes a tu medida.

¿Qué es Terraform?

En el de­sa­rro­llo de software, cuando los ad­mi­ni­s­tra­do­res tratan con la in­frae­s­tru­c­tu­ra su­b­ya­ce­n­te se han de enfrentar a desafíos continuos: una in­cli­na­ción cada vez mayor por el de­sa­rro­llo ágil co­n­tri­bu­ye a un aco­r­ta­mie­n­to pro­gre­si­vo de los ciclos de de­sa­rro­llo y una im­ple­me­n­ta­ción más rápida de los cambios. Pero llevar este ritmo también tiene unas exi­ge­n­cias altas, para lo que los ad­mi­ni­s­tra­do­res de TIC necesitan au­to­ma­ti­zar al máximo la gestión de los recursos, lo que supone escribir un código de co­n­fi­gu­ra­ción legible para las máquinas. A esto se lo conoce como in­frae­s­tru­c­tu­ra como código (IaC).

Para si­m­pli­fi­car este proceso, los ad­mi­ni­s­tra­do­res de TIC pueden recurrir a los servicios del software Terraform, el cual, por un lado, permite describir de manera uniforme la in­frae­s­tru­c­tu­ra de destino y, por el otro, garantiza que esta se im­ple­me­n­te de acuerdo con los re­qui­si­tos de los pro­vee­do­res de IaaS co­m­pa­ti­bles. El software también permite guardar las co­n­fi­gu­ra­cio­nes de la in­frae­s­tru­c­tu­ra apro­vi­sio­na­da para que puedan re­uti­li­zar­se 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) de­sa­rro­lla­do 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 in­s­ti­tu­cio­nes y or­ga­ni­za­cio­nes públicas, a las que solo se puede acceder con las ediciones de pago “En­te­r­pri­se Pro” y “En­te­r­pri­se Premium”.

Nota

Terraform trabaja con más de 160 socios di­fe­re­n­tes, entre los que se incluyen Amazon Web Services (AWS), Atlassian, Clou­d­fla­re, Google, Microsoft y Oracle. En el sitio web oficial de HashiCorp en­co­n­tra­rás un listado con todos los socios oficiales.

Cómo apoya Terraform al usuario en la IaC

Dado que no­r­ma­l­me­n­te se recurre a más de un servicio en la nube para im­ple­me­n­tar la in­frae­s­tru­c­tu­ra de TIC o los recursos ne­ce­sa­rios para el de­sa­rro­llo de software, el usuario debe adaptarse a una serie de in­te­r­fa­ces (API) di­fe­re­n­tes y fa­mi­lia­ri­zar­se con las pa­r­ti­cu­la­ri­da­des de cada pla­ta­fo­r­ma. Todo ello con in­de­pe­n­de­n­cia de cómo se controlen estas API, si de forma manual en el momento en que se llevan a cabo los cambios en la in­frae­s­tru­c­tu­ra, o es­cri­bie­n­do las in­s­tru­c­cio­nes de IaC para el acceso au­to­ma­ti­za­do.

Como usuario de Terraform, no te tienes que enfrentar a este problema: para describir la in­frae­s­tru­c­tu­ra de destino, puedes utilizar JSON, el lenguaje de marcado si­m­pli­fi­ca­do de Ja­va­S­cri­pt, o el HashiCorp Co­n­fi­gu­ra­tion Language (HCL), basado en JSON, en lugar de los lenguajes de interfaz. HCL es la opción re­co­me­n­da­da por HashiCorp, ya que, gracias, entre otras cosas, a los co­me­n­ta­rios, facilita aún más la escritura y lectura de código. En Terraform, los archivos de co­n­fi­gu­ra­ción han de tener un formato de texto, aunque la he­rra­mie­n­ta utiliza la extensión .tf. Con la ayuda de una he­rra­mie­n­ta como Git o SVN puedes cambiar la versión de estos archivos si es necesario.

Nota

Aunque no haya que escribir las órdenes en las formas estándar de las in­te­r­fa­ces, Terraform necesita las claves API para co­mu­ni­car­se con los di­fe­re­n­tes servicios y ajustar o im­ple­me­n­tar la in­frae­s­tru­c­tu­ra, tal y como se define en el archivo .tf de co­n­fi­gu­ra­ción.

Los co­m­po­ne­n­tes más im­po­r­ta­n­tes de Terraform

La tarea principal de Terraform es la de si­m­pli­fi­car la co­n­fi­gu­ra­ción de los recursos de in­frae­s­tru­c­tu­ra 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 he­rra­mie­n­ta de IaC: para que los archivos de co­n­fi­gu­ra­ción que se crean logren el efecto deseado, es necesario que la he­rra­mie­n­ta coopere con los pro­vee­do­res de software y hardware más im­po­r­ta­n­tes, que haya una in­ter­ac­ción con la ar­qui­te­c­tu­ra de base pe­r­so­na­li­za­ble y que la interfaz de línea de comandos sea fácil de usar. A co­n­ti­nua­ción, se presentan los di­fe­re­n­tes co­m­po­ne­n­tes de Terraform para aclarar la fu­n­cio­na­li­dad del software de IaC.

El lenguaje de co­n­fi­gu­ra­ción HCL

El HashiCorp Co­n­fi­gu­ra­tion Language (HCL) me­n­cio­na­do arriba tiene como principal objetivo describir el resultado y no los pasos para lograrlo. El elemento más im­po­r­ta­n­te del lenguaje de Terraform son los recursos, ya que estos describen los co­m­po­ne­n­tes de la in­frae­s­tru­c­tu­ra, cuya gestión se va a au­to­ma­ti­zar con la he­rra­mie­n­ta. Todas las demás ca­ra­c­te­rí­s­ti­cas del lenguaje existen única y ex­clu­si­va­me­n­te para es­pe­ci­fi­car los recursos. Son tres los elementos con un papel central:

  • Bloques: los bloques son co­n­te­ne­do­res para contenido. En esta función, pro­po­r­cio­nan espacio para las co­n­fi­gu­ra­cio­nes de cualquier objeto, es­pe­cia­l­me­n­te para recursos co­n­fi­gu­ra­dos. Cada bloque cuenta con un bloque tipo, una o más etiquetas y un área para el cuerpo. Este último contiene tantos ar­gu­me­n­tos y su­b­blo­ques como se requieran.
  • Ar­gu­me­n­tos: sirven para asignar un valor a un nombre. Los ar­gu­me­n­tos siempre se declaran dentro de bloques.
  • Ex­pre­sio­nes: las ex­pre­sio­nes re­pre­se­n­tan un valor. Se puede tratar de un valor concreto o de una re­fe­re­n­cia a uno o más valores. Una expresión actúa como un valor de un argumento o dentro de otros ar­gu­me­n­tos.

Con HCL como lenguaje de­cla­ra­ti­vo, la secuencia de los bloques no es, en principio, relevante. Terraform procesa au­to­má­ti­ca­me­n­te los recursos descritos en la secuencia correcta, basándose en re­la­cio­nes pre­de­fi­ni­das. El orden solo desempeña un papel para los llamados bloques apro­vi­sio­na­do­res (pro­vi­sio­ner), ne­ce­sa­rios 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 co­n­fi­gu­ra­ción que se han creado. Esta interfaz define la sintaxis y la es­tru­c­tu­ra general del lenguaje de Terraform y coordina todos los cambios ne­ce­sa­rios para im­ple­me­n­tar la in­frae­s­tru­c­tu­ra co­n­fi­gu­ra­da. En sí, la propia CLI carece del co­no­ci­mie­n­to sobre los tipos es­pe­cí­fi­cos de recursos de in­frae­s­tru­c­tu­ra, sino que obtiene esta in­fo­r­ma­ción a través de ex­te­n­sio­nes “provider” es­pe­cia­les. Es así como la interfaz sabe cómo debe definirse y ge­s­tio­nar­se cada tipo de recurso en los pro­vee­do­res de servicios cloud que soporta y puede pasar a las di­fe­re­n­tes API de la nube las in­s­tru­c­cio­nes fo­r­mu­la­das de forma universal en los archivos de co­n­fi­gu­ra­ción de Terraform.

Nota

La interfaz de línea de comando o CLI es una interfaz basada en texto mediante la cual los usuarios pueden dar in­s­tru­c­cio­nes 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 fu­n­cio­na­mie­n­to se denomina interfaz gráfica o GUI (Graphical User Interface).

Función de al­ma­ce­na­mie­n­to e im­po­r­ta­ción

Con el fin de asignar recursos reales a la co­n­fi­gu­ra­ción, realizar un se­gui­mie­n­to de los metadatos y mejorar co­n­ti­nua­me­n­te el re­n­di­mie­n­to de las grandes in­frae­s­tru­c­tu­ras, Terraform almacena el estado de los recursos y la co­n­fi­gu­ra­ción. Por defecto, el software almacena el archivo terraform.tfstate creado para este propósito en un di­re­c­to­rio local, aunque también es posible se­le­c­cio­nar una ubicación diferente, lo que sobre todo se re­co­mie­n­da para el trabajo en equipo. Con objeto de si­n­cro­ni­zar este estado con la in­frae­s­tru­c­tu­ra actual, Terraform lleva a cabo una ac­tua­li­za­ción au­to­má­ti­ca en la CLI antes de cada operación del programa.

Nota

Para almacenar los estados no locales y para ejecutar ope­ra­cio­nes, Terraform utiliza backends es­pe­cia­les en lugar del backend local es­ta­ble­ci­do por defecto (si bien esto es posible solo con “En­te­r­pri­se Pro” y “En­te­r­pri­se Premium”). Estas capas es­pe­cia­les de ab­s­tra­c­ción deben definirse di­re­c­ta­me­n­te en el archivo de co­n­fi­gu­ra­ción e iniciarse a través de la CLI para su uso.

Si has creado una in­frae­s­tru­c­tu­ra por otros medios, una función integrada permite importar esta co­n­fi­gu­ra­ción. Así podrás gestionar en el futuro los recursos con Terraform. Ac­tua­l­me­n­te, solo es posible añadir al estado actual los recursos, pero no su co­n­fi­gu­ra­ción. Esto último, sin embargo, debería ser posible en las versiones futuras de la he­rra­mie­n­ta de IaC.

Gráfico de de­pe­n­de­n­cias

Terraform permite crear gráficos de de­pe­n­de­n­cia de la co­n­fi­gu­ra­ción de la in­frae­s­tru­c­tu­ra 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 au­to­má­ti­ca­me­n­te el archivo de salida co­rre­s­po­n­die­n­te en formato DOT. Esto puede re­pro­du­ci­r­se con el software de vi­sua­li­za­ción Graphviz, he­rra­mie­n­ta re­co­me­n­da­da por el propio HashiCorp en su do­cu­me­n­ta­ció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 ar­qui­te­c­tu­ra basada en plugins que permite ampliar la fu­n­cio­na­li­dad de la suite de IaC en cualquier momento. Entre ellos se en­cue­n­tran los apro­vi­sio­na­do­res para ejecutar los scripts o las ex­te­n­sio­nes de los pro­vee­do­res que pro­po­r­cio­nan a la CLI toda la in­fo­r­ma­ción relevante sobre los servicios web co­m­pa­ti­bles. Los de­sa­rro­lla­do­res que conocen el lenguaje de pro­gra­ma­ción Go(lang) y conocen las API de los pro­vee­do­res pueden incluso escribir sus propias ex­te­n­sio­nes para vincular Terraform a los servicios cloud que no cuentan con soporte oficial. Los nuevos plugins de HashiCorp se descargan e incluyen au­to­má­ti­ca­me­n­te, mientras que todas las ex­te­n­sio­nes de terceros requieren que el propio usuario las incluya ma­nua­l­me­n­te.

Casos de uso: ¿cuáles son las áreas de apli­ca­ción de Terraform?

Gracias a una amplia gama de pro­vee­do­res de servicios en la nube co­m­pa­ti­bles que HashiCorp amplía co­n­s­ta­n­te­me­n­te y que también puede co­m­ple­tar­se con el know how necesario, Terraform se presenta como la he­rra­mie­n­ta perfecta para una amplia variedad de apli­ca­cio­nes. Entre los casos de uso más populares de esta he­rra­mie­n­ta se en­cue­n­tran:

Co­n­fi­gu­ra­ción de Heroku

Heroku es uno de los pro­vee­do­res de PaaS para alo­ja­mie­n­to de apli­ca­cio­nes web más conocido. Todas las he­rra­mie­n­tas y servicios ne­ce­sa­rios para la apli­ca­ción pueden añadirse como ex­te­n­sio­nes y mo­ni­to­ri­zar­se en el panel de control de la pla­ta­fo­r­ma. Terraform reduce en gran medida la carga de trabajo, pues, además de escribir el código para co­n­fi­gu­rar la apli­ca­ción, también garantiza que todos los co­m­ple­me­n­tos ne­ce­sa­rios estén siempre di­s­po­ni­bles.

Apli­ca­cio­nes de varios niveles (apli­ca­cio­nes multi-tier)

La ar­qui­te­c­tu­ra de capas se ha po­si­cio­na­do como concepto de es­tru­c­tu­ra­ción para sistemas de software. Muy popular es, en pa­r­ti­cu­lar, la ar­qui­te­c­tu­ra de dos capas con un nivel de servidor web y otro de base de datos su­bo­r­di­na­do. Para muchos proyectos, poder escalar niveles de forma in­de­pe­n­die­n­te se presenta como una gran ventaja. Terraform es la he­rra­mie­n­ta ideal para ello, puesto que cada capa puede de­s­cri­bi­r­se como un conjunto de recursos. El software también regula las de­pe­n­de­n­cias: así, por ejemplo, en el caso del modelo me­n­cio­na­do, se encarga de ga­ra­n­ti­zar que el nivel de la base de datos esté di­s­po­ni­ble antes de que se inicie el servidor web.

Hosting Nextcloud ad­mi­ni­s­tra­do
Tu al­ma­ce­na­mie­n­to cloud bajo control
  • Control total de datos
  • Fácil de ad­mi­ni­s­trar
  • Agrega fá­ci­l­me­n­te apli­ca­cio­nes y he­rra­mie­n­tas de co­la­bo­ra­ción

Redes definidas por software (SDN)

Las redes definidas por software adquieren cada vez una im­po­r­ta­n­cia mayor en los centros de datos. La gestión co­n­tro­la­da por software de recursos de red vi­r­tua­li­za­dos pro­po­r­cio­na a los ad­mi­ni­s­tra­do­res y de­sa­rro­lla­do­res un alto grado de control y fle­xi­bi­li­dad. Terraform permite escribir la co­n­fi­gu­ra­ción completa para estos servicios SDN y uti­li­zar­la para co­n­fi­gu­rar y pe­r­so­na­li­zar au­to­má­ti­ca­me­n­te las es­tru­c­tu­ras de red definidas por el software.

Concepto multinube

Para muchos ad­mi­ni­s­tra­do­res, resulta muy atractivo el modelo de di­s­tri­bu­ción de la in­frae­s­tru­c­tu­ra en múltiples nubes, puesto que in­cre­me­n­ta la seguridad ante caídas y la to­le­ra­n­cia a errores y si­m­pli­fi­ca el re­s­ta­ble­ci­mie­n­to de los recursos perdidos. Gracias a la sintaxis universal, Terraform si­m­pli­fi­ca la creación de estas es­tru­c­tu­ras multinube. Además, la apli­ca­ción puede gestionar varios pro­vee­do­res con una única co­n­fi­gu­ra­ción e incluso gestionar de­pe­n­de­n­cias entre nubes.

Terraform: ventajas y de­s­ve­n­ta­jas

La in­frae­s­tru­c­tu­ra como código es muy útil para mantener la co­m­pe­ti­ti­vi­dad en un entorno de TIC en constante cambio. El alto nivel de au­to­ma­ti­za­ción co­n­tri­bu­ye, además, a que puedas hacer un se­gui­mie­n­to de los recursos que necesitas y realizar los cambios de in­frae­s­tru­c­tu­ra ne­ce­sa­rios con la mayor rapidez posible. Terraform se presenta como una he­rra­mie­n­ta eficaz tanto en la creación como en la ejecución de in­frae­s­tru­c­tu­ras pro­gra­ma­bles, gracias también a su co­m­pa­ti­bi­li­dad 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 in­frae­s­tru­c­tu­ra. Con todo, siempre puedes elegir entre el lenguaje de co­n­fi­gu­ra­ción HCL de HashiCorp y el marcado en JSON.

Nota

Entre los plugins de Terraform di­s­po­ni­bles se encuentra también la extensión “IONOS Provider”. Gracias a ella, la he­rra­mie­n­ta de IaC puede acceder a la página de in­fo­r­ma­ción de la API del servidor en la nube de IONOS y, por lo tanto, también permite la co­n­fi­gu­ra­ción y gestión de recursos de se­r­vi­do­res en la nube en los centros de datos de IONOS.

Otra de las ventajas de Terraform es su es­tru­c­tu­ra basada en plugins, que permite, tanto al fa­bri­ca­n­te, como a terceros, ampliar la fu­n­cio­na­li­dad del software. En el caso de las ex­te­n­sio­nes del fa­bri­ca­n­te, Terraform las descarga au­to­má­ti­ca­me­n­te sin necesidad de iniciarse de forma manual. Además, la solución de código abierto cuenta con atra­c­ti­vas funciones, como la de al­ma­ce­na­mie­n­to, que permite recuperar y adaptar có­mo­da­me­n­te co­n­fi­gu­ra­cio­nes de in­frae­s­tru­c­tu­ra que ya se han co­n­fi­gu­ra­do, y la creación de gráficos de de­pe­n­de­n­cia 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 na­tu­ra­le­za open source. El uso del software es, en principio, gratuito, pero, si necesitas funciones de co­la­bo­ra­ción, como un enlace para la gestión de versiones o gestionar recursos de forma remota, ne­ce­si­ta­rás acudir a los planes em­pre­sa­ria­les que sí tienen un coste. Para las empresas pequeñas, por tanto, puede resultar menos rentable. Asimismo, el primer contacto con la he­rra­mie­n­ta es muy laborioso, aunque, una vez estés fa­mi­lia­ri­za­do con Terraform y el lenguaje HCL, el trabajo rutinario y la trabajosa gestión de recursos entre servicios serán cosa del pasado.

Ventajas De­s­ve­n­ta­jas
Código abierto Proceso de fa­mi­lia­ri­za­ción largo
Sintaxis uniforme para IaC Sin función de retroceso au­to­má­ti­co para cambios con errores de recursos
Co­m­pa­ti­ble con di­fe­re­n­tes so­lu­cio­nes en la nube Funciones de co­la­bo­ra­ción y seguridad di­s­po­ni­bles solo en planes em­pre­sa­ria­les de pago
Escalable
Función de al­ma­ce­na­mie­n­to e im­po­r­ta­ción para ar­qui­te­c­tu­ras exi­s­te­n­tes
Po­si­bi­li­dad de generar gráficos de de­pe­n­de­n­cia
Ir al menú principal