paint-brush
Verwenden von MinIO und Python zum Erstellen skalierbarer und effizienter ereignisgesteuerter Anwendungenvon@minio
3,770 Lesungen
3,770 Lesungen

Verwenden von MinIO und Python zum Erstellen skalierbarer und effizienter ereignisgesteuerter Anwendungen

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

Zu lang; Lesen

Ereignisbenachrichtigungen in MinIO erscheinen zunächst vielleicht nicht aufregend, aber wenn Sie sich ihre Leistungsfähigkeit zunutze machen, erhellen sie die Dynamik innerhalb Ihrer Speicher-Buckets.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Verwenden von MinIO und Python zum Erstellen skalierbarer und effizienter ereignisgesteuerter Anwendungen
MinIO HackerNoon profile picture


Ereignisbenachrichtigungen in MinIO erscheinen auf den ersten Blick vielleicht nicht aufregend, aber wenn Sie ihre Leistungsfähigkeit nutzen, erhellen sie die Dynamik in Ihren Speicher-Buckets. Ereignisbenachrichtigungen sind kritische Komponenten eines vollwertigen, effizienten Objektspeichersystems. Webhooks sind mein persönliches Lieblingstool für die Integration mit MinIO . Sie sind wie ein Schweizer Taschenmesser in der Welt der Ereignisse und bieten eine universelle Lösung für verschiedene Herausforderungen.


Die benutzerfreundliche Benutzeroberfläche von MinIO bietet nahtlosen Service Integrationen , aber in diesem Handbuch gehen wir tiefer ins Detail. Wir erstellen Dienste von Grund auf in Python und verwenden ihre Client-Anmeldeinformationen, um Sie durch die Grundlagen der MinIO-Integration zu führen.


In unserer Untersuchung konzentrieren wir uns auf die Bereitstellung mit Docker-Compose, einer Methode, die eine optimierte und effiziente Orchestrierung bietet. Bei diesem Ansatz wird eine zusammenhängende Umgebung für MinIO und Flask eingerichtet, die eine nahtlose Interaktion ermöglicht. Durch die Integration des MinIO-Dienstes mit den entsprechenden Anmeldeinformationen und Konfigurationen möchten wir einen systematischen Workflow erstellen, der die praktische Anwendung der Verwaltung und Reaktion auf MinIO-Bucket-Ereignisse effektiv demonstriert.


Sobald wir die Clientkonfigurationen eingerichtet und die Struktur für die Antwortdaten definiert haben, beginnt wie immer der wahre Spaß. Diese Demonstration wird mehrere wichtige Aspekte hervorheben, wie Sie Ihren MinIO-Client mit einer Flask-Anwendung verbinden können, in der die Ereignisbenachrichtigungsdaten weiter verarbeitet werden können. Wir möchten, dass Sie sich bei der Entwicklung Ihrer eigenen ereignisgesteuerten Systeme mit MinIO wohl fühlen. Nutzen Sie daher die Dienste, die wir in der Blog-Assets/Flask-Webhook-Ereignisbenachrichtigungen Ressource gehostet auf MinIOs GitHub-Seite .


Tauchen Sie ein in eine Welt, in der Datenverarbeitung sowohl Kunst als auch Wissenschaft ist – und mit MinIO wird sie einfacher. Es ist eine Gelegenheit, die Art und Weise, wie Ihre Apps mit Daten arbeiten, zu erneuern, zu gestalten und zu revolutionieren.

MinIO und integrierte Dienste

Die Integration von MinIO in die Kubernetes-Ökosystem veranschaulicht seine Anpassungsfähigkeit an verschiedene Cloud-Technologien. Webhooks sind von zentraler Bedeutung und bieten Entwicklern die Flexibilität, benutzerdefinierte Integrationen zu erstellen, sei es für die Verwaltung von Daten über verschiedene Cloud-Plattformen hinweg oder für lokale Heimlabor-Setups.


Dieser Leitfaden geht über theoretische Konzepte hinaus und bietet Ihnen praktische, ausführbare Codeausschnitte zum Erstellen Ihrer Integrationen. Es ist eine Einladung, das grenzenlose Potenzial Ihrer Kreativität bei der Nutzung von MinIO-Ereignisbenachrichtigungen zu erkunden.

Mit Docker die Grundlagen für eine Python-Anwendung legen

In der ersten Phase unserer Reise geht es darum, die Leistungsfähigkeit der Containerisierung von Docker zu nutzen, um eine robuste Python-Anwendungsumgebung zu erstellen. Unser Ansatz konzentriert sich auf die Bereitstellung mit Docker-Compose, einer Methode, die wir aufgrund ihrer Einfachheit und Effektivität gewählt haben. Diese Wahl ist darauf ausgelegt, ein breites Spektrum an Entwicklern anzusprechen, wobei Benutzerfreundlichkeit und schnelle Bereitstellung im Vordergrund stehen und gleichzeitig ein hohes Maß an Funktionalität gewährleistet wird.


Mithilfe von Docker-Compose erstellen wir ein benutzerfreundliches, konfigurationsgesteuertes Setup. Diese Umgebung ist perfekt für alle, die eine schnelle Bereitstellung wünschen, ohne auf die umfassenden Funktionen ihres Projekts verzichten zu müssen. Sie bietet einen unkomplizierten Weg, erweiterte Webhook-Funktionen zu integrieren und MinIO-Einstellungen zu optimieren, um den spezifischen Anforderungen Ihres Projekts gerecht zu werden.


Jeder Schritt, den wir beim Einrichten dieser Umgebung unternehmen, ist entscheidend. Es geht nicht nur darum, die Dienste zum Laufen zu bringen; es geht darum, Komponenten zu verstehen und zu nutzen, um ein umfassendes System zu erstellen. Die Entwicklung Ihrer eigenen Systeme kann der Funke sein, der Ihre Innovation entfacht, Ihre gesamte Datenverwaltungsstrategie verbessert und Ihre Rohdaten schließlich in umsetzbare, aufschlussreiche Informationen verwandelt.

Bereitstellen von MinIO und integrierten Diensten

Bereitstellen mit Docker-Compose: Flask App und MinIO

Wir beginnen mit der Einrichtung einer Python-Anwendung und ihrer Umgebung. Dazu gehört die Bereitstellung von MinIO mit Docker Compose und den zu integrierenden Diensten. Um MinIO mit einer Flask-Anwendung einzurichten, verwenden wir den git Befehl, um das Repository minio/blog-assets in Ihre lokale Umgebung zu klonen:


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


Dadurch wird das minio/blog-assets Repository von GitHub, navigieren Sie zu /flask-webhook-ereignisbenachrichtigungen/ Verzeichnis mit den docker-compose.yaml Datei und starten Sie die MinIO- und Flask-Dienste.

Verzeichnisaufbau

Diese Docker-Compose-Struktur stellt zwei Dienste und ihre jeweiligen Konfigurationsvariablen dar. Zur Visualisierung habe ich hier eine Baumansicht der gewünschten Verzeichnisstruktur bereitgestellt:


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

Einrichten von Webhooks in MinIO

Die Konfiguration eines Webhooks in MinIO kann auf verschiedene Weise erfolgen, beispielsweise über die Benutzeroberfläche, über mc (das MinIO-Client-Dienstprogramm) oder durch Skripting mit verschiedenen Programmiersprachen.


MinIO unterstützt eine Vielzahl externer Dienste für Ereignisbenachrichtigungen , einschließlich: AMQP (RabbitMQ) , MQTT , NATS , NSQ , Elasticsearch , Kafka , MySQL , PostgreSQL , Redis und Webhook-Dienste .


Einrichten von MinIO zur Nutzung dieser Ereignisbenachrichtigungen umfasst eine Reihe klar definierter Schritte, die sicherstellen, dass Ihre MinIO-Instanz als interaktiver, reaktionsfähiger Teil Ihres Anwendungsökosystems wichtige Ereignisdaten nicht nur erfasst, sondern auch effektiv kommuniziert.

Verstehen der Datenstruktur von MinIO-Ereignisbenachrichtigungen

Die S3-Ereignisbenachrichtigungen von MinIO umfassen eine detaillierte JSON-Datenstruktur , unerlässlich für ein umfassendes Verständnis und ein effektives Management von Ereignissen. Nachfolgend habe ich einige der in den Ereignisdaten gefundenen Werte aufgelistet:


  • Schlüssel : Die eindeutige Kennung des Objekts im Bucket.


  • eTag : Die Versionskennung des Objekts für Integrität und Versionskontrolle.


  • Größe : Die Größe des Objekts in Bytes, die seinen Maßstab angibt.


  • Sequenzer : Stellt sicher, dass die Ereignisse in der exakten Reihenfolge verarbeitet werden, in der sie aufgetreten sind.


  • Inhaltstyp : Der Medientyp des Objekts, der angibt, wie die Datei verarbeitet oder angezeigt werden soll.


  • Benutzermetadaten : Benutzerdefinierte Metadaten, die an das Objekt angehängt werden und zusätzlichen Kontext bereitstellen.


  • Bucket-Details :

    • ARN (Amazon-Ressourcenname) : Die eindeutige Kennung für den Bucket in AWS.

    • Name : Der Name des Buckets, in dem das Objekt gespeichert ist.

    • Eigentümeridentität : Informationen zum Besitzer des Buckets.


  • s3SchemaVersion : Gibt die Version des verwendeten S3-Ereignisbenachrichtigungsschemas an.


  • Konfigurations-ID : Kennung für die spezifische Benachrichtigungskonfiguration, die dieses Ereignis ausgelöst hat.


Diese Struktur ist besonders effektiv für Flask-Anwendungen , wodurch eine systematische Protokollierung, Analyse und Auswertung der Interaktionen mit dem MinIO-Bucket ermöglicht wird.

Einrichten von MinIO für Webhooks und ereignisgesteuerte Vorgänge

Nachdem Sie die oben beschriebene Datei docker-compose.yaml bereitgestellt haben, fahren Sie mit dem MinIO-Client mc , dem Befehlszeilenprogramm, fort. Bei dieser Einrichtung wird ein Alias in MinIO erstellt, der Endpunkt konfiguriert und Bucket-Benachrichtigungen festgelegt.


Wir werden in einem interaktiven Terminal für den „Minio“ -Container arbeiten, den wir durch Ausführen eines einzigen Befehls starten können:


docker exec -it minio /bin/sh


Der Grund für die Ausführung unserer mc-Befehle innerhalb dieser Shell besteht darin, dass mc im Docker- Minio/Minio- Image bereits installiert und einsatzbereit ist.


Sobald Sie sich im interaktiven Terminal des Containers befinden, umfasst der Prozess der Konfiguration von MinIO für Ereignisbenachrichtigungen mithilfe des MinIO-Clients (mc) die folgenden wichtigen Schritte:


  1. Einrichten eines MinIO-Alias : Der erste Schritt besteht darin, mithilfe des MinIO-Clients (mc) einen Alias für Ihren MinIO-Server zu erstellen. Dieser Alias ist eine Verknüpfung zu Ihrem MinIO-Server, sodass Sie problemlos weitere mc-Befehle ausführen können, ohne die Adresse und Zugangsdaten des Servers wiederholt angeben zu müssen. Dieser Schritt vereinfacht die Verwaltung Ihres MinIO-Servers über den Client.

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

  2. Hinzufügen des Webhook-Endpunkts zu MinIO : Konfigurieren Sie einen neuen Webhook-Serviceendpunkt in MinIO. Diese Einrichtung erfolgt entweder über Umgebungsvariablen oder Laufzeitkonfigurationseinstellungen, in denen Sie wichtige Parameter wie die Endpunkt-URL, ein optionales Authentifizierungstoken für die Sicherheit und Clientzertifikate für sichere Verbindungen definieren.

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


  3. Neustart der MinIO-Bereitstellung : Nachdem Sie die Einstellungen konfiguriert haben, starten Sie Ihre MinIO-Bereitstellung neu, um sicherzustellen, dass die Änderungen wirksam werden.

    mc admin service restart myminio

    Erwarten:

    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. Konfigurieren von Bucket-Benachrichtigungen : Im nächsten Schritt wird der Befehl mc event add verwendet. Mit diesem Befehl werden neue Bucket-Benachrichtigungsereignisse hinzugefügt, wobei der neu konfigurierte Webhook-Dienst als Ziel für diese Benachrichtigungen festgelegt wird.

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

    Erwarten:

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


  5. Bucket-abonnierte Ereignisse auflisten : Führen Sie diesen Befehl aus, um das myminio/mybucket zugewiesene Ereignis aufzulisten:

    minio mc event list myminio/mybucket

    Erwarten:

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


  6. Dem Bucket zugewiesene Ereignisse auflisten (in JSON) : Führen Sie diesen Befehl aus, um das myminio/mybucket zugewiesene Ereignis im JSON-Format aufzulisten:

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

    Erwarten:

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

Die Struktur der von Flask empfangenen Ereignisbenachrichtigungsdaten

Abhängig von den Diensten oder der Integration, die Sie erstellen, müssen Sie möglicherweise die Ereignisdaten aus Ihrer Flask-App identifizieren. Dazu ist ein gutes Verständnis der von Ihrem Ereignis bereitgestellten Daten erforderlich.


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


Wenn Sie diese Schritte befolgen, können Sie MinIO-Ereignisbenachrichtigungen effektiv nutzen und Datenworkflow-Prozesse erheblich automatisieren. Ausführlichere Anleitungen und Informationen finden Sie in der MinIO-Dokumentation unter Bucket-Benachrichtigungen Und Überwachen von Bucket- und Objektereignissen .


Wenn Sie daran interessiert sind, MinIO mit PostgreSQL einzurichten, schauen Sie sich an Optimieren von Datenereignissen mit MinIO und PostgreSQL , wo ich die umfangreiche Konfiguration und Verwaltung von Datenereignissen durch MinIO behandelt habe. Diese Konfigurationen reichen von der Verwendung der MinIO-Konsole für eine benutzerfreundliche grafische Benutzeroberfläche bis zum Befehlszeilentool mc für eine detailliertere, skriptfähige Einrichtung. Der Blogbeitrag rundet Ihr Verständnis des Themas weiter ab, indem er die Bedeutung der ordnungsgemäßen Konfiguration von PostgreSQL in der MinIO-Benutzeroberfläche und die Bedeutung des Neustarts des MinIO-Servers betont, damit Änderungen wirksam werden.


Entwickeln eines Webhooks mit Flask zum Empfangen von Ereignisbenachrichtigungen

Nach der Bereitstellung unserer Umgebung konzentrieren wir uns nun auf die Integration von MinIO mit Python, einem wichtigen Aspekt unseres Datenhandhabungs- und -verarbeitungssystems. Diese Integration ist entscheidend für die Schaffung eines zusammenhängenden Ökosystems, in dem MinIO nahtlos mit Flask zusammenarbeiten kann.

Importieren der erforderlichen Pakete

In unserem Demonstrationscode wählen wir Python-Importe sorgfältig aus, um sicherzustellen, dass die Funktionalität der Anwendung ihrem beabsichtigten Zweck entspricht. Das flask Paket erstellt die Webserver-Infrastruktur und definiert Endpunkte zur Verarbeitung eingehender HTTP-Anfragen. Anschließend kann die Anwendung so codiert werden, dass sie die MinIO-Ereignisbenachrichtigungen auf jede gewünschte Weise verarbeitet.


 from flask import Flask, jsonify, request


Zusammen bilden diese Importe die Grundlage der Anwendung und ermöglichen ihr, MinIO-Ereignisbenachrichtigungen zu empfangen und zu verarbeiten.

Flask-Anwendung und Ereignisbehandlungsendpunkt in Python

Eine Flask-Anwendung wird instantiiert und ein Endpunkt wird eingerichtet, um POST-Anfragen an der Route /minio-event zu verarbeiten. Flask ist ein Mikro-Webframework in Python, das sich ideal zum Einrichten von Webanwendungen und API-Endpunkten eignet.


 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


Die Funktion handle_minio_event in der Flask-App verarbeitet POST-Anfragen, die MinIO-Ereignisdaten enthalten, und gibt die von der MinIO-Ereignisbenachrichtigung empfangenen event_data zurück.


Dieser Ansatz erleichtert die Echtzeitverarbeitung und Reaktion auf Speicherereignisse und ermöglicht eine dynamische Interaktion zwischen dem MinIO-Speichersystem und der Flask-Anwendung.

Integrieren von Diensten mit MinIO-Bucket-Ereignissen über Python-Skripting

In diesem Blogbeitrag werden MinIO und Python in einer Docker-Umgebung verwendet, um die Leistungsfähigkeit und Flexibilität von MinIO-Bucket-Ereignisbenachrichtigungen zu demonstrieren, und es wird ein strategischer Ansatz zum Erstellen skalierbarer, effizienter ereignisgesteuerter Anwendungen vorgestellt.


Die Verwendung von Docker mit seiner Containerisierungstechnologie zeichnet sich dadurch aus, dass Komponenten wie MinIO und Flask unabhängig und dennoch zusammenhängend arbeiten können. Natürlich minimiert dieses containerisierte Cloud-native Setup Konflikte und Abhängigkeiten und unterstreicht die Bedeutung von Docker und Docker-Containern in der modernen Softwarearchitektur.


Als Schlussfolgerung unserer Untersuchung der MinIO-Webhook-Ereignisbenachrichtigungen bin ich davon überzeugt, dass die Synergie einer dynamischen Programmiersprache und der enormen Stärke von MinIO ein beispielloses Toolkit darstellt. Diese Kombination ebnet den Weg für grenzenlose Möglichkeiten in der Anwendungsentwicklung. Sie ermöglicht es uns, nicht nur zu innovieren und zu rationalisieren, sondern auch unsere Fähigkeiten mit bemerkenswerter Effizienz und Anpassungsfähigkeit zu erweitern.


Dieser Leitfaden hat die Einfachheit und Wirksamkeit der API-Entwicklung mit Python demonstriert und damit eine solide Grundlage für kontinuierliche Innovationen und die Erfüllung sich ständig ändernder Anforderungen gelegt. Er unterstreicht die Anpassungsfähigkeit, die für die kontinuierliche Weiterentwicklung sowohl des Datenmanagements als auch der Entwicklung der Anwendungsentwicklung unerlässlich ist. Dieser Ansatz ist nicht nur eine Methode; er ist ein Weg, unsere technologischen Bemühungen zukunftssicher zu machen.