Minio 的事件通知乍一看可能并不令人兴奋,但一旦您掌握了它们的力量,它们就可以照亮您桶内发生的事情。 事件通知是全面高效的对象存储系统的关键组成部分。 Webhook 是我个人最喜欢的与 minio 集成的工具。 它们就像事件世界中的瑞士军刀,为各种挑战提供通用解决方案。 Minio 的用户友好型 UI 提供了无缝的服务集成,但在本指南中,我们将更深入地介绍**。 我们将从头开始在 Python 中构建服务,并使用其客户端凭据来引导您完成 minio 集成的来龙去脉。 在我们的探索中,我们将重点部署 docker-compose,这是一种提供简化和高效编排的方法。 这种方法将涉及为 Minio 和 Flask 建立一个连贯的环境,以便它们可以无缝交互。 通过将 minio 服务与适当的凭据和配置集成,我们的目标是创建一个系统的工作流,有效地展示管理和响应 minio 存储桶事件的特定应用程序。 像往常一样,一旦我们设置了客户端配置并定义了响应数据的结构,真正的乐趣就开始了。 此演示将重点介绍如何将 minio 客户端连接到 FLASK 应用程序,在该应用程序中可以进一步处理事件通知数据。 我们希望您能够自如地开发自己的事件驱动系统,因此请利用我们在 Minio 的 github 页面上提供的服务,该页面位于 blog-assets flask-webhook-event-notifications。 准备好潜入一个数据处理既是艺术又是科学的世界,这一切都变得简单,这要归功于 minio。 这是一个创新、创造和彻底改变应用程序处理数据的方式的机会。
Minio与Kubernetes生态系统的集成证明了其在各种云技术中的适应性。 Webhook 至关重要,它使开发人员能够灵活地构建自定义集成,无论是跨不同云平台管理数据还是设置本地家庭实验室。 本指南不仅提供了理论概念,还提供了构建集成的实际片段。 这是一个邀请,让你在利用minio事件通知时探索你无限的创造潜力。
我们旅程的初始阶段致力于利用 Docker 的容器化功能来构建强大的 Python 应用程序环境。 我们的方法侧重于使用 docker-compose 进行部署,选择 docker-compose 是因为它的简单性和有效性。 此选择旨在满足各种开发人员的需求,优先考虑易用性和快速部署,同时确保高水平的功能。 使用 docker-compose,我们创建了一个用户友好的、基于配置的设置。 这种环境非常适合那些希望在不牺牲项目能力的情况下进行深度快速部署的人。 它提供了集成高级 webhook 功能和微调 Minio 设置的直接途径,以满足您项目的特定需求。 设置此环境的每一步都至关重要。 这不仅仅是让服务运行,而是了解和利用各个组件来创建一个全面的系统。 开发您自己的系统可以成为点燃您的创新的火花,增强您的整体数据管理策略,并最终将您的原始数据转化为可操作的、有洞察力的信息。
我们将从设置 Python 应用程序及其环境开始。 这包括使用 docker-compose 部署 minio 和服务进行集成。 为了使用 flask 应用程序设置 minio,我们将使用 git 命令将 minio blog-assets 存储库克隆到您的本地环境:
git clone
cd flask-webhook-event-notifications
docker-compose up
这将从 github 克隆 minio blog-assets 存储库,导航以包含 docker-composeyaml 文件,然后启动 minio 和 flask 服务。
此 docker-compose 结构提供了这两个服务及其各自的配置变量的概述。 为了便于可视化,我在这里提供了所需目录结构的树视图:
/flask-webhook-event-notifications
dockerfile
app─main.py
docker-compose.yaml
在 Minio 中配置 Webhook 可以通过多种方式完成,包括使用用户界面、使用(Minio 客户端实用程序)或使用 MC 的各种编程语言编写脚本。
Minio 支持多种外部事件通知服务,包括:AMQP(RabbitMQ)、MQTT、NATS、NSQ、Elasticsearch、Kafka、MySQL、PostgreSQL、Redis 和 Webhook 服务。
设置 Minio 以利用这些事件通知涉及一系列明确定义的步骤,以确保您的 Minio 实例不仅捕获而且有效地传达重要的事件数据,作为应用程序生态系统的交互式响应式部分。
来自 Minio 的 S3 事件通知包括详细的 JSON 数据结构,这对于全面了解和有效管理事件至关重要。 下面我列出了我从事件数据中找到的一些值:
键:存储桶中对象的唯一标识符。
etag:用于完整性和版本控制的对象版本标识符。
大小:对象的大小(以字节为单位),表示其比例。
sequencer:确保按照事件发生的确切顺序处理事件。
contentType:对象的类型,指定文件的处理或显示方式。
usermetadata:附加到对象以提供其他上下文的用户定义元数据。
存储桶详细信息。
ARN(Amazon 资源名称):AWS 中存储桶的唯一标识符。
名称:存储对象的存储桶的名称。
ownerIdentity:存储桶拥有者。
S3Schem**ersion:指示使用的 S3 事件通知架构的版本。
ConfigurationId:触发此事件的特定通知配置的标识符。
这种结构对于 Flask 应用程序特别有效,因为 Flask 应用程序会系统地记录、解析和分析与 minio 存储桶的交互。
部署 docker-compose。YAML,进入 minio 客户端,即 MC 命令行实用程序。 此设置涉及在 Minio 中创建别名、配置终端节点和设置存储桶通知。
我们将在“minio”容器的交互式终端中工作,我们可以通过运行单个命令来生成它:
docker exec -it minio /bin/sh
从此 shell 运行 MC 命令的原因是 docker minio minio 映像已安装 MC 并准备就绪。
进入容器的交互式终端后,使用 minio 客户端 (MC) 为 minio 配置事件通知的过程涉及以下关键步骤:
设置 minio 别名:第一步涉及使用 minio 客户端 (MC) 为 minio 服务器创建别名。 此别名是 minio 服务器的快捷方式,允许您轻松执行进一步的 mc 命令,而无需重复指定服务器的地址和访问凭据。 此步骤简化了通过客户端对 minio 服务器的管理。
向 Minio 添加 Webhook 端点:在 Minio 中配置新的 Webhook 服务端点。 此设置是使用环境变量或运行时配置设置完成的,您可以在其中定义重要参数,例如终结点 URL、用于安全性的可选身份验证令牌以及用于安全连接的客户端证书。
重启 minio 部署:配置设置后,重启 minio 部署,确保更改生效。
mc admin service restart myminio
配置存储桶通知:下一步涉及使用 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
列出存储桶订阅事件:执行以下命令,列出分配给 myminio mybucket 的事件: minio mc 事件列表 myminio mybucket
期望: arn:minio:sqs::1:webhook s3:objectcreated:,s3:objectaccessed:,s3:objectremoved:* 筛选器:
列出分配给存储桶的事件(json):执行以下命令,以json格式列出分配给myminio mybucket的事件: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 应用中识别事件数据,这需要充分了解事件提供的数据。
s3": ,"object": ,"configurationid": "config","s3schem**ersion": "1.0","source": ,"awsregion": "","eventname": "s3:objectcreated:put","eventtime": "2024-01-12t17:58:12.569z","eventsource": "minio:s3","eventversion": "2.0","useridentity": ,"responseelements": ,"requestparameters":
通过执行这些步骤,您可以有效地利用 minio 事件通知,并显著自动化您的数据工作流流程。 有关更详细的指导和信息,请参阅有关存储桶通知以及监控存储桶和对象事件的 minio 文档。
如果您有兴趣使用 PostgreSQL 设置 Minio,请查看使用 MiniO 和 PostgreSQL 简化数据事件,其中描述了 Minio 对数据事件的广泛配置和管理。 这些配置包括使用 minio 控制台提供用户友好的图形界面,以及使用 MC 命令行工具进行更详细、可编写脚本的设置。 这篇博文进一步完善了您对本主题的理解,重点介绍了在 Minio UI 中正确配置 PostgreSQL 的重要性,以及重新启动 Minio 服务器以使更改生效的重要性。在部署了我们的环境之后,我们现在将重点转移到Minio与Python的集成上,这是我们数据处理和处理系统的一个关键方面。 这种集成对于创建一个有凝聚力的生态系统至关重要,Minio 可以在其中与 Flask 无缝协作。
在我们的演示中,我们仔细选择了 python 导入,以确保应用程序的功能符合其预期目的。 Flask 包创建 Web 服务器基础结构,用于定义终结点以处理传入的 HTTP 请求。 然后,可以对应用程序进行编码,以以您想要的任何方式处理 minio 事件通知。
from flask import flask, jsonify, request
这些导入共同构成了应用程序的基础,使其能够接收和处理 minio 事件通知。
实例化 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: ")
return jsonify(event_data), 200
Flask 应用中的 Handle Minio 事件函数处理包含 Minio 事件数据的 POST 请求,并返回从 Minio 事件通知收到的事件数据请求。
这种方法有助于实时处理和响应存储事件,从而实现 Minio 存储系统和 Flask 应用程序之间的动态交互。
这篇博文在 Docker 环境中使用 Minio 和 Python 来演示 Minio 存储桶事件通知的强大功能和灵活性,并演示了创建可扩展、高效、事件驱动型应用程序的战略方法。
使用 Docker 及其容器化技术使 minio 和 flask 等组件能够独立但有凝聚力地工作。 当然,这种容器化的云原生设置最大限度地减少了冲突和依赖关系,突出了 docker 和 docker 容器在现代软件架构中的重要性。
在我们对 minio webhook 事件通知的探索结束时,我相信动态编程语言的协同作用和 minio 的强大优势提供了一个无与伦比的工具包。 这种配对为应用程序开发的无限机会铺平了道路。 它不仅使我们能够进行创新和简化,而且还使我们能够以卓越的效率和适应性扩展我们的能力。