paint-brush
Utiliser MinIO et Python pour créer des applications événementielles évolutives et efficacespar@minio
3,786 lectures
3,786 lectures

Utiliser MinIO et Python pour créer des applications événementielles évolutives et efficaces

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

Trop long; Pour lire

Les notifications d'événements dans MinIO peuvent ne pas sembler passionnantes au début, mais une fois que vous exploitez leur puissance, elles éclairent la dynamique au sein de vos compartiments de stockage.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Utiliser MinIO et Python pour créer des applications événementielles évolutives et efficaces
MinIO HackerNoon profile picture


Les notifications d'événements dans MinIO peuvent ne pas sembler passionnantes au début, mais une fois que vous exploitez leur puissance, elles éclairent la dynamique au sein de vos compartiments de stockage. Les notifications d'événements sont des composants essentiels d'un système de stockage d'objets complet et efficace. Les webhooks sont mon outil préféré pour l'intégration avec MinIO . Ils sont comme un couteau suisse dans le monde de l'événementiel, offrant une solution universelle à divers défis.


L'interface utilisateur conviviale de MinIO offre un service transparent intégrations , mais nous approfondissons ce guide. Nous construisons des services à partir de zéro en Python, en utilisant leurs informations d'identification client, pour vous guider à travers les rouages de l'intégration MinIO.


Dans notre exploration, nous nous concentrerons sur le déploiement à l'aide de docker-compose, une méthode qui offre une orchestration rationalisée et efficace. Cette approche impliquera la mise en place d'un environnement cohérent pour MinIO et Flask, leur permettant d'interagir de manière transparente. En intégrant le service MinIO avec ses informations d'identification et configurations appropriées, nous visons à créer un flux de travail systématique qui démontre efficacement l'application pratique de la gestion et de la réponse aux événements du compartiment MinIO.


Une fois que nous avons configuré les configurations client et défini la structure des données de réponse, comme toujours, le vrai plaisir commence. Cette démonstration mettra en évidence plusieurs aspects clés de la façon dont vous pouvez connecter votre client MinIO à une application Flask où les données de notification d'événements peuvent être traitées davantage. Nous voulons que vous vous sentiez à l'aise pour développer vos propres systèmes événementiels avec MinIO, alors utilisez les services que nous avons fournis dans le blog-actifs/flask-webhook-event-notifications ressource hébergée sur Page GitHub de MinIO .


Préparez-vous à plonger dans un monde où la gestion des données est à la fois un art et une science, simplifiée avec MinIO. C'est l'occasion d'innover, de créer et de révolutionner la façon dont vos applications fonctionnent avec les données.

MinIO et services intégrés

L'intégration de MinIO dans le Écosystème Kubernetes illustre son adaptabilité à travers diverses technologies cloud. Les webhooks jouent un rôle essentiel, offrant aux développeurs la flexibilité nécessaire pour créer des intégrations personnalisées, que ce soit pour gérer des données sur diverses plates-formes cloud ou pour des configurations de laboratoires locaux à domicile.


Ce guide va au-delà des concepts théoriques et vous fournit des extraits de code pratiques et exécutables pour créer vos intégrations. C'est une invitation à explorer le potentiel illimité de votre créativité en tirant parti des notifications d'événements MinIO.

Poser les bases d'une application Python avec Docker

La phase initiale de notre parcours est consacrée à exploiter la puissance de la conteneurisation de Docker pour créer un environnement d'application Python robuste. Notre approche s'articule autour du déploiement avec Docker-compose, une méthode choisie pour sa simplicité et son efficacité. Ce choix est conçu pour s'adresser à un large éventail de développeurs, en privilégiant la facilité d'utilisation et le déploiement rapide tout en garantissant un haut niveau de fonctionnalités.


En utilisant Docker-compose, nous créons une configuration conviviale et basée sur la configuration. Cet environnement est parfait pour ceux qui recherchent un déploiement rapide sans sacrifier la profondeur des capacités de leur projet. Il fournit un moyen simple d'intégrer des fonctionnalités avancées de webhook et d'affiner les paramètres MinIO, en répondant aux exigences spécifiques de votre projet.


Chaque étape que nous franchissons dans la mise en place de cet environnement est cruciale. Il ne s’agit pas seulement de rendre les services opérationnels ; il s'agit de comprendre et d'exploiter les composants pour créer un système complet. Le développement de vos propres systèmes peut être l'étincelle qui déclenche votre innovation, améliorant votre stratégie globale de gestion des données et transformant éventuellement vos données brutes en informations exploitables et pertinentes.

Déploiement de MinIO et des services intégrés

Déployer avec Docker-Compose : Flask App et MinIO

Nous commencerons par mettre en place une application Python et son environnement. Cela implique de déployer MinIO avec docker compose et les services à intégrer. Pour configurer MinIO avec une application Flask, nous utiliserons la commande git pour cloner le référentiel minio/blog-assets dans votre environnement local :


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


Cela clonera le minio/blog-actifs référentiel depuis GitHub, accédez au /flask-webhook-event-notifications/ répertoire contenant le docker-compose.yaml et démarrez les services MinIO et Flask.

Structure du répertoire

Cette structure docker-compose décrit deux services et leurs variables de configuration respectives. À des fins de visualisation, j'ai fourni ici une arborescence de la structure de répertoires souhaitée :


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

Configuration des webhooks dans MinIO

La configuration d'un webhook dans MinIO peut être réalisée via diverses méthodes allant de l'utilisation de l'interface utilisateur à l'utilisation de mc (l'utilitaire client MinIO) ou au moyen de scripts avec divers langages de programmation.


MinIO prend en charge un variété de services externes pour les notifications d'événements , notamment : AMQP (RabbitMQ) , MQTT , NATS , NSQ , Elasticsearch , Kafka , MySQL , PostgreSQL , Redis et les services webhook .


Configuration de MinIO pour les utiliser notifications d'événements implique une série d'étapes bien définies, garantissant que votre instance MinIO non seulement capture mais communique également efficacement les données d'événements importantes en tant que partie interactive et réactive de votre écosystème d'applications.

Comprendre la structure des données des notifications d'événements MinIO

Les notifications d'événements S3 de MinIO incluent un structure de données JSON détaillée , indispensable à une compréhension globale et une gestion efficace des événements. Ci-dessous, j'ai répertorié certaines des valeurs trouvées dans les données d'événement :


  • Clé : L'identifiant unique de l'objet dans le bucket.


  • Étiquette électronique : L'identifiant de version de l'objet pour l'intégrité et le contrôle de version.


  • Taille : La taille de l'objet en octets, indiquant son échelle.


  • Séquenceur : garantit que les événements sont traités dans l'ordre exact dans lequel ils se sont produits.


  • Type de contenu : Le type de média de l'objet, spécifiant comment gérer ou afficher le fichier.


  • Métadonnées utilisateur : métadonnées définies par l'utilisateur attachées à l'objet, fournissant un contexte supplémentaire.


  • Détails du seau :

    • ARN (nom de la ressource Amazon) : L'identifiant unique du compartiment dans AWS.

    • Nom : Le nom du bucket dans lequel l'objet est stocké.

    • Identité du propriétaire : Informations sur le propriétaire du bucket.


  • s3SchemaVersion : Indique la version du schéma de notification d'événement S3 utilisé.


  • ID de configuration : Identifiant de la configuration de notification spécifique qui a déclenché cet événement.


Cette structure est particulièrement efficace pour Applications en flacons , permettant une journalisation, une analyse et une analyse systématiques des interactions avec le compartiment MinIO.

Configuration de MinIO pour les webhooks et les opérations basées sur des événements

Après avoir déployé le docker-compose.yaml décrit ci-dessus, continuez à utiliser l'utilitaire de ligne de commande MinIO Client, mc . Cette configuration implique la création d'un alias dans MinIO, la configuration du point de terminaison et la définition des notifications de compartiment.


Nous travaillerons à l'intérieur d'un terminal interactif pour le conteneur « minio » , que nous pouvons générer en exécutant une seule commande :


docker exec -it minio /bin/sh


La raison pour laquelle nous exécutons nos commandes mc à partir de ce shell est que l'image Docker minio/minio a déjà mc installé et prêt à fonctionner.


Une fois à l'intérieur du terminal interactif du conteneur, le processus de configuration de MinIO pour les notifications d'événements à l'aide du client MinIO (mc) implique les étapes clés suivantes :


  1. Configuration de l'alias MinIO : La première étape consiste à créer un alias pour votre serveur MinIO à l'aide du MinIO Client (mc). Cet alias est un raccourci vers votre serveur MinIO, vous permettant d'exécuter facilement d'autres commandes mc sans spécifier à plusieurs reprises l'adresse et les informations d'identification du serveur. Cette étape simplifie la gestion de votre serveur MinIO via le client.

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

  2. Ajout du point de terminaison Webhook à MinIO : configurez un nouveau point de terminaison de service webhook dans MinIO. Cette configuration est effectuée à l'aide de variables d'environnement ou de paramètres de configuration d'exécution, dans lesquels vous définissez des paramètres importants tels que l'URL du point de terminaison, un jeton d'authentification facultatif pour la sécurité et des certificats clients pour les connexions sécurisées.

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


  3. Redémarrage du déploiement MinIO : Une fois que vous avez configuré les paramètres, redémarrez votre déploiement MinIO pour vous assurer que les modifications prennent effet.

    mc admin service restart myminio

    Attendre:

    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. Configuration des notifications de compartiment : L'étape suivante consiste à utiliser la commande mc event add. Cette commande est utilisée pour ajouter de nouveaux événements de notification de compartiment, en définissant le service Webhook nouvellement configuré comme cible de ces notifications.

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

    Attendre:

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


  5. Répertorier les événements auxquels vous êtes abonné : Exécutez cette commande pour lister l'événement attribué à myminio/mybucket :

    minio mc event list myminio/mybucket

    Attendre:

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


  6. Répertorier les événements attribués au bucket (en JSON) : Exécutez cette commande pour lister l'événement attribué à myminio/mybucket au format JSON :

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

    Attendre:

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

La structure des données de notification d'événement reçues par Flask

En fonction des services ou de l'intégration que vous créez, vous devrez peut-être identifier les event_data de votre application Flask, ce qui nécessite une bonne compréhension des données fournies par votre événement.


 { "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" } }


En suivant ces étapes, vous pouvez utiliser efficacement les notifications d'événements MinIO, automatisant ainsi considérablement les processus de flux de données. Pour des conseils et des informations plus détaillées, veuillez vous référer à la documentation MinIO sur Notifications de compartiment et Surveillance des événements de compartiment et d'objet .


Si vous souhaitez configurer MinIO avec PostgreSQL , jetez un œil à Rationaliser les événements de données avec MinIO et PostgreSQL , où j'ai couvert la configuration étendue et la gestion des événements de données de MinIO. Ces configurations vont de l'utilisation de la console MinIO pour une interface graphique conviviale à l' outil de ligne de commande mc pour une configuration plus détaillée et scriptable. Le billet de blog complète votre compréhension du sujet en soulignant l'importance de configurer correctement PostgreSQL dans l'interface utilisateur MinIO et l'importance du redémarrage du serveur MinIO pour que les modifications prennent effet.


Développement d'un Webhook avec Flask pour recevoir des notifications d'événements

Suite au déploiement de notre environnement, nous nous concentrons désormais sur l'intégration de MinIO avec Python, un aspect clé de notre système de gestion et de traitement des données. Cette intégration est essentielle à la création d'un écosystème cohérent, où MinIO peut collaborer de manière transparente avec Flask.

Importer les packages nécessaires

Dans notre code de démonstration, nous sélectionnons soigneusement les importations Python pour garantir que les fonctionnalités de l'application correspondent à leur objectif prévu. Le package flask crée l'infrastructure du serveur Web, définissant les points de terminaison pour gérer les requêtes HTTP entrantes. Ensuite, l'application peut être codée pour gérer les notifications d'événements MinIO de la manière souhaitée.


 from flask import Flask, jsonify, request


Ces importations constituent collectivement la base de l'application, lui permettant de recevoir et de traiter les notifications d'événements MinIO.

Application Flask et point de terminaison de gestion des événements en Python

Une application Flask est instanciée et un point de terminaison est configuré pour gérer les requêtes POST sur la route /minio-event . Flask est un framework micro web en Python, idéal pour configurer des applications Web et des points de terminaison d'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 fonction handle_minio_event de l'application Flask traite les requêtes POST contenant les données d'événement MinIO et renvoie les event_data reçues de la notification d'événement MinIO.


Cette approche facilite le traitement et la réponse en temps réel aux événements de stockage, permettant une interaction dynamique entre le système de stockage MinIO et l'application Flask.

Intégration de services avec les événements du bucket MinIO via des scripts Python

Cet article de blog a utilisé MinIO et Python dans un environnement Docker pour démontrer la puissance et la flexibilité des notifications d'événements de compartiment MinIO, et démontre une approche stratégique pour créer des applications événementielles évolutives et efficaces.


L'utilisation de Docker, avec sa technologie de conteneurisation, se distingue en permettant à des composants tels que MinIO et Flask de fonctionner de manière indépendante mais cohérente. Bien entendu, cette configuration cloud native conteneurisée minimise les conflits et les dépendances, soulignant ainsi l'importance de Docker et des conteneurs Docker dans l'architecture logicielle moderne.


En conclusion de notre exploration des notifications d'événements de webhook MinIO, je suis convaincu que la synergie d'un langage de programmation dynamique et la formidable force de MinIO présentent une boîte à outils sans précédent. Ce jumelage ouvre la voie à des opportunités illimitées en matière de développement d’applications. Cela nous permet non seulement d’innover et de rationaliser, mais également d’étendre nos capacités avec une efficacité et une adaptabilité remarquables.


Ce guide a démontré la simplicité et l'efficacité du développement d'API à l'aide de Python, établissant ainsi une base solide pour une innovation continue et répondant aux demandes en constante évolution. Il souligne l’adaptabilité essentielle à l’avancement continu de la gestion des données et à l’évolution du développement d’applications. Cette approche n’est pas seulement une méthodologie ; c'est une voie vers la pérennité de nos efforts technologiques.