paint-brush
Uso de MinIO y Python para crear aplicaciones basadas en eventos escalables y eficientespor@minio
3,803 lecturas
3,803 lecturas

Uso de MinIO y Python para crear aplicaciones basadas en eventos escalables y eficientes

por MinIO10m2024/04/25
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Las notificaciones de eventos en MinIO pueden no parecer emocionantes al principio, pero una vez que aprovechas su poder, iluminan la dinámica dentro de tus depósitos de almacenamiento.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Uso de MinIO y Python para crear aplicaciones basadas en eventos escalables y eficientes
MinIO HackerNoon profile picture


Las notificaciones de eventos en MinIO pueden no parecer emocionantes al principio, pero una vez que aprovechas su poder, iluminan la dinámica dentro de tus depósitos de almacenamiento. Las notificaciones de eventos son componentes críticos de un sistema de almacenamiento de objetos eficiente y completo. Los webhooks son mi herramienta favorita para la integración con MinIO . Son como una navaja suiza en el mundo de los eventos y ofrecen una solución universal a diversos desafíos.


La interfaz de usuario fácil de usar de MinIO proporciona un servicio perfecto integraciones , pero profundizaremos en esta guía. Estamos creando servicios desde cero en Python, utilizando las credenciales de sus clientes, para guiarlo a través de los aspectos prácticos de la integración de MinIO.


En nuestra exploración, nos centraremos en la implementación mediante docker-compose, un método que ofrece una orquestación optimizada y eficiente. Este enfoque implicará la creación de un entorno cohesivo para MinIO y Flask, que les permitirá interactuar sin problemas. Al integrar el servicio MinIO con sus credenciales y configuraciones apropiadas, nuestro objetivo es crear un flujo de trabajo sistemático que demuestre de manera efectiva la aplicación práctica de administrar y responder a eventos de depósitos MinIO.


Una vez que configuramos las configuraciones del cliente y definimos la estructura de los datos de respuesta, como siempre, comienza la verdadera diversión. Esta demostración resaltará varios aspectos clave de cómo puede conectar su cliente MinIO a una aplicación Flask donde los datos de notificación de eventos se pueden procesar aún más. Queremos que se sienta cómodo desarrollando sus propios sistemas controlados por eventos con MinIO, así que utilice los servicios que le brindamos en el activos-de-blog/flask-webhook-notificaciones-de-eventos recurso alojado en Página de GitHub de MinIO .


Prepárese para sumergirse en un mundo donde el manejo de datos es tanto un arte como una ciencia, simplificado con MinIO. Es una oportunidad para innovar, crear y revolucionar la forma en que sus aplicaciones funcionan con datos.

MinIO y servicios integrados

La integración de MinIO en el Ecosistema Kubernetes ejemplifica su adaptabilidad a través de diversas tecnologías de nube. Los webhooks son fundamentales y ofrecen a los desarrolladores la flexibilidad de crear integraciones personalizadas, ya sea para administrar datos en diversas plataformas en la nube o para configuraciones de laboratorios domésticos locales.


Esta guía va más allá de los conceptos teóricos y le proporciona fragmentos de código prácticos y ejecutables para crear sus integraciones. Es una invitación a explorar el potencial ilimitado de su creatividad al aprovechar las notificaciones de eventos MinIO.

Sentando las bases para una aplicación Python con Docker

La fase inicial de nuestro viaje está dedicada a aprovechar el poder de la contenedorización de Docker para crear un entorno de aplicaciones Python robusto. Nuestro enfoque se centra en la implementación con Docker-compose, un método elegido por su simplicidad y eficacia. Esta opción está diseñada para atender a una amplia gama de desarrolladores, priorizando la facilidad de uso y la rápida implementación, al tiempo que garantiza un alto nivel de funcionalidad.


Utilizando Docker-compose, creamos una configuración fácil de usar basada en la configuración. Este entorno es perfecto para quienes buscan una implementación rápida sin sacrificar la profundidad de las capacidades de su proyecto. Proporciona un camino sencillo para integrar funciones avanzadas de webhook y ajustar la configuración de MinIO, atendiendo a los requisitos específicos de su proyecto.


Cada paso que damos para crear este entorno es crucial. No se trata sólo de poner en funcionamiento los servicios; se trata de comprender y aprovechar los componentes para crear un sistema integral. Desarrollar sus propios sistemas puede ser la chispa que encienda su innovación, mejore su estrategia general de gestión de datos y, finalmente, convierta sus datos sin procesar en información útil y reveladora.

Implementación de MinIO y servicios integrados

Implementar con Docker-Compose: aplicación Flask y MinIO

Comenzaremos configurando una aplicación Python y su entorno. Esto implica implementar MinIO con Docker Compose y los servicios que se integrarán. Para configurar MinIO con una aplicación Flask, usaremos el comando git para clonar el repositorio minio/blog-assets en su entorno local:


 git clone https://github.com/minio/blog-assets.git cd flask-webhook-event-notifications docker-compose up


Esto clonará el minio/blog-activos repositorio de GitHub, navegue hasta el /flask-webhook-notificaciones-de-eventos/ directorio que contiene el docker-compose.yaml archivo e inicie los servicios MinIO y Flask.

Estructura de directorios

Esta estructura de composición acoplable describe dos servicios y sus respectivas variables de configuración. Para fines de visualización, he proporcionado aquí una vista de árbol de la estructura de directorios deseada:


 /flask-webhook-event-notifications ├── Dockerfile ├── app │ └── main.py └── docker-compose.yaml

Configurar webhooks en MinIO

La configuración de un webhook en MinIO se puede lograr mediante varios métodos que van desde el uso de la interfaz de usuario, el uso de mc (la utilidad del cliente MinIO) o mediante secuencias de comandos con varios lenguajes de programación.


MinIO admite un Variedad de servicios externos para notificaciones de eventos. , incluidos: AMQP (RabbitMQ) , MQTT , NATS , NSQ , Elasticsearch , Kafka , MySQL , PostgreSQL , Redis y servicios de webhook .


Configurar MinIO para utilizar estos notificaciones de eventos Implica una serie de pasos bien definidos, asegurando que su instancia MinIO no solo capture sino que también comunique de manera efectiva datos de eventos importantes como una parte interactiva y responsiva de su ecosistema de aplicaciones.

Comprensión de la estructura de datos de las notificaciones de eventos MinIO

Las notificaciones de eventos S3 de MinIO incluyen un estructura de datos JSON detallada , imprescindible para una comprensión integral y una gestión eficaz de los eventos. A continuación, enumero algunos de los valores encontrados en los datos del evento:


  • Llave : El identificador único del objeto en el depósito.


  • etiqueta electrónica : El identificador de versión del objeto para integridad y control de versiones.


  • Tamaño : El tamaño del objeto en bytes, indicando su escala.


  • Secuenciador : Garantiza que los eventos se procesen en la secuencia exacta en la que ocurrieron.


  • Tipo de contenido : El tipo de medio del objeto, especificando cómo manejar o mostrar el archivo.


  • Metadatos de usuario : metadatos definidos por el usuario adjuntos al objeto, lo que proporciona contexto adicional.


  • Detalles del cucharón :

    • ARN (nombre del recurso de Amazon) : el identificador único del depósito en AWS.

    • Nombre : El nombre del depósito donde se almacena el objeto.

    • PropietarioIdentidad : Información sobre el propietario del depósito.


  • Versión de esquema s3 : Indica la versión del esquema de notificación de eventos de S3 utilizado.


  • ID de configuración : Identificador de la configuración de notificación específica que desencadenó este evento.


Esta estructura es particularmente efectiva para Aplicaciones de matraz , lo que permite el registro, análisis y análisis sistemático de las interacciones con el depósito MinIO.

Configuración de MinIO para webhooks y operaciones basadas en eventos

Después de implementar docker-compose.yaml descrito anteriormente, continúe usando la utilidad de línea de comandos MinIO Client, mc . Esta configuración implica crear un alias en MinIO, configurar el punto final y configurar notificaciones de depósito.


Trabajaremos dentro de una terminal interactiva para el contenedor "minio" , que podemos generar ejecutando un solo comando:


docker exec -it minio /bin/sh


La razón para ejecutar nuestros comandos mc desde este shell es porque la imagen Docker minio/minio ya tiene mc instalado y listo para funcionar.


Una vez dentro de la terminal interactiva del contenedor, el proceso de configuración de MinIO para notificaciones de eventos utilizando el Cliente MinIO (mc) implica los siguientes pasos clave:


  1. Configurar el alias de MinIO : El primer paso consiste en crear un alias para su servidor MinIO utilizando el Cliente MinIO (mc). Este alias es un acceso directo a su servidor MinIO, lo que le permite ejecutar fácilmente más comandos mc sin especificar repetidamente la dirección del servidor y las credenciales de acceso. Este paso simplifica la administración de su servidor MinIO a través del cliente.

    mc alias set myminio http://localhost:9000 minio minio123

  2. Agregar el punto final del Webhook a MinIO : Configure un nuevo punto final del servicio webhook en MinIO. Esta configuración se realiza utilizando variables de entorno o ajustes de configuración de tiempo de ejecución, donde se definen parámetros importantes como la URL del punto final, un token de autenticación opcional para seguridad y certificados de cliente para conexiones seguras.

    mc admin config set myminio notify_webhook:1 endpoint="http://flaskapp:5000/minio-event" queue_limit="10"


  3. Reiniciar la implementación de MinIO : Una vez que haya configurado los ajustes, reinicie su implementación de MinIO para asegurarse de que los cambios surtan efecto.

    mc admin service restart myminio

    Esperar:

    Restart command successfully sent to myminio. Type Ctrl-C to quit or wait to follow the status of the restart process....Restarted myminio successfully in 1 seconds


  4. Configurar notificaciones de depósitos : El siguiente paso implica utilizar el comando mc event add. Este comando se utiliza para agregar nuevos eventos de notificación de depósito, configurando el servicio Webhook recién configurado como destino para estas notificaciones.

    mc event add myminio/mybucket arn:minio:sqs::1:webhook --event put,get,delete

    Esperar:

    Successfully added arn:minio:sqs::1:webhook


  5. Listar eventos suscritos al depósito : Ejecute este comando para listar el evento asignado a myminio/mybucket:

    minio mc event list myminio/mybucket

    Esperar:

    arn:minio:sqs::1:webhook s3:ObjectCreated:*,s3:ObjectAccessed:*,s3:ObjectRemoved:* Filter:


  6. Listar eventos asignados al depósito (en JSON) : Ejecute este comando para listar el evento asignado a myminio/mybucket en formato JSON:

    minio mc event list myminio/mybucket arn:minio:sqs::1:webhook --json

    Esperar:

    { "status": "success", "id": "", "event": ["s3:ObjectCreated:","s3:ObjectAccessed:", "s3:ObjectRemoved:*"], "prefix": "", "suffix": "", "arn": "arn:minio:sqs::1:webhook"}

La estructura de los datos de notificación de eventos recibidos por Flask

Dependiendo de los servicios o la integración que esté creando, es posible que necesite identificar event_data de su aplicación Flask, y esto requiere una buena comprensión de los datos que proporciona su evento.


 { "s3": { "bucket": { "arn": "arn:aws:s3:::mybucket", "name": "mybucket", "ownerIdentity": { "principalId": "minio" } }, "object": { "key": "cmd.md", "eTag": "d8e8fca2dc0f896fd7cb4cb0031ba249", "size": 5, "sequencer": "17A9AB4FA93B35D8", "contentType": "text/markdown", "userMetadata": { "content-type": "text/markdown" } }, "configurationId": "Config", "s3SchemaVersion": "1.0" }, "source": { "host": "127.0.0.1", "port": "", "userAgent": "MinIO (linux; arm64) minio-go/v7.0.66 mc/RELEASE.2024-01-11T05-49-32Z" }, "awsRegion": "", "eventName": "s3:ObjectCreated:Put", "eventTime": "2024-01-12T17:58:12.569Z", "eventSource": "minio:s3", "eventVersion": "2.0", "userIdentity": { "principalId": "minio" }, "responseElements": { "x-amz-id-2": "dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8", "x-amz-request-id": "17A9AB4FA9328C8F", "x-minio-deployment-id": "c3642fb7-ab2a-44a0-96cb-246bf4d18e84", "x-minio-origin-endpoint": "http://172.18.0.3:9000" }, "requestParameters": { "region": "", "principalId": "minio", "sourceIPAddress": "127.0.0.1" } }


Si sigue estos pasos, puede utilizar de manera efectiva las notificaciones de eventos MinIO, automatizando significativamente los procesos de flujo de trabajo de datos. Para obtener orientación e información más detallada, consulte la documentación de MinIO en Notificaciones de depósito y Monitoreo de eventos de objetos y depósitos .


Si está interesado en configurar MinIO con PostgreSQL , eche un vistazo a Optimización de eventos de datos con MinIO y PostgreSQL , donde cubrí la extensa configuración y gestión de eventos de datos de MinIO. Estas configuraciones van desde el uso de la consola MinIO para una interfaz gráfica fácil de usar hasta la herramienta de línea de comandos mc para una configuración más detallada y programable. La publicación del blog completa aún más su comprensión del tema al enfatizar la importancia de configurar correctamente PostgreSQL en la interfaz de usuario de MinIO y la importancia de reiniciar el servidor MinIO para que los cambios surtan efecto.


Desarrollo de un webhook con Flask para recibir notificaciones de eventos

Después de la implementación de nuestro entorno, ahora cambiamos nuestro enfoque a la integración de MinIO con Python, un aspecto clave de nuestro sistema de procesamiento y manejo de datos. Esta integración es fundamental para crear un ecosistema cohesivo, donde MinIO puede colaborar sin problemas con Flask.

Importar los paquetes necesarios

En nuestro código de demostración, seleccionamos cuidadosamente las importaciones de Python para garantizar que la funcionalidad de la aplicación se alinee con el propósito previsto. El paquete flask crea la infraestructura del servidor web y define puntos finales para manejar las solicitudes HTTP entrantes. Luego, la aplicación se puede codificar para manejar las notificaciones de eventos MinIO de la manera deseada.


 from flask import Flask, jsonify, request


Estas importaciones forman colectivamente la base de la aplicación, permitiéndole recibir y procesar notificaciones de eventos MinIO.

Aplicación Flask y punto final de manejo de eventos en Python

Se crea una instancia de una aplicación Flask y se configura un punto final para manejar solicitudes POST en la ruta /minio-event . Flask es un marco micro web en Python, ideal para configurar aplicaciones web y puntos finales API.


 app = Flask(__name__) @app.route('/minio-event', methods=['POST']) def handle_minio_event(): event_data = request.json app.logger.info(f"Received MinIO event: {event_data}") return jsonify(event_data), 200


La función handle_minio_event en la aplicación Flask procesa solicitudes POST que contienen datos del evento MinIO y devuelve los event_data recibidos de la notificación del evento MinIO.


Este enfoque facilita el procesamiento y la respuesta en tiempo real a eventos de almacenamiento, lo que permite la interacción dinámica entre el sistema de almacenamiento MinIO y la aplicación Flask.

Integración de servicios con MinIO Bucket Events mediante secuencias de comandos Python

Esta publicación de blog utilizó MinIO y Python en un entorno Docker para demostrar el poder y la flexibilidad de las notificaciones de eventos del depósito MinIO, y demuestra un enfoque estratégico para crear aplicaciones escalables y eficientes basadas en eventos.


El uso de Docker, con su tecnología de contenerización, destaca por permitir que componentes como MinIO y Flask funcionen de forma independiente pero cohesiva. Por supuesto, esta configuración nativa de la nube en contenedores minimiza los conflictos y las dependencias, lo que resalta la importancia de Docker y los contenedores Docker en la arquitectura de software moderna.


En conclusión de nuestra exploración de las notificaciones de eventos de webhook de MinIO, estoy convencido de que la sinergia de un lenguaje de programación dinámico y la formidable fortaleza de MinIO presenta un conjunto de herramientas incomparable. Esta combinación allana el camino para oportunidades ilimitadas en el desarrollo de aplicaciones. Nos permite no solo innovar y optimizar, sino también ampliar nuestras capacidades con notable eficiencia y adaptabilidad.


Esta guía ha demostrado la simplicidad y eficacia del desarrollo de API utilizando Python, sentando una base sólida para la innovación continua y satisfaciendo las demandas en constante cambio. Subraya la adaptabilidad que es esencial para el avance continuo tanto en la gestión de datos como en la evolución del desarrollo de aplicaciones. Este enfoque no es sólo una metodología; es un camino para preparar nuestros esfuerzos tecnológicos para el futuro.