por MARIUSZ MICHALOWSKI

Los desarrolladores pasan gran parte de su día investigando las entrañas de sus sistemas, asignando almacenamiento a una aplicación, conectando el sistema de seguridad a la interfaz de usuario y rastreando qué versión de la aplicación se encuentra en qué parte del ciclo de desarrollo, entre otras tareas.


Es por eso que ha surgido una nueva categoría de software, infraestructura como código (IaC), que promete automatizar el aprovisionamiento y la integración de la infraestructura del sistema. Libera tiempo para que los desarrolladores puedan concentrarse más en las soluciones de front-end en lugar de la gestión de la configuración de back-end. Primero, sin embargo, averigüemos qué es IaC y cómo ayuda a su organización.

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

IaC reduce el tiempo de creación y configuración de la infraestructura del sistema mediante el uso de conjuntos de herramientas, protocolos, lenguajes y procesos. En la gestión de sistemas de centros de datos convencionales, cada entrada y cambio de configuración ha requerido históricamente una acción manual. Ahora, los equipos de tecnología pueden administrar todo de manera inteligente y automatizada. 

Con IaC, los datos de gestión de la configuración de la infraestructura se almacenan en archivos estandarizados. Las herramientas monitorean y mantienen el estado de la infraestructura y aseguran que los recursos correctos estén disponibles cada vez que se ejecuta una aplicación. Esto ahorra a los equipos de DevOps un esfuerzo manual excesivo. En esencia, la configuración y la gestión a gran escala se simplifican drásticamente.

Puntos débiles del desarrollo 

Actualmente, el desarrollo es un proceso engorroso porque surgen fricciones en muchos lugares. Se ha avanzado mucho en la aceleración del desarrollo de aplicaciones: la creación del conjunto de funciones. Aún así, el proceso se ralentiza en el back-end cuando los componentes del software están vinculados a la infraestructura informática. 

Históricamente, el software se implementaba como un gran bloque de código monolítico. Las actualizaciones eran tediosas porque todo el código de la aplicación tenía que ejecutarse, incluso si no estaba involucrado en la actualización o corrección de errores. La llegada de los contenedores y los microservicios permitió a los desarrolladores diseñar aplicaciones de naturaleza modular y, por lo tanto, más fáciles de actualizar, agregar o depurar.

Sin embargo, la aplicación aún debe vincularse a la infraestructura informática existente. Las soluciones en la nube, como AWS, Google Cloud Platform o Microsoft Azure, por ejemplo, brindan a las empresas acceso rápido a grandes volúmenes de potencia de procesamiento informático. Pero ese software de aplicación debe saber cómo acceder a la red, presentar información de seguridad, asignar almacenamiento y ejecutar código en servidores centrales.

Debido a esto, los desarrolladores dedican mucho tiempo a crear y mantener la infraestructura como código. Para ello, utilizan lenguajes como Python y soluciones como Chef y GitHub. Quieren utilizar la automatización para simplificar y acelerar el proceso, pero aquí, nuevamente, encuentran algunos obstáculos.

Cuellos de botella del flujo de trabajo

A medida que las aplicaciones se vuelven más grandes y los componentes más pequeños, los desarrolladores se encuentran mezclando y combinando software de una amplia variedad de lugares. Rastrear qué es dónde en el proceso es un desafío frecuente. Los flujos de trabajo actuales a menudo no son intuitivos y dependen en gran medida de las solicitudes de incorporación de cambios. Algunas soluciones intentan abordar el problema con múltiples espacios de trabajo, pero el resultado final es un código frágil y no determinista.

Sin el mapeo de proyectos a ramas o etiquetas, alguien que comenta sobre una solicitud de extracción aprobada puede enviar código no aprobado a producción. En el entorno de trabajo acelerado de DevOps actual, una aprobación destinada a una ejecución de prueba de corta duración se convierte en la versión actual, lo que crea un efecto dominó de consecuencias no deseadas que crean confusión y código defectuoso, lo que ralentiza el desarrollo, a menudo de manera sustancial.

Control de acceso

La mayoría de las herramientas no ofrecen modelos de control de acceso. Los desarrolladores pueden rastrear un solo repositorio y un solo proyecto de Terraform, por ejemplo, pero a medida que crece la cantidad de repositorios y proyectos, garantizar que las funciones de control de acceso adecuadas estén implementadas se vuelve más desalentador. 

Desafíos del espacio de trabajo

Los proyectos heredados de desarrollo estático y en cascada permitieron a los equipos de TI configurar su infraestructura de sistema una vez y olvidarse de ella. Pero en un entorno dinámico, los microservicios van y vienen en un abrir y cerrar de ojos. Proliferan los nuevos entornos y los equipos de productos deben configurar continuamente sus propios espacios de trabajo, lo que consume tiempo y recursos.

Detección de deriva

Las plataformas IaC genéricas no proporcionan mecanismos para detectar si la infraestructura se está desviando . Debido a que gran parte de la configuración se realiza en tiempo de ejecución, surgen diferencias entre el estado deseado y el real de la infraestructura.

La deriva tiene muchas causas, como las contingencias del script de máquina o del desarrollador o la falta de recursos del sistema. Demasiada deriva da como resultado aplicaciones inestables. Detectar tales problemas al principio del ciclo de desarrollo es más eficiente que tratar de arreglar un sistema de producción. Pero a menudo falta la visibilidad necesaria, y las deficiencias se vuelven evidentes solo cuando el sistema está completamente en uso.

Visualización de recursos

Dado el entorno dinámico actual, los desarrolladores necesitan una visibilidad clara. Deben poder examinar de cerca lo que sucede a medida que se ejecuta su trabajo. Aunque ofrecen muchas ventajas, las plataformas de CI/CD brindan poca información sobre el uso de recursos desde una perspectiva histórica o en tiempo real.

Por lo tanto, cada vez que surgen problemas de rendimiento, estas plataformas ofrecen poca información sobre cuál es el origen del problema o cómo solucionarlo. En consecuencia, la atención de los desarrolladores pasa de las mejoras de la aplicación a la solución de problemas.

Falta de reutilización

La infraestructura heredada no permitió que los equipos reutilizaran imágenes de sistema probadas y verdaderas en múltiples entornos. Para abordar este problema, los equipos suelen crear una nueva imagen para cada versión de cada aplicación, lo que ralentiza el tiempo de desarrollo. 

Altos precios

La configuración manual de cada entorno de TI requiere tiempo y mano de obra, lo que aumenta los costos. Las empresas deben tener equipos dedicados de ingenieros responsables de crear la infraestructura. Pero también necesitan supervisores y recursos del centro de datos, lo que en última instancia aumenta los gastos de tecnología. Las herramientas de IaC gestionan el proceso de forma centralizada y crean el entorno adecuado. De esa forma, las organizaciones pagan solo por los recursos del sistema que realmente necesitan.

¿Cómo IaC mejora el negocio? 

Las prácticas de TI heredadas son costosas, lentas e inconsistentes porque dependen en gran medida de la entrada manual. La infraestructura como código automatiza gran parte del proceso de administración de la infraestructura, lo que brinda una variedad de beneficios.

Velocidad 

Con IaC, el aprovisionamiento y la gestión son años luz más rápidos y eficientes que con un sistema manual. La infraestructura del entorno se define en el código. Esa infraestructura basada en código acelera significativamente cada fase del ciclo de desarrollo y entrega de software. En consecuencia, los equipos de DevOps entregan aplicaciones más rápido y a escala mientras mejoran la calidad del software.

Consistencia

IaC implementa configuraciones consistentes constantemente y sin discrepancias. Debido a esto, permite la entrega rápida de infraestructuras y entornos consistentes. Esto reduce los errores y los gastos generales al mismo tiempo que aumenta la productividad.

Eliminación de los gastos generales de gestión

La automatización de la infraestructura ayuda a reducir la cantidad de personas que participan en las partes de enrutamiento del proceso de desarrollo de software. Esto se debe a que no se necesitan recursos humanos en la gestión de redes y almacenamiento. Las empresas liberan personal para trabajar en iniciativas más estratégicas.

Reducción de riesgos y errores

IaC ayuda a reducir riesgos y evitar errores humanos. También protege contra problemas de tiempo de ejecución y debilidades de seguridad causadas por dependencias faltantes o cambios de configuración.

Visibilidad

Los desarrolladores versionan los archivos de configuración de IaC de la misma manera que lo hacen con cualquier otro archivo de código fuente. Esto les da una trazabilidad completa de cualquier cambio. De esta forma, IaC garantiza flujos de trabajo eficientes y excepcionalmente transparentes y acelera el proceso de desarrollo.

Encontrar una solución IaC 

El mantenimiento de la infraestructura heredada era un proceso complejo que consumía mucho tiempo. IaC está emergiendo como una solución que alivia gran parte del estrés y el dolor que los equipos de desarrolladores sienten a diario. Ahora, pueden acelerar la implementación y la conexión de los recursos del sistema a las aplicaciones. Los desarrolladores pueden volverse más eficientes y permitir que la empresa responda a las demandas comerciales de una manera más rápida, confiable y rentable. El proceso de desarrollo ya no ralentiza el negocio. 

Fuente: https://devops.com/how-iac-helps-relieve-development-pain-points/

Deja una respuesta