Este proyecto implementa una solución de Infrastructure as Code (IaC) utilizando Terraform para automatizar el aprovisionamiento de recursos en AWS, siguiendo las mejores prácticas de modularidad y seguridad. El objetivo principal es desplegar una aplicación CRUD desarrollada con Flask (Python) de manera eficiente, escalable y reproducible en la nube, garantizando un proceso de implementación consistente y mantenible.
La aplicación Flask funciona como un directorio de empleados que permite registrar información básica de cada trabajador en un servidor de base de datos MySQL. La aplicación incluye las siguientes funcionalidades:
La arquitectura para desplegar la aplicación en AWS incluye los siguientes componentes principales:
Application Load Balancer (ALB): Distribuye las solicitudes entrantes entre las instancias disponibles.
Auto Scaling Group: Gestiona automáticamente entre una y tres instancias EC2 según la demanda.
Amazon S3: Almacena el contenido multimedia de la aplicación.
Amazon RDS MySQL: Servidor de base de datos primario con una réplica en standby que se activa automáticamente en caso de falla.
Las instancias EC2 se ubicarán en subredes públicas para permitir el acceso desde Internet a través del puerto 80 (HTTP) y del puerto 22 (SSH). En contraste, la base de datos se posicionará en subredes privadas y solo será accesible desde el grupo de seguridad de las instancias EC2 mediante el puerto 3306 (MySQL).
De acuerdo con el diseño de la arquitectura, las instancias EC2 deben ser accesibles desde Internet mediante conexión SSH. Para esto se utilizará un Internet Gateway, que permitirá la entrada y salida del tráfico bidireccional hacia Internet. Por su parte, la base de datos solo debe permitir conexiones salientes hacia Internet para acceder a actualizaciones del sistema, por lo cual se implementará un NAT Gateway que proporcionará conectividad unidireccional segura.
Para garantizar la disponibilidad y escalabilidad de la aplicación, se implementará un Auto Scaling Group (ASG) que ajustará automáticamente el número de instancias EC2 entre uno y tres, dependiendo de la carga de trabajo. Además, se configuraron alarmas en Amazon CloudWatch para monitorear el uso del CPU y enviar notificaciones a través de Amazon SNS en caso de que se superen los umbrales establecidos.
Con el objetivo de monitorear el tráfico entrante y saliente de la aplicación, se implementará el servicio AWS VPC Flow Logs, que recopilará los registros de actividad de red de todas las subredes públicas de la arquitectura. Esta información será almacenada para su posterior análisis, permitiendo la identificación de patrones de tráfico, detección de anomalías y optimización del rendimiento de la red.
El aprovisionamiento de la infraestructura en AWS se realiza mediante Terraform, una herramienta de Infrastructure as Code (IaC) que permite definir y gestionar la infraestructura de manera declarativa.
La infraestructura de este proyecto utiliza módulos de Terraform que definen componentes específicos como Auto Scaling Groups (ASG), bases de datos RDS, Security Groups y VPC. El código se organiza en dos carpetas separadas para los entornos de producción y desarrollo. Esta estructura modular facilita una gestión más eficiente, escalable y segura de la infraestructura, mientras que la separación por entornos reduce riesgos y mejora el control de versiones.
El despliegue de la aplicación Flask se realiza mediante un script de shell que instala las dependencias necesarias, configura el entorno y ejecuta la aplicación. Este script se ejecuta automáticamente al iniciar las instancias EC2, asegurando que la aplicación esté siempre disponible.
El script de usuario registra en un archivo de logs el resultado de la ejecución de cada paso del despliegue, permitiendo una resolución rápida de problemas en caso de que se presente alguna falla durante el proceso. Finalmente, se muestra un mensaje en pantalla confirmando que el procedimiento se completó exitosamente.
Puedes encontrar el código fuente de la aplicación en mi repositorio de GitHub: FlaskApp y el código de la infraestructura en: flask_app_terraform
Sitio alojado en un 🪣 S3 de AWS
Powered by Reflex
Built with Reflex