Coder Social home page Coder Social logo

ntphiep / aws-event-project Goto Github PK

View Code? Open in Web Editor NEW

This project forked from facuoppi/aws-event-project

1.0 0.0 0.0 68 KB

Utilice Python con boto3 para interactuar con los servicios de AWS (DynamoDB, EC2, Lambda,...) y Flask para crear una aplicación que permita a los usuarios ingresar información sobre un libro. AWS implementa los flujos de datos y las tareas.

License: MIT License

Python 55.17% HTML 44.83%
aws dynamodb lambda python

aws-event-project's Introduction

Español

Formulario de Gestión de Libros

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.

Arquitectura en AWS

Oppido Facundo-AWS

Desplegando una Aplicación Flask en EC2 con Gunicorn y Nginx

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:

Paso 1: Instalar Python Virtualenv

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.

Paso 2: Configurar el Entorno Virtual

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.

Paso 3: Instalar Flask

pip install flask

Esto instala el framework Flask dentro del entorno virtual, permitiéndote desarrollar aplicaciones web usando Python.

Paso 4: Instalar Flask-WTF

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.

Paso 5: Instalar boto3

pip install boto3

Interfaz de cliente de Python para interactuar con servicios en la nube de Amazon Web Services (AWS).

Paso 6: Crear una API Simple con Flask (Clonar Repositorio de Github)

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.

Paso 7: Instalar Gunicorn

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).

Paso 8: Usar systemd para Administrar Gunicorn

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

Paso 9: Ejecutar el Servidor Web Nginx

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.

Fin

¡Muchas gracias por tu visita! Espero que la información te haya sido útil. 😊 Puedes encontrarme en LinkedIn.

Licencia

Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para obtener más detalles.


English with Español

Book Management Form

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.

Architecture in AWS

Oppido Facundo-AWS

aws-event-project's People

Contributors

facuoppi avatar ntphiep avatar

Stargazers

Huynh Trieu avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.