paint-brush
MinIO と Python を使用してスケーラブルで効率的なイベント駆動型アプリケーションを作成する@minio
3,803 測定値
3,803 測定値

MinIO と Python を使用してスケーラブルで効率的なイベント駆動型アプリケーションを作成する

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

長すぎる; 読むには

MinIO のイベント通知は、最初は面白くないかもしれませんが、その機能を活用すると、ストレージ バケット内のダイナミクスが明らかになります。

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - MinIO と Python を使用してスケーラブルで効率的なイベント駆動型アプリケーションを作成する
MinIO HackerNoon profile picture


MinIO のイベント通知は、最初は面白くないかもしれませんが、その力を活用すると、ストレージ バケット内のダイナミクスが明らかになります。イベント通知は、本格的な効率的なオブジェクト ストレージ システムの重要なコンポーネントです。Webhook は、 MinIO と統合するための私のお気に入りのツールです。Webhook は、イベントの世界におけるスイス アーミー ナイフのようなもので、さまざまな課題に対する普遍的なソリューションを提供します。


MinIOのユーザーフレンドリーなUIはシームレスなサービスを提供します統合ですが、このガイドではさらに深く掘り下げていきます。クライアントの資格情報を使用して Python でサービスをゼロから構築し、MinIO 統合の基本を説明します。


この調査では、合理化された効率的なオーケストレーションを提供する方法である docker-compose を使用したデプロイに焦点を当てます。このアプローチでは、MinIO と Flask の統合環境を設定し、シームレスにやり取りできるようにします。MinIO サービスを適切な資格情報と構成と統合することで、MinIO バケット イベントの管理と応答の実用的なアプリケーションを効果的に示す体系的なワークフローを作成することを目指します。


クライアント構成を設定し、応答データの構造を定義したら、いつものように、本当の楽しみが始まります。このデモでは、MinIOクライアントをFlaskアプリケーションに接続して、イベント通知データをさらに処理する方法のいくつかの重要な側面に焦点を当てます。MinIOを使用して独自のイベント駆動型システムを開発することに抵抗を感じないように、私たちが提供しているサービスをご利用ください。 ブログアセット/フラスコウェブフックイベント通知リソースはMinIO の GitHub ページ


データ処理が芸術であり科学でもある世界に飛び込む準備をしましょう。MinIO によって、データ処理がさらにシンプルになります。これは、アプリがデータを処理する方法を革新、創造、そして革命させるチャンスです。

MinIOと統合サービス

MinIOの統合Kubernetes エコシステムさまざまなクラウド テクノロジーへの適応性を示す好例です。Webhook は極めて重要であり、さまざまなクラウド プラットフォーム間でデータを管理する場合でも、ローカルのホーム ラボ セットアップの場合でも、開発者がカスタム統合を作成する柔軟性を提供します。


このガイドは理論的な概念にとどまらず、統合を構築するための実用的で実行可能なコード スニペットを提供します。これは、MinIO イベント通知を活用して創造性の無限の可能性を探求するための招待状です。

Docker を使用した Python アプリケーションの基礎を築く

私たちの取り組みの最初の段階は、Docker のコンテナ化の力を活用して、堅牢な Python アプリケーション環境を構築することに専念しています。私たちのアプローチは、シンプルさと有効性から選ばれた方法である Docker-compose を使用したデプロイを中心にしています。この選択は、幅広い開発者のニーズに応えるように設計されており、高いレベルの機能性を確保しながら、使いやすさと迅速なデプロイを優先しています。


Docker-compose を利用して、ユーザーフレンドリーな構成主導のセットアップを作成します。この環境は、プロジェクトの機能の深さを犠牲にすることなく、迅速な展開を求める人に最適です。プロジェクトの特定の要件に応じて、高度な Webhook 機能を統合し、MinIO 設定を微調整するための簡単な方法を提供します。


この環境を設定するための各ステップは非常に重要です。サービスを立ち上げて実行することだけが重要なのではなく、コンポーネントを理解して活用して包括的なシステムを作成することが重要なのです。独自のシステムを開発することは、イノベーションを刺激し、全体的なデータ管理戦略を強化し、最終的に生データを実用的な洞察に満ちた情報に変えるきっかけとなる可能性があります。

MinIOと統合サービスの導入

Docker-Compose でデプロイ: Flask アプリと MinIO

まず、Python アプリケーションとその環境を設定します。これには、docker compose を使用した MinIO のデプロイと、統合するサービスが含まれます。Flask アプリケーションを使用して MinIO を設定するには、 gitコマンドを使用して、 minio/blog-assetsリポジトリをローカル環境にクローンします。


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


これにより、 minio/ブログアセットGitHubからリポジトリを取得するには、 /flask-webhook-イベント通知/ディレクトリに含まれるdocker-compose.yamlファイルを開き、MinIO および Flask サービスを開始します。

ディレクトリ構造

この docker-compose 構造は、2 つのサービスとそれぞれの構成変数の概要を示しています。視覚化のために、必要なディレクトリ構造のツリー ビューをここに示します。


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

MinIO で Webhook を設定する

MinIO での Webhook の構成は、ユーザー インターフェイスの使用、 mc (MinIO クライアント ユーティリティ) の使用、さまざまなプログラミング言語によるスクリプトの作成など、さまざまな方法で実行できます。


MinIOは、 イベント通知のためのさまざまな外部サービスAMQP (RabbitMQ)MQTTNATSNSQElasticsearchKafkaMySQLPostgreSQLRedisWebhook サービスなどが含まれます。


これらを活用するためにMinIOを設定するイベント通知明確に定義された一連の手順により、MinIO インスタンスは重要なイベント データをキャプチャするだけでなく、アプリケーション エコシステムのインタラクティブで応答性の高い部分として効果的に伝達できるようになります。

MinIO イベント通知のデータ構造を理解する

MinIOからのS3イベント通知には、 詳細なJSONデータ構造イベントを包括的に理解し、効果的に管理するために不可欠です。以下に、イベント データ内から見つかった値の一部をリストします。


  • : バケット内のオブジェクトの一意の識別子。


  • 電子タグ: 整合性とバージョン管理のためのオブジェクトのバージョン識別子。


  • サイズ: オブジェクトのサイズ(バイト単位)。スケールを示します。


  • シーケンサー: イベントが発生した順序どおりに処理されるようにします。


  • コンテンツタイプ: オブジェクトのメディア タイプ。ファイルの処理方法または表示方法を指定します。


  • ユーザーメタデータ: オブジェクトに添付され、追加のコンテキストを提供するユーザー定義のメタデータ。


  • バケットの詳細:

    • ARN (Amazon リソース名) : AWS 内のバケットの一意の識別子。

    • 名前: オブジェクトが保存されるバケットの名前。

    • 所有者ID : バケットの所有者に関する情報。


  • s3スキーマバージョン: 使用される S3 イベント通知スキーマのバージョンを示します。


  • 構成ID : このイベントをトリガーした特定の通知構成の識別子。


この構造は特にフラスコアプリケーションMinIO バケットとのやり取りの体系的なログ記録、解析、分析が可能になります。

Webhook とイベント駆動型操作のための MinIO の設定

上記のdocker-compose.yamlをデプロイした後、MinIO クライアントのmcコマンドライン ユーティリティを使用して続行します。このセットアップには、MinIO でのエイリアスの作成、エンドポイントの構成、バケット通知の設定が含まれます。


私たちは、1 つのコマンドを実行するだけで生成できる「minio」コンテナの対話型ターミナル内で作業します。


docker exec -it minio /bin/sh


このシェル内から mc コマンドを実行する理由は、Docker minio/minioイメージにはすでにmcがインストールされており、すぐに使用できる状態になっているためです。


コンテナの対話型ターミナルに入ったら、MinIO クライアント (mc) を使用してイベント通知用に MinIO を構成するプロセスには、次の主要な手順が含まれます。


  1. MinIO エイリアスの設定: 最初のステップでは、MinIO クライアント (mc) を使用して MinIO サーバーのエイリアスを作成します。このエイリアスは MinIO サーバーへのショートカットであり、サーバーのアドレスとアクセス資格情報を繰り返し指定しなくても、さらに mc コマンドを簡単に実行できます。このステップにより、クライアントを介した MinIO サーバーの管理が簡素化されます。

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

  2. MinIO に Webhook エンドポイントを追加する: MinIO で新しい Webhook サービス エンドポイントを構成します。このセットアップは、環境変数またはランタイム構成設定を使用して行われます。ここでは、エンドポイント URL、セキュリティ用のオプションの認証トークン、安全な接続用のクライアント証明書などの重要なパラメータを定義します。

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


  3. MinIO デプロイメントの再起動: 設定が完了したら、変更を有効にするために MinIO デプロイメントを再起動します。

    mc admin service restart myminio

    期待する:

    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. バケット通知の設定: 次の手順では、mc event add コマンドを使用します。このコマンドは、新しいバケット通知イベントを追加し、新しく構成された Webhook サービスをこれらの通知のターゲットとして設定するために使用されます。

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

    期待する:

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


  5. バケットに登録されたイベントの一覧: このコマンドを実行して、myminio/mybucket に割り当てられたイベントを一覧表示します。

    minio mc event list myminio/mybucket

    期待する:

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


  6. バケットに割り当てられたイベントの一覧 (JSON 形式) : このコマンドを実行すると、myminio/mybucket に割り当てられたイベントが JSON 形式で一覧表示されます。

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

    期待する:

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

Flaskが受信するイベント通知データの構造

構築しているサービスや統合によっては、Flask アプリから event_data を識別する必要がある場合があります。そのためには、イベントが提供するデータについて十分に理解している必要があります。


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


これらの手順に従うことで、MinIOイベント通知を効果的に活用し、データワークフロープロセスを大幅に自動化できます。詳細なガイダンスと情報については、MinIOのドキュメントを参照してください。 バケット通知そしてバケットとオブジェクトイベントの監視


PostgreSQLでMinIOを設定することに興味がある場合は、以下をご覧ください。 MinIO と PostgreSQL によるデータ イベントの効率化では、MinIO の広範な構成とデータ イベントの管理について説明しました。これらの構成は、ユーザー フレンドリなグラフィカル インターフェイス用のMinIO コンソールの使用から、より詳細でスクリプト可能なセットアップ用のmcコマンドライン ツールの使用まで多岐にわたります。このブログ投稿では、MinIO UI で PostgreSQL を適切に構成することの重要性と、変更を有効にするために MinIO サーバーを再起動することの重要性を強調することで、このトピックの理解をさらに深めています。


Flask でイベント通知を受信する Webhook を開発する

環境の展開に続いて、私たちは現在、データ処理システムの重要な側面である MinIO と Python の統合に焦点を移しています。この統合は、MinIO が Flask とシームレスに連携できる、まとまりのあるエコシステムを作成する上で極めて重要です。

必要なパッケージのインポート

flaskコードでは、アプリケーションの機能が意図した目的に合致するように、Python のインポートを慎重に選択しています。Flask パッケージは、Web サーバー インフラストラクチャを作成し、着信 HTTP 要求を処理するエンドポイントを定義します。その後、アプリケーションをコーディングして、MinIO イベント通知を任意の方法で処理できます。


 from flask import Flask, jsonify, request


これらのインポートはまとめてアプリケーションの基盤を形成し、MinIO イベント通知を受信して処理できるようにします。

Python での Flask アプリケーションとイベント処理エンドポイント

Flask アプリケーションがインスタンス化され、ルート/minio-eventで POST リクエストを処理するためのエンドポイントが設定されます。Flask は Python のマイクロ Web フレームワークであり、Web アプリケーションと 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


Flask アプリのhandle_minio_event関数は、MinIO イベント データを含む POST リクエストを処理し、MinIO イベント通知から受信したevent_dataを返します。


このアプローチにより、リアルタイムの処理とストレージ イベントへの応答が容易になり、MinIO ストレージ システムと Flask アプリケーション間の動的な相互作用が可能になります。

Python スクリプトによる MinIO バケット イベントとサービスの統合

このブログ投稿では、Docker 環境で MinIO と Python を使用して、MinIO バケット イベント通知のパワーと柔軟性を示し、スケーラブルで効率的なイベント駆動型アプリケーションを作成するための戦略的なアプローチを示します。


コンテナ化テクノロジーを備えた Docker の使用は、MinIO や Flask などのコンポーネントが独立して連携して動作できるようにする点で際立っています。もちろん、このコンテナ化されたクラウドネイティブのセットアップにより、競合と依存関係が最小限に抑えられ、最新のソフトウェア アーキテクチャにおける Docker と Docker コンテナの重要性が強調されます。


MinIO Webhook イベント通知の調査を終えて、動的プログラミング言語と MinIO の強力な強みの相乗効果により、比類のないツールキットが実現すると確信しました。この組み合わせにより、アプリケーション開発に無限の機会が生まれます。これにより、革新と合理化だけでなく、優れた効率性と適応性で機能を拡張できるようになります。


このガイドでは、Python を使用した API 開発のシンプルさと有効性を実証し、継続的なイノベーションと常に変化する需要への対応のための強固な基盤を築きました。また、データ管理とアプリケーション開発の進化の両方において継続的な進歩に不可欠な適応性を強調しています。このアプローチは単なる方法論ではなく、私たちの技術的取り組みを将来にわたって保証するための道筋です。