Infrastructure as code (IaC)

Actualmente, en el ámbito de las infraestructuras de TI, casi todos los caminos llevan al hardware virtualizado y controlable por software. Tanto los recursos de red, servidor y almacenamiento, como los centros de datos al completo se pueden combinar y escalar de forma muy precisa en todo momento sin la necesidad de manipular los correspondientes dispositivos en persona. Gracias a los proveedores de infraestructura como servicio, podemos incluso alquilar el hardware subyacente definido por software a un precio económico, librándonos de la necesidad de contar con una infraestructura interna.

No obstante, sigue siendo un reto administrar los distintos recursos, en particular, debido a las exigencias cada vez mayores de las infraestructuras de TI y al hecho de que, a menudo, se recurre a los servicios de varios proveedores de IaaS diferentes al mismo tiempo. De ahí que el principio de infrastructure as code, en castellano infraestructura como código o infraestructura programable, cobre cada vez más importancia.

¿Qué es la infraestructura como código (IaC)?

Infrastructure as code (abreviado como IaC) es un paradigma de TI que describe en lenguaje informático no solo el software, sino también la infraestructura necesaria para ejecutarlo, como el espacio de almacenamiento, la potencia computacional o los recursos de red. Básicamente, se trata de programar estructuras de hardware como un código ejecutable que puede adaptarse, duplicarse, eliminarse y versionarse fácilmente en cualquier momento. El concepto de la infraestructura como código se basa en tecnologías de nube modernas como la virtualización y el manejo de recursos definidos por software, lo que hace posible gestionar el hardware sin acceder manualmente a los dispositivos subyacentes.

Definición

La infraestructura como código es un paradigma de la tecnología de la información que consiste en la descripción del hardware en código legible por máquina. Este principio permite automatizar gran parte de la arquitectura y la gestión de la infraestructura de TI para poder reaccionar con precisión a necesidades cambiantes o completamente nuevas.

¿Cuál es el objetivo de la infraestructura como código?

El nivel de exigencia respecto a los productos de software ha aumentado a ritmo vertiginoso en los últimos años. Como consecuencia, los ciclos de desarrollo se acortan cada vez más y se busca constantemente la máxima disponibilidad y flexibilidad. Por lo tanto, además de la optimización del desarrollo del código, uno de los pilares de una arquitectura global funcional, estable y, sobre todo, competitiva, es el mantenimiento y la mejora constante de la infraestructura de hardware subyacente. Aquí es donde entra en juego el concepto de infrastructure as code, diseñado especialmente para aumentar la calidad y la eficiencia de las infraestructuras. Entre los objetivos y funciones básicas de IaC se incluyen, entre otros:

  • Automatizar los procesos manuales lo máximo posible.
  • Borrar los límites entre las aplicaciones y los entornos en los que se ejecutan.
  • Establecer un flujo de trabajo flexible que facilite la colaboración de todos los implicados en el proceso de desarrollo en toda la empresa.
  • Presentar los cambios y movimientos de contenido de forma transparente y detallada en todo momento.
  • Lograr que la configuración del hardware sea tan verificable como la del software.

¿En qué se diferencia infrastructure as code de otros métodos anteriores?

En el entorno clásico no virtualizado, todos los recursos están siempre conectados con el hardware físico, lo que no solo resulta en una infraestructura poco flexible, sino que también conlleva muchas horas de trabajo manual a la hora de realizar configuraciones.

Con la virtualización del hardware del servidor, del almacenamiento y de las estructuras de red, esta situación cambia radicalmente: gracias a esta tecnología, los proveedores pueden ofrecer a los clientes recursos regulables de forma centralizada, evitándoles tener que disponer de un hardware especial para ello. Por un lado, esto garantiza una fiabilidad significativamente mayor, ya que el hardware defectuoso puede sustituirse de inmediato. Por el otro, también es mucho más fácil para ambas partes añadir nuevos servicios o cancelar recursos alquilados que ya no se necesitan.

Los entornos definidos por software (en inglés, “software defined”) van un paso más allá de las infraestructuras virtualizadas habituales y se caracterizan por el hecho de que el sistema lógico de control se abstrae completamente de los componentes de hardware y se implementa en un software de control central. Con las interfaces y herramientas adecuadas, los proveedores y clientes pueden acceder fácilmente a esta unidad de control, compilar individualmente las estructuras de TI y escalarlas de forma muy precisa. Además, ambas partes se benefician de un mayor rendimiento del hardware, ya que este ya no se encarga de procesar datos.

Nota

Al contratar servicios definidos por software, puedes elegir entre diferentes paquetes individuales como almacenamiento definido por software (software defined storage), computación definida por software (software defined computing) o redes definidas por software (software defined networking), y el paquete completo centro de datos definido por software (software defined data center).

Infrastructure as code utiliza las técnicas mencionadas más arriba, automatizando la administración por software de los recursos virtualizados para maximizar el potencial de la nube. Por lo tanto, no debe entenderse como una alternativa, sino como un complemento u optimización de la infraestructura definida por software.

¿Cuáles son las ventajas e inconvenientes de infrastructure as code?

La infraestructura como código desempeña un papel fundamental a la hora de superar los retos que plantea agilizar el desarrollo del software. Gracias a los scripts preconfigurados, los cambios necesarios en la infraestructura se realizan a un ritmo que sería imposible de alcanzar si se hicieran manualmente. Tampoco importa si los ajustes deben hacerse en plena noche, fin de semana o día festivo. Asimismo, disminuye la posibilidad de error, especialmente en el caso de los procedimientos administrativos que se repiten a menudo, porque no se pueden cometer errores tipográficos o de introducción de datos. Además de la alta velocidad y la baja tasa de error, infrastructure as code ofrece las siguientes ventajas frente a la configuración manual:

  • Alta eficiencia: la infraestructura como código automatiza la mayor parte de la administración de recursos, lo que ayuda a optimizar el ciclo de vida del desarrollo del software (SDLC, por sus siglas en inglés), es decir, de todo su proceso de desarrollo.
     
  • Reutilización: una vez se ha escrito el código para una infraestructura, este se puede ejecutar en cualquier momento y todas las veces que se desee. Lo mismo se aplica, por ejemplo, a los entornos de pruebas durante la(s) fase(s) de desarrollo.
     
  • Control de versiones: donde haya código, también es posible controlar las versiones, por lo que el principio de infrastructure as code permite documentar y rastrear cualquier cambio realizado en una infraestructura. Esto tiene la ventaja, entre otras, de que cualquier configuración anterior se puede restaurar sin ningún problema.
     
  • Minimizar costes/esfuerzo: automatizar la administración de la infraestructura ahorra muchos costes y horas de trabajo que, a su vez, pueden invertirse en otros ámbitos.

La última ventaja, sin embargo, no está exenta de limitaciones. Seguro que un entorno bien programado de infraestructura como código nos ahorra costes y tiempo, pero no podemos ignorar el trabajo que conlleva diseñar e implementar este sistema. Para muchos administradores, el modelo de IaC implica cambios importantes porque resulta prácticamente imposible realizar la transición a una infraestructura automatizada o implementarla sin tener una comprensión profunda de los conceptos de arquitectura en la nube y conocimientos de lenguajes de programación como Java, Node.js, Python, etc. y del manejo de las API. Especialmente al principio, por lo tanto, hay que contar con unos costes relativamente altos y muchas horas de formación.

Herramientas de IaC: los pilares de infrastructure as code

Mencionamos, al principio, que las empresas suelen recurrir a varios proveedores de servicios de IaaS distintos. Como consecuencia, los administradores tienen que lidiar con las particularidades y, sobre todo, con las diferentes interfaces de cada plataforma. En cambio, las herramientas y marcos de trabajo especiales de IaC ofrecen sus propios lenguajes de configuración, que permiten administrar recursos de múltiples proveedores y eliminan la necesidad de conocer las API correspondientes en profundidad. Algunas de las soluciones más utilizadas son las siguientes:

  • Terraform: la versión básica de Terraform, un software de código libre desarrollado por HashiCrop, está disponible de forma gratuita. Sus dos versiones de pago proporcionan funciones de configuración y organización, además de características para el trabajo grupal.
     
  • AWS CloudFormation: CloudFormation es la herramienta interna de IaC de Amazon Web Services (AWS) y, como tal, es prácticamente imprescindible para cualquiera que trabaje con productos de AWS como ELB, S3 o EFS. Utilizarla no conlleva ningún coste adicional, tan solo hay que pagar por los recursos reservados.
     
  • Google Cloud Deployment Manager: Deployment Manager es para la plataforma Google Cloud lo que CloudFormation es para AWS. Con esta herramienta gratuita, los usuarios de recursos de IaaS de Google pueden administrarlos fácilmente mediante archivos de configuración central en el lenguaje de marcado YAML.
     
  • Chef Infra: Chef Infra, la solución de IaC de la empresa estadounidense Chef, está disponible desde abril de 2019 bajo la licencia gratuita Apache 2.0 y es utilizado por Facebook, entre otras empresas. Entre las plataformas compatibles se incluyen Google Cloud, Microsoft Azure, Amazon EC2 y OpenStack.
     
  • Red Hat Ansible Tower: la herramienta de infrastructure as code Ansible forma parte del catálogo del desarrollador de software Red Hat desde 2015. Ofrece un panel de control, su propia línea de comandos y una poderosa API REST. En este caso, ambos paquetes disponibles, tanto el estándar como el extendido, son de pago.

Infrastructure as code: ejemplos

El principio de la infraestructura como código es útil para todas las empresas que desarrollan y gestionan aplicaciones complejas y, por lo tanto, dependen de una infraestructura igualmente extensa y potente. Entre los motivos más importantes para recurrir a una infraestructura programable se incluyen los siguientes:

  • Se utiliza una gran cantidad de recursos de IaaS
  • La infraestructura se alquila a muchos proveedores o plataformas diferentes
  • La infraestructura se tiene que modificar regularmente
  • Se requiere una buena documentación de los cambios de infraestructura
  • Se desea optimizar la colaboración entre administradores y desarrolladores

Las empresas tienen la opción de programar sus propios archivos de configuración de IaC y, seguramente, muchas ya lo hagan en parte. No obstante, casi todos los administradores que trabajan con IaC utilizan las herramientas y marcos mencionados más arriba en su rutina diaria. Por ello, para concluir este artículo, en lugar de darte un ejemplo de infraestructura como código, te proponemos los siguientes vídeos, que presentan cómo programar el código de infraestructura utilizando las prácticas herramientas de IaC (en este caso, AWS CloudFormation y Terraform).

¿Le ha resultado útil este artículo?
Page top