No es un concepto nuevo, aunque se está viendo como una necesidad ante el auge de entornos cloud y sobre todo metodologías que ahora están de moda como Scrum o Kanban, que proponen un entorno de integración continua cuyo objetivo principal es disminuir el time to market o el tiempo transcurrido desde que se libera un desarrollo hasta que este se encuentra disponible para el usuario final. Estos nuevos modelos de desarrollo basados en aproximaciones sucesivas hasta llegar al objetivo final, necesitan sobre todo de un entorno que les permita un despliegue lo más rápido posible desde la fase de desarrollo hasta el entorno de pruebas y su liberación final. La automatización necesaria de estas labores requiere de una estrecha colaboración entre los equipos de desarrollo y de operaciones.

La definición de este concepto varía en función del contexto o herramientas de las que estemos hablando, pero todas ellas se basan en un concepto principal, tener la infraestructura y por tanto las aplicaciones, definidas de tal manera que se puedan replicar y automatizar. Las herramientas utilizadas se convierten en este caso en facilitadoras y en algunos casos, limitadoras.

La complejidad de los entornos que cada vez tienen un mayor nivel de interdependencia con elementos externos, la seguridad y el poder contar con un inventario actualizado tanto del hardware y del software, y en general la complejidad de la gestión de la configuración y de los elementos que forman parte de las tecnologías de la información en general, son los principales objetivos que se pretenden conseguir, con un claro enfoque a la mejora de la productividad. La automatización de procesos y una correcta gestión de la configuración, es una mejora clara de calidad que permite que los despliegues o entornos se encuentren bajo unos parámetros definidos previamente, evitando tareas manuales sujetas a errores humanos. El contar con una documentación en profundidad de las infraestructuras y aplicaciones, mejora enormemente la toma de decisiones que, acompañada con sistemas de monitorización eficientes, permite anticiparse a posibles problemas y tomar medidas correctivas antes de que estas afecten a los usuarios. Evidentemente llegar a poner en práctica estos conceptos en todos los casos supone un esfuerzo y una colaboración con los equipos de desarrollo, orientada a disponer de unos requisitos claros a nivel de infraestructura, y que la gestión de la configuración se convierta en un elemento más, asociado a los productos de la fase de desarrollo.

Se ha recurrido a muchas herramientas para llegar a poner en práctica este concepto dando por buenas desde plantillas de máquinas virtuales, a scripts bash para la automatización y por tanto descripción de determinas tareas. Sin embargo, todas ellas se enfocan a automatizar la pura tarea de sistemas: el facilitar una infraestructura, dejando fuera de la secuencia el despliegue de las aplicaciones y su puesta en marcha que es el objetivo final para el cual se facilita dicha infraestructura.
La automatización de tareas y aprovisionamiento de aplicaciones en entornos como Amazon o Azure, contando con una infraestructura casi ilimitada y que se pueden mantener fácilmente desde código mediante el uso de API’s, facilita enormemente la automatización de determinadas tareas, que ya no cuentan con la necesaria actuación manual de los entornos físicos, y permite orientar las labores hacia el despliegue automatizado y normalizado de las aplicaciones.

Aunque desde hace tiempo existen herramientas para la automatización de determinadas labores de sistemas, es en estos momentos, donde existe una necesidad clara en relación a la automatización y optimización de procesos. Hasta ahora, en la mayor parte de los casos el crecimiento en los departamentos de sistemas no iba acompañado de una mejora de productividad, en todo caso de capacidad productiva incorporando o subcontratando más personal, por ejemplo. Sin embargo, estas metodologías, aunque difíciles de poner en marcha, permiten una mejora de la productividad y sobre todo una disminución de los tiempos de respuesta.

Herramientas como Ansible, Puppet o Chef permiten orquestar y automatizar determinadas tareas, pero ellas solas no permiten replicar y solucionar el aprovisionamiento de aplicaciones. Es aquí cuando se hace más patente el profundo cambio que se está llevando a cabo en los equipos de desarrollo, donde, existe una colaboración más intensa con los departamentos de sistemas, con el objetivo de que la gestión de la configuración forme parte del proceso de desarrollo, y permita la automatización de los despliegues. Sin esta colaboración necesaria, no es posible automatizar un despliegue y por tanto el objetivo de facilitar el despliegue final al cliente o usuario no se puede cumplir.

Desde Oficina de Cooperación Universitaria se han iniciado varios proyectos con el objetivo de incorporar un ciclo de integración continua a nuestros productos, cuyo fin principal se orienta a la mejora de los tiempos de respuesta y ausencia de errores en los despliegues. Ello nos permitirá como en otros casos, continuar siendo lideres tecnológicos en nuestro entorno, pero a la vez nos dará pie a mejorar en procesos donde hasta ahora era necesaria una alta participación manual como en el despliegue de nuevos entornos o actualización de versiones, lo que repercutirá en una mejora de nuestros productos y servicios, y en la percepción que de ellos tienen nuestros clientes.

Todo ello nos abrirá nuevas posibilidades como agilizar y flexibilizar el aprovisionamiento de infraestructuras de producción, automatizar instalaciones de forma desatendida, disponer de un entorno de pruebas, como réplica fiel de un entorno de producción, etc. Lo que sin duda, repercutirá en el valor percibido de nuestros sistemas y abrirá nuevas líneas de negocio.

Fuentes de información:

https://puppet.com/solutions/infrastructure-as-code
https://www.thoughtworks.com/insights/blog/infrastructure-code-reason-smile
https://en.wikipedia.org/wiki/Infrastructure_as_Code

Entrada elaborada por Carlos Cubas, Director de Servicios Técnicos