Diseño y despliegue de una solución CI/CD y microservicios con AWS

En este trabajo de fin de grado se llevará a cabo la migración de una aplicación monolítica a microservicios, utilizando los servicios proporcionados por AWS. La aplicación abarcará distintas fases que simularán el trabajo de un ingeniero DevOps en un proyecto en la nube. Comenzaré definiendo qué es una aplicación monolítica y su transformación en microservicios. Una aplicación monolítica se construye como una sola unidad, generalmente compuesta por tres partes: la interfaz de usuario (UI), la base de datos y la lógica de la aplicación, todas ellas integradas en una única unidad. Este tipo de aplicaciones escalan horizontalmente, es decir, cuando se necesitan más recursos, se crea una copia exacta del monolito en otro servidor y se utiliza un balanceador de carga para distribuir las peticiones de los clientes. Sin embargo, cualquier cambio en la aplicación requerirá reiniciar todas las instancias, ya que todas deben ejecutar el mismo código fuente. Por otro lado, una aplicación dividida en microservicios es un sistema compuesto por entidades o componentes relativamente pequeños y poco acoplados, que se comunican entre sí mediante protocolos de comunicación ligeros (API, HTTP/HTTPs). Entre las ventajas de este enfoque se encuentran la agilidad en el desarrollo, debido a bases de código más pequeñas que representan funciones de negocio individuales, así como la tolerancia a fallos, ya que la aplicación puede seguir funcionando aunque uno de los servicios esté inoperativo. Sin embargo, factores como la seguridad, la fiabilidad y la latencia de la red adquieren una importancia crítica, dado que cada mensaje dentro de la aplicación implica la transmisión de datos a través de la red. Además, la división de la aplicación aumenta su superficie de ataque, lo que plantea desafíos adicionales en términos de seguridad. Además, en la ejecución del proyecto se implementarán prácticas de CI/CD (Integración Continua y Despliegue Continuo). La Integración Continua implica que el equipo de desarrollo tendrá acceso a pruebas automatizadas y a la integración del código fuente desde el entorno de desarrollo al servidor de integración. Esto no solo permite que los usuarios puedan evaluar nuevas funciones del software con mayor frecuencia y rapidez, sino que también minimiza los costos operativos en la empresa y reduce los esfuerzos necesarios para la gestión y coordinación del desarrollo de software. Por otro lado, el Despliegue Continuo garantiza que el código esté siempre disponible en una versión estable (release), aun cuando el equipo de desarrollo continúe realizando cambios de manera diaria.

​En este trabajo de fin de grado se llevará a cabo la migración de una aplicación monolítica a microservicios, utilizando los servicios proporcionados por AWS. La aplicación abarcará distintas fases que simularán el trabajo de un ingeniero DevOps en un proyecto en la nube. Comenzaré definiendo qué es una aplicación monolítica y su transformación en microservicios. Una aplicación monolítica se construye como una sola unidad, generalmente compuesta por tres partes: la interfaz de usuario (UI), la base de datos y la lógica de la aplicación, todas ellas integradas en una única unidad. Este tipo de aplicaciones escalan horizontalmente, es decir, cuando se necesitan más recursos, se crea una copia exacta del monolito en otro servidor y se utiliza un balanceador de carga para distribuir las peticiones de los clientes. Sin embargo, cualquier cambio en la aplicación requerirá reiniciar todas las instancias, ya que todas deben ejecutar el mismo código fuente. Por otro lado, una aplicación dividida en microservicios es un sistema compuesto por entidades o componentes relativamente pequeños y poco acoplados, que se comunican entre sí mediante protocolos de comunicación ligeros (API, HTTP/HTTPs). Entre las ventajas de este enfoque se encuentran la agilidad en el desarrollo, debido a bases de código más pequeñas que representan funciones de negocio individuales, así como la tolerancia a fallos, ya que la aplicación puede seguir funcionando aunque uno de los servicios esté inoperativo. Sin embargo, factores como la seguridad, la fiabilidad y la latencia de la red adquieren una importancia crítica, dado que cada mensaje dentro de la aplicación implica la transmisión de datos a través de la red. Además, la división de la aplicación aumenta su superficie de ataque, lo que plantea desafíos adicionales en términos de seguridad. Además, en la ejecución del proyecto se implementarán prácticas de CI/CD (Integración Continua y Despliegue Continuo). La Integración Continua implica que el equipo de desarrollo tendrá acceso a pruebas automatizadas y a la integración del código fuente desde el entorno de desarrollo al servidor de integración. Esto no solo permite que los usuarios puedan evaluar nuevas funciones del software con mayor frecuencia y rapidez, sino que también minimiza los costos operativos en la empresa y reduce los esfuerzos necesarios para la gestión y coordinación del desarrollo de software. Por otro lado, el Despliegue Continuo garantiza que el código esté siempre disponible en una versión estable (release), aun cuando el equipo de desarrollo continúe realizando cambios de manera diaria. Read More