Llegamos a ustedes gracias a:



Reportajes y análisis

¿Qué es la infraestructura como código?

[31/01/2022] A medida que más y más organizaciones se trasladan a la nube, la habilidad de saber cómo aprovisionar y configurar un servidor físico se vuelve menos relevante para la forma en que se construye e implementa el software moderno.

En este complejo mundo actual impulsado por software, donde la infraestructura informática a menudo no se ve ni se oye, ser capaz de aprovisionar y gestionar esa infraestructura mediante código declarativo, en lugar de configuraciones manuales o incluso scripts, es imperativo para ejecutar aplicaciones a escala web.

Breve historia de la infraestructura como código

Si bien los administradores de sistemas han estado usando scripts para gestionar su infraestructura desde la década de 1990, la práctica de tratar la infraestructura como código (IaC, por sus siglas en inglés) no se consolidó por completo hasta finales de la década del 2000, cuando ingenieros como el pionero de devops, Andrew Clay-Shafer; el cofundador de Chef, Adam Jacob; y el fundador de Puppet, Luke Kanies, comenzaron a usar la terminología.

En un entorno de aplicaciones distribuidas, en el que los servidores de ajuste manual nunca iban a escalar y el scripting tenía sus propias limitaciones, poder automatizar el aprovisionamiento de la infraestructura se convirtió en una necesidad fundamental para muchos pioneros en los inicios de la nube.

Hoy en día, esa infraestructura subyacente se aprovisiona más comúnmente como código, gracias a las primeras herramientas populares en este espacio, como Chef, Puppet, SaltStack y Ansible. Pero la tecnología avanza rápido y las cosas han evolucionado desde entonces. A continuación, se explican los fundamentos de la infraestructura como código, y por qué es la base de las prácticas modernas de desarrollo de software.

Definición de la infraestructura como código

En Infrastructure as Code: Dynamic Systems for the Cloud Age, Kief Morris explica que la infraestructura como código se reduce a tres prácticas principales: "Definir todo como código, probar y entregar todo continuamente mientras trabaja, y crear su sistema a partir de piezas pequeñas y sueltas.

En términos de una definición operativa, Morris sugiere que la IaC "es un enfoque para la automatización de la infraestructura basado en prácticas del desarrollo de software. Enfatiza rutinas coherentes y repetibles para el aprovisionamiento y el cambio de sistemas y su configuración.

En la práctica, esto suele hacer que los equipos de DevOps realicen cambios en la descripción del entorno, y la versión del modelo de configuración utilizando un lenguaje bien documentado como JSON o YAML. Una vez que ese entorno es configurado, se pueden realizar modificaciones en la fuente, mas no en el destino, lo que permite efectuar cambios más seguros y regulares en la infraestructura a una escala mucho mayor.

El punto de encuentro entre la infraestructura como código y DevOps

Como forma de automatizar la configuración inicial y los cambios posteriores, la infraestructura como código es una parte clave de las prácticas modernas de DevOps, en las que se espera que los desarrolladores y operadores trabajen de la mano para implementar software con mayor rapidez y frecuencia. Mediante la automatización y el control de versiones de las compilaciones de la infraestructura, las herramientas de IaC pueden ayudar a liberar a los desarrolladores de aplicaciones para que se enfoquen en lo que mejor saben hacer, y a los administradores de sistemas para que no tengan que trabajar en procesos manuales.

El uso de código para aprovisionar y mantener la infraestructura ayuda a acercar a los desarrolladores y a los especialistas en operaciones en las primeras fases del ciclo de vida del desarrollo de software, y ayuda a inculcar la disciplina, claridad y repetibilidad del desarrollo de software en las operaciones. Dado que la automatización y la colaboración son principios clave de las prácticas de DevOps, las herramientas de la IaC también se convierten en un eje central para que el equipo trabaje en conjunto de manera efectiva.

Los beneficios de la infraestructura como código

Las principales ventajas de tratar la infraestructura como código dependen del alejamiento de los procesos manuales y de la libertad que la automatización les brinda a los equipos DevOps. Esto trae consigo un grado de ahorro de costos, y también puede aumentar la velocidad a la que estos equipos pueden realizar cambios en sus aplicaciones de manera segura.

Como escribió el cofundador de Simple Thread, Justin Etheredge, en una publicación de blog en 2020, "La infraestructura como código otorga la libertad de realizar cambios sin el temor de poner cosas en un estado irrecuperable. Y brinda una mejor comprensión de cómo el entorno llegó a ser como es, lo que permite tener más confianza para hacer los cambios necesarios.

En su libro, Morris destaca siete beneficios clave de la IaC sobre los métodos de aprovisionamiento tradicionales. Estos son:

  • Utilizar la infraestructura de TI como habilitador para la entrega rápida de valor.
  • Reducir el esfuerzo y el riesgo de realizar cambios en la infraestructura.
  • Permitir a los usuarios de la infraestructura obtener los recursos que necesitan, cuando los necesitan.
  • Proporcionar herramientas comunes para el desarrollo, las operaciones y las funciones relacionadas.
  • Crear sistemas que sean confiables, seguros y rentables.
  • Hacer visibles los controles de gobernanza, seguridad y cumplimiento.
  • Mejorar la velocidad para solucionar problemas y resolver fallas.

Herramientas de infraestructura como código

Las herramientas necesarias para implementar la infraestructura como código tienden a ser categorizadas en dos campos: orquestación de la configuración y gestión de la configuración.

Las herramientas de orquestación más populares son AWS CloudFormation, Google Cloud Deployment Manager, HashiCorp Terraform, Microsoft Azure Resource Manager y Pulumi, que permiten a los desarrolladores automatizar de diversas formas la implementación de la infraestructura.

En cuanto a la gestión de la configuración, las herramientas de terceros como Ansible, Chef, Puppet y SaltStack siguen siendo formas populares de configurar, almacenar y automatizar compilaciones de entornos de servidores virtuales, mientras que muchos desarrolladores utilizan Docker para sus imágenes de contenedores.

Muchas de estas herramientas se pueden usar en conjunto; por ejemplo, las de Ansible, Chef, Puppet y SaltStack se enfocan en gestionar configuraciones en la infraestructura que ya existe, mientras que las herramientas de aprovisionamiento como Terraform se alejan de esa capa de infraestructura.

Empezando con la infraestructura como código

La adopción de la infraestructura como código suele formar parte de un cambio organizacional más amplio hacia la nube y las prácticas de DevOps. Si bien gran parte de este cambio puede parecer bastante intimidante, implementar la infraestructura como código es clave para modernizar el enfoque hacia la creación y ejecución software.

"A veces puede tomar un poco más de tiempo realizar cambios con la infraestructura como código, advierte Etheredge, "pero esta es una de esas situaciones en las que es necesario reducir la velocidad para acelerar. Sin duda, ser diligente al realizar cambios a través de sus scripts le ahorrará innumerables horas durante una interrupción o al solucionar problemas. Además, hará los cambios con mucha más confianza, porque podrá examinarlos en un entorno de prueba en lugar de cruzar los dedos y ejecutar la actualización directamente en producción. Incluso en entornos pequeños, los beneficios pueden ser enormes.

O, como escribió Morris, "Automatizar una infraestructura requiere trabajo, especialmente cuando recién está aprendiendo a hacerlo. Pero llevarlo a cabo le ayuda a realizar cambios, e incluso a crear el sistema en primer lugar.

Puede ver también: