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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

八种Flink任务监控告警方式

目录 一、Flink应用分析 1.1 Flink任务生命周期 1.2 Flink应用告警视角分析 二、监控告警方案说明 2.1 监控消息队中间件消费者偏移量 2.2 通过调度系统监控Flink任务运行状态 2.3 引入开源服的SDK工具实现 2.4 调用FlinkRestApi实现任务监控告警 2.5 定时去查询目标库…

在深度学习中,epoch和learning rate的通常取值范围?

在深度学习中,epoch和学习率的取值确实会根据不同的任务、数据集和模型架构有所不同。然而,您提到的范围是一些常见的经验性取值,这些取值在很多情况下都能工作得相当好。 1. 对于epoch的取值范围: 在很多研究论文和实际应用中&…

机器学习 | 掌握逻辑回归在实践中的应用

目录 初识逻辑回归 逻辑回归实操 分类评估方法 初识逻辑回归 逻辑回归(LogisticRegression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单…

tui-datetime组件由弹窗显示改成页面直接展示

效果图 代码 <template><view class"tui-datetime-picker" :style"{zIndex}"><view class"tui-datetime__header" :class"{ tui-show: isShow }" :style"{zIndex:getPickerZIndex}"><view class&quo…

论文阅读-一个用于云计算中自我优化的通用工作负载预测框架,

论文标题&#xff1a;A Self-Optimized Generic Workload Prediction Framework for Cloud Computing 概述 准确地预测未来的工作负载&#xff0c;如作业到达率和用户请求率&#xff0c;对于云计算中的资源管理和弹性非常关键。然而&#xff0c;设计一个通用的工作负载预测器…

spring-boot-admin的介绍和使用

概述 Spring Boot 有一个非常好用的监控和管理的源软件&#xff0c;这个软件就是 Spring Boot Admin。该软件能够将 Actuator 中的信息进行界面化的展示&#xff0c;也可以监控所有 Spring Boot 应用的健康状况&#xff0c;提供实时警报功能。 主要的功能点有&#xff1a; 显…

springboot集成rocketmq-spring-boot-starter的坑(避坑指南)

1.说明版本&#xff08;解决方法&#xff09; springboot版本&#xff1a;2.2.2.RELEASE RocketMQ版本&#xff1a;rocketmq-spring-boot-starter 2.2.2 2.坑 rocketmq-spring-boot-starter的版本一开始&#xff0c;使用的是2.2.0版本&#xff0c;一直出现一个问题&#x…

leetcode刷题(剑指offer) 101.对称二叉树

101.对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; …

探究HMAC算法:消息认证与数据完整性的完美结合

Hash-based Message Authentication Code&#xff08;基于哈希的消息认证码&#xff0c;简称HMAC&#xff09;算法作为一种广泛应用的消息认证码&#xff08;MAC&#xff09;算法&#xff0c;在现代信息安全领域起着至关重要的作用。本文将从算法原理、优缺点、实际应用等方面&…

RS485自动收发电路震荡的问题

电路 设计初衷 电源5V 选择5V的原因&#xff0c;差分2.5V比1.5V可以提高传输能力 TTL输入 3.3V电平满足需求 TTL输出 4.5V了&#xff0c;MCU是3.3V平台 这样就分为两种情况 MCU接收端可以容忍5V输入 MCU接收端不可以容忍5V输入&#xff0c;就要进行电压转换&#xff0c;我这里使…

VS之调用程序对DLL中全局变量的使用

接上篇《VS生成C动态链接库DLL》&#xff0c;能够生成DLL&#xff0c;且能调用后&#xff0c;遇到一个问题&#xff0c;即在DLL程序中定义了一些全局变量&#xff0c;应用程序需要使用&#xff0c;本以为可以直接使用&#xff0c;没想到&#xff0c;还是需要设置才可以&#xf…

Zookeeper服务注册与发现实战

目录 设计思路 Zookeeper注册中心的优缺点 SpringCloudZookeeper实现微服务注册中心 第一步&#xff1a;在父pom文件中指定Spring Cloud版本 第二步&#xff1a;微服务pom文件中引入Spring Cloud Zookeeper注册中心依赖 第三步&#xff1a; 微服务配置文件application.y…

猫什么时候发腮?全猫适用发腮长肉的生骨肉冻干分享

猫什么时候发腮是猫父母们非常关心的问题。在猫咪的成长过程中&#xff0c;发腮是一项重要的体征&#xff0c;也是猫咪成熟的标志。想要让猫咪拥有可爱的肉嘟嘟脸型&#xff0c;主人需要在适龄的年龄段加强营养补给&#xff0c;不要错失最佳发腮期。那么&#xff0c;猫咪的最佳…

前端性能优化:Vue项目打包后app.xxx.js 和 chunk-vendors.xxx.js 文件太大,导致页面加载时间太长

问题场景&#xff0c;如下图&#xff0c;环境上的 app.js 和chunk-vendors.js 两个文件大小&#xff0c;高达3.4M 和 2M &#xff0c;加载所耗费的时间也很长。 下面说一下如何解决&#xff1a; 1、首先需要安装插件 compression-webpack-plugin&#xff0c;我这里用的是6.1.1…

牛客——丢手绢(尺取法)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 “丢~丢~丢手绢&#xff0c;轻轻地放在小朋友的后面&#xff0c;大家不要告诉她&#xff0c;快点快点抓住她&#xff0c;快点快点抓住她。” 牛客幼儿园的小朋友们围成了一个圆圈准…

02.PostgreSQL运算符

1. 算术运算符 算术运算符 描述 示例 + 加法运算符 SELECT A+B - 减法运算符 SELECT A-B * 乘法运算符 SELECT A*B / 除法运算符 SELECT A/B % 取余运算符 SELECT A%B 1.1 加法与减法操作符 SELECT 100,100+11,100-11,100+23.0,100-23.0 运算结果 由此得出结论: 一个整数加上…

Go语言基础之接口

接口类型 一个接口类型就是一组方法的集合&#xff0c;它规定了需要实现的所有方法。 接口的定义 每个接口类型由任意个方法签名组成&#xff0c;接口的定义格式如下&#xff1a; type 接口类型名 interface{方法名1( 参数列表1 ) 返回值列表1方法名2( 参数列表2 ) 返回值列…

强化学习原理python篇08——actor-critic

强化学习原理python篇08——actor-critic 前置知识TD ErrorREINFORCEQACAdvantage actor-critic (A2C) torch实现步骤第一步第二步第三步训练结果 Ref 本章全篇参考赵世钰老师的教材 Mathmatical-Foundation-of-Reinforcement-Learning Actor-Critic Methods 章节&#xff0c;请…

C#小结:ScottPlot 5.0在VS2022桌面开发的应用(以winform为例)

目录 一、官网文档地址 二、在VS2022中安装Scottplot 三、拖动Scottplot 四、使用Scottplot 五、效果图 一、官网文档地址 官网地址&#xff1a;ScottPlot 5.0 食谱 本文内容来自于官网&#xff0c;选取了官网的一些比较好用的功能展示&#xff0c;如需学习更多功能&a…

个人建站前端篇(二)项目采用服务端渲染SSR

SSR的优点 更好的SEO首屏加载速度更快&#xff0c;用户体验更好可以使用相同的语言以及相同的声明式、面向组件的心智模型来开发整个应用&#xff0c;而不需要在后端模板系统和前端框架之间来回切换。 Vue生态中的SSR通用解决方案 Nuxt是一个构建于 Vue 生态系统之上的全栈框…