Español
Este proyecto consiste en un formulario web desarrollado en Flask que permite a los usuarios registrar información sobre libros, como título, autor, género, año de publicación y editorial. Los datos ingresados en el formulario se almacenan en una base de datos DynamoDB de AWS.
Además, se implementa un flujo de datos automatizado utilizando los servicios de AWS. Un stream de DynamoDB alimenta un pipeline que envía los datos a una cola SQS. Desde allí, un Lambda es invocado para realizar transformaciones en los datos y luego almacenarlos en un bucket de Amazon S3.
Finalmente, los datos almacenados en S3 pueden ser consultados utilizando Amazon Athena para análisis y generación de informes.
Todo el sistema está desplegado y ejecutándose en una instancia EC2 de AWS, lo que proporciona una plataforma robusta y escalable para la gestión eficiente de libros y análisis de datos.
Te llevaré paso a paso en la configuración de una aplicación Flask en una instancia de EC2, utilizando Gunicorn como el servidor WSGI y Nginx como un proxy inverso.
Vamos a profundizar un poco más en cada paso:
sudo apt-get update
sudo apt-get install python3-venv
Este paso se encarga de asegurarse de que tu instancia EC2 tenga todas las herramientas necesarias para crear y gestionar entornos virtuales para Python.
mkdir project
cd project
python3 -m venv venv
source venv/bin/activate
Acá creamos un directorio para el proyecto y configuramos un entorno virtual dentro de él. Activar el entorno virtual aisla las dependencias del proyecto, evitando conflictos con otros proyectos de Python en la misma máquina.
pip install flask
Esto instala el framework Flask dentro del entorno virtual, permitiéndote desarrollar aplicaciones web usando Python.
pip install Flask-WTF
Extensión para Flask que proporciona integración con el paquete WTForms, una biblioteca de Python para la creación de formularios web. Flask-WTF simplifica la creación y validación de formularios HTML en aplicaciones Flask.
pip install boto3
Interfaz de cliente de Python para interactuar con servicios en la nube de Amazon Web Services (AWS).
git clone https://github.com/facuoppi/aws-event-project.git
cd ..
mv project/aws-event-project/* project/
rm -r project/aws-event-project
Clonas el código de tu aplicación Flask desde un repositorio de GitHub.
cd project/
python app.py
Verificamos que la aplicación funcione asegura que tu API de Flask esté correctamente configurada.
pip install gunicorn
Gunicorn, o Green Unicorn, es un servidor WSGI para ejecutar aplicaciones Flask. Instalarlo es un paso crucial para desplegar una aplicación Flask lista para producción.
gunicorn -b 0.0.0.0:8000 app:app
Ejecutas Gunicorn, uniéndolo a la dirección 0.0.0.0:8000 y especificando el punto de entrada de tu aplicación Flask (app:app).
Creas un archivo de unidad systemd para administrar el proceso de Gunicorn como un servicio.
sudo nano /etc/systemd/system/project.service
El archivo de unidad especifica el usuario, el directorio de trabajo y el comando para iniciar Gunicorn como un servicio.
[Unit]
Description=Gunicorn instance for a de-project
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/project
ExecStart=/home/ubuntu/project/venv/bin/gunicorn -b 0.0.0.0:8000 app:app
Restart=always
[Install]
WantedBy=multi-user.target
De esta forma permitimos el trafico a nuestra aplicación. Después de crear el archivo de unidad, habilitas e inicias el servicio de Gunicorn.
sudo systemctl daemon-reload
sudo systemctl start project
sudo systemctl enable project
sudo apt-get install nginx
Nginx es un servidor web que actuará como un proxy inverso para tu aplicación Flask, reenviando las solicitudes a Gunicorn.
sudo systemctl start nginx
sudo systemctl enable nginx
Iniciar y habilitar Nginx asegura que se ejecute automáticamente después de un reinicio del sistema.
sudo nano /etc/nginx/sites-available/default
Configuras Nginx editando su archivo de configuración predeterminado, especificando el servidor upstream (Gunicorn) y la ubicación para reenviar las solicitudes.
upstream flask_project {
server 127.0.0.1:5000;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://flask_project;
try_files $uri $uri/ =404;
}
location /exito {
alias /home/ubuntu/project/templates/;
index exito.html;
try_files $uri =404;
allow all;
}
location /registrar_libro {
proxy_pass http://flask_project;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Después de editar la configuración, reinicias Nginx para aplicar los cambios.
sudo systemctl restart nginx
Visitar la dirección IP pública de tu instancia EC2 en un navegador confirma que tu aplicación Flask ahora es accesible a través de Nginx, completando el proceso de implementación.
¡Muchas gracias por tu visita! Espero que la información te haya sido útil. 😊 Puedes encontrarme en LinkedIn.
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE
para obtener más detalles.
English with Español
This project (Este proyecto) consists of (consiste en) a web form (un formulario web) developed in (desarrollado en) Flask that (que) allows users (permite a los usuarios) to record information about books (registrar información sobre libros) like (como) title, author, genre, year of publication, and publisher (título, autor, género, año de publicación y editorial). The data (Los datos) entered (ingresados) in the form (en el formulario) is stored (se almacenan) in an AWS DynamoDB database (base de datos)
Additionally, an automated data flow is implemented using AWS services. A DynamoDB stream feeds a pipeline that sends data to an SQS queue. From there, a Lambda is invoked to perform transformations on the data and then store it in an Amazon S3 bucket.
Finally, data stored in S3 can be queried using Amazon Athena for analysis and reporting.
The entire system is deployed and running on an AWS EC2 instance, providing a robust and scalable platform for efficient ledger management and data analysis.