事件驱动架构:使用Flask实现MinIO事件通知Webhooks

news2024/11/23 21:27:52

MinIO的事件通知可能一开始看起来并不激动人心,但一旦掌握了它们的力量,它们就能照亮您存储桶内的动态。事件通知是一个全面、高效的对象存储系统中的关键组件。Webhooks是我个人最喜欢的工具,用于与MinIO集成。它们在事件的世界中就像一把瑞士军刀,为各种挑战提供了一种通用的解决方案。
MinIO的用户友好型UI提供了无缝的服务集成,但在这本指南中,我们将深入探讨更多内容。我们将从零开始用Python构建服务,并使用它们的客户端凭据,带您了解MinIO集成的细节。
在我们的探索中,我们将重点部署使用docker-compose,这是一种提供简化且高效编配的方法。这种方法将涉及为MinIO和Flask设置一个连贯的环境,使它们能够无缝互动。通过使用适当的凭据和配置集成MinIO服务,我们旨在创建一个系统化的 workflow,有效地展示管理和响应MinIO存储桶事件的具体应用。
一旦我们设置了客户端配置并定义了响应数据的结构,就像往常一样,真正的乐趣就开始了。这个演示将突出展示如何将您的MinIO客户端连接到Flask应用程序中,在那里事件通知数据可以进一步处理。我们希望您在开发自己的事件驱动系统时感到舒适,所以请利用我们在MinIO的GitHub页面上提供的服务,该资源位于blog-assets/flask-webhook-event-notifications。
准备好深入一个数据处理既是艺术又是科学的世界,所有这些都因MinIO而变得简单。这是一个创新、创建和革命化您的应用程序与数据工作的方式的机会。

MinIO和集成服务

MinIO集成到Kubernetes生态系统中,展示了它跨越各种云技术的适应性。Webhooks至关重要,为开发者提供了构建自定义集成的灵活性,无论是管理跨不同云平台的数据,还是为本地家庭实验室设置。
这本指南不仅提供了理论概念,还提供了实用的代码片段,以构建您的集成。这是一个邀请,探索您在利用MinIO事件通知方面的无限创意潜力。

为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

这将从 GitHub 克隆 minio/blog-assets 存储库,导航到包含 docker-compose.yaml 文件的 /flask-webhook-event-notifications/ 目录,然后启动 MinIO 和 Flask 服务。

目录结构

此 docker-compose 结构概述了两个服务及其各自的配置变量。出于可视化目的,我在这里提供了所需目录结构的树视图:

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

在 MinIO 中设置 Webhook

在 MinIO 中配置 Webhook 可以通过各种方法完成,包括使用用户界面、使用(MinIO 客户端实用程序)或使用 mc 各种编程语言编写脚本。

MinIO 支持多种外部事件通知服务,包括:AMQP(RabbitMQ)、MQTT、NATS、NSQ、Elasticsearch、Kafka、MySQL、PostgreSQL、Redis 和 webhook 服务。

设置 MinIO 以利用这些事件通知涉及一系列明确定义的步骤,确保您的 MinIO 实例不仅捕获而且有效地传达重要的事件数据,作为应用程序生态系统的交互式响应式部分。

了解 MinIO 事件通知的数据结构

来自 MinIO 的 S3 事件通知包括详细的 JSON 数据结构,这对于全面了解和有效管理事件至关重要。下面我列出了从事件数据中找到的一些值:

  • 键:存储桶中对象的唯一标识符。

  • eTag:用于完整性和版本控制的对象版本标识符。

  • 大小:对象的大小(以字节为单位),表示其比例。

  • Sequencer:确保按照事件发生的确切顺序处理事件。

  • ContentType:对象的媒体类型,指定如何处理或显示文件。

  • UserMetadata:附加到对象的用户定义元数据,提供额外的上下文。

  • 存储桶详细信息

  1. ARN (Amazon 资源名称):AWS 中存储桶的唯一标识符。

  2. 名称:存储对象的存储桶的名称。

  3. OwnerIdentity:存储桶拥有者的信息。

  • s3SchemaVersion:指示使用的 S3 事件通知架构的版本。

  • ConfigurationId:触发此事件的特定通知配置的标识符。

这种结构对 Flask 应用程序特别有效,能够系统地记录、解析和分析与 MinIO 存储桶的交互。

为 Webhook 和事件驱动操作设置 MinIO

部署上述 docker-compose.yaml 后,继续使用 MinIO 客户端、 mc 命令行实用程序。此设置涉及在 MinIO 中创建别名、配置终端节点和设置存储桶通知。

我们将在“minio”容器的交互式终端内工作,我们可以通过运行单个命令来生成该容器:

docker exec -it minio /bin/sh

从此 shell 中运行 mc 命令的原因是因为 Docker minio/minio 映像已经 mc 安装并准备就绪。

进入容器的交互式终端后,使用 MinIO 客户端 (mc) 为事件通知配置 MinIO 的过程涉及以下关键步骤:

  1. 设置 MinIO 别名:第一步涉及使用 MinIO 客户端 (mc) 为 MinIO 服务器创建别名。此别名是 MinIO 服务器的快捷方式,允许您轻松执行进一步的 mc 命令,而无需重复指定服务器的地址和访问凭据。此步骤简化了通过客户端对 MinIO 服务器的管理。

  2. 将 Webhook 端点添加到 MinIO:在 MinIO 中配置新的 Webhook 服务端点。此设置是使用环境变量或运行时配置设置完成的,您可以在其中定义重要参数,例如终结点 URL、用于安全性的可选身份验证令牌以及用于安全连接的客户端证书。

  3. 重新启动 MinIO 部署:配置设置后,重新启动 MinIO 部署以确保更改生效。

mc admin service restart myminio
  1. 配置存储桶通知:下一步涉及使用 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

  1. 列出存储桶订阅事件:运行以下命令以列出分配给 myminio/mybucket 的事件:

minio mc event list myminio/mybucket

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

  1. 列出存储桶分配的事件(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 接收的事件通知数据的结构

根据您正在构建的服务或集成,您可能需要从 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 无缝协作。

导入必要的软件包

在我们的演示代码中,我们仔细选择 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 的强大优势提供了一个无与伦比的工具包。这种配对为应用程序开发的无限机会铺平了道路。它不仅使我们能够创新和精简,而且能够以卓越的效率和适应性扩展我们的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1424955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三轴 MEMS 加速度传感器

一、功能概述 1.1 设备简介 本模块为了对电机、风机、水泵等旋转设备进行预测性运维而开发,只需一 个模块,就可以采集电机的 3 路振动加速度信号(XYZ 轴)和一路温度信号, 防护等级 IP67 ,能够适应恶劣的工…

aspose-words基础功能演示

我们在Aspose.Words中使用术语“渲染”来描述将文档转换为文件格式或分页或具有页面概念的介质的过程。我们正在讨论将文档呈现为页面。下图显示了 Aspose.Words 中的渲染情况。 Aspose.Words 的渲染功能使您能够执行以下操作: 将文档或选定页面转换为 PDF、XPS、H…

C++ 单一附合导线平差程序

一、以下图附合导线为例,图形如下: 二、第一步,读取测量数据,读取界面设计如下: 读取数据文本文件格式如下: (1)已知点坐标数据格式: (2)角度观测…

中仕公考:公务员和事业单位哪个更难?

公务员有稳定的职位和福利待遇,一直是众多求职者的选择,事业单位招聘也吸引着大量求职者,许多人都在纠结于公务员和事业单位考试应该怎么选择。 先来看看公务员考试,公务员考试主要包括国家公务员考试和省级公务员考试。国家公务…

vue3动态循环引入本地静态图片资源

解决方法一 根据官网的提示,我找到了最简单的方法,就是在将asset 前面加上src。 解决方法二 关于第二个方法,官网说:“实际上,Vite 并不需要在开发阶段处理这些代码!在生产构建时,Vite 才会进行…

Git命令窗口:创建一个.bashrc文件,别名实现git log (代替冗余的指令)查询提交修改日志功能

在我们的用户下创建一个.bashrc文件,然后添加如下代码。即可实现我们命令窗口由于每次想要看到好的效果而输入几条指令的问题。 这里我们就只需要使用 git-log 代替我们的git log。这样在命令窗口看到的效果就清晰明了。

在Android Studio中配置OpenCV

在Android Studio中配置OpenCV 1 下载OpenCV2 导入OpenCV模块3 修改配置4 增加依赖5 拷贝libopencv_java.so6 Activity中加入代码1 下载OpenCV 下载OpenCV的Android包并解压。 2 导入OpenCV模块 在Android应用中,导入OpenCV模块。 导入目录时选择Opencv Android中的sdk目…

铁轨语义分割(Unet结合resnet系列)

数据介绍 一类是图片,一类是图像标签。 引入库,处理数据 import torch.nn as nn import torch import torch.nn.functional as F import os from PIL import Image import torch from torch.utils.data import Dataset import torchvision.transfor…

分布式事务(二)—— CAP和Base理论

系列目录: 《分布式事务(一)—— 事务的基本概念》 一、CAP理论 cap理论是分布式系统的理论基石 1、Consistency[一致性] 即操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致…

分享个前端工具-取色调色工具

这里虽然贴了两个,但推荐 Pipette. PipetteWin22.10.22.zip: https://download.csdn.net/download/rainyspring4540/88799632 图标: 界面: ColorPix https://download.csdn.net/download/rainyspring4540/88799642 图标: 界面…

在Windows11的WSL上运行Llama2-7b-chat 后记

往期的Llama2-7b-chat中我们试用了官方的demo,但是那个demo只能在代码中传入固定的对话,我稍微修改了一下,使其能在命令行中不间断对话(不具备记忆功能) 代码 import os import torch os.environ[PL_TORCH_DISTRIBUT…

基于 LLM+LlamaIndex+NebulaGraph,构建大模型知识图谱的检索(RAG)方法

最近,围绕着利用 LLM(Language Model)和知识图谱(KG,Knowledge Graphs)构建RAG(Retrieval Augmented Generation)流程引起了很多关注。 在本文中,让我们通过利用 LlamaI…

Linux部署DataEase数据分析工具并结合内网穿透实现任意设备远程查看数据

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

DolphinScheduler管理数仓任务规范

目录 一、DolphinScheduler调度数仓任务现状分析 2.1 一个任务流构建数仓所有的逻辑节点 2.2 每个逻辑节点构建一个任务流 二、数仓任务管理调度需求分析 三、DolphinScheduler数仓开发任务管理规范 四、结语 前言:大数据领域对多种任务都有调度需求&#xff…

modbus协议和示例

协议 主机读写 从站地址(8bit)功能码 (8bit)起始地址(16bit)数量(16bit)CRC(16bit) 从机对主机读取的回复 从站地址(8bit)功能码 …

并网逆变器学习笔记8---平衡桥(独立中线模块)控制

参考文献:《带独立中线模块的三相四线制逆变器中线电压脉动抑制方法》---赵文心 一、独立中线模块的三相四线拓扑 独立中线模块是控制中线电压恒为母线一半,同时为零序电流ineu提供通路。不平衡负载的零序电流会导致中线电压脉动,因此需要控制…

Python第十三章(递归与lamada)

一。引用类型 不可变类型:在改变原有类型的数据后,值的地址也会进行更改 包括:整数,浮点数,字符串,元组 用id():进行判断是否十进制地址是否一样 可变类型:在改变原有类型后&…

一文教你如何本地搭建Qchan图床网站实现公网远程访问

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景,在大量开发人员的努力下,已经开发出大…

endnote设置引用格式

1在这上面找到合适的style,比如搜索nature methods https://endnote.com/downloads/styles/​​​​​​2.下载到的ens用endnote打开,可以导入nature methods格式 3.引用的时候发现显示的插入是4-7,但是看了最近nature methods的是4,5,6,7 …

C/C++实现无序入参的命令解析工具

C/C实现无序入参的命令解析工具 1 实现思路2 主要功能3 效果展示3.1 直接运行代码图3.2help命令执行效果图3.3命令行执行命令解析效果图 4 代码实现5 代码下载 1 实现思路 基本介绍: 思路来源于atlas,atc(模型转换工具),该工具对命令支持众多&#xff0…