paint-brush
Usando MinIO e Python para criar aplicativos orientados a eventos escalonáveis e eficientespor@minio
3,770 leituras
3,770 leituras

Usando MinIO e Python para criar aplicativos orientados a eventos escalonáveis e eficientes

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

Muito longo; Para ler

As notificações de eventos no MinIO podem não parecer emocionantes no início, mas depois que você aproveita seu poder, elas iluminam a dinâmica dentro de seus baldes de armazenamento.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Usando MinIO e Python para criar aplicativos orientados a eventos escalonáveis e eficientes
MinIO HackerNoon profile picture


As notificações de eventos no MinIO podem não parecer emocionantes no início, mas depois que você aproveita seu poder, elas iluminam a dinâmica dentro de seus baldes de armazenamento. Notificações de eventos são componentes críticos de um sistema de armazenamento de objetos completo e eficiente. Webhooks são minha ferramenta favorita para integração com MinIO . Eles são como um canivete suíço no mundo dos eventos, oferecendo uma solução universal para diversos desafios.


A interface amigável do MinIO oferece um serviço perfeito integrações , mas vamos nos aprofundar neste guia. Estamos construindo serviços do zero em Python, usando suas credenciais de cliente, para orientar você nos detalhes básicos da integração do MinIO.


Em nossa exploração, focaremos na implantação usando docker-compose, um método que oferece orquestração simplificada e eficiente. Esta abordagem envolverá a criação de um ambiente coeso para MinIO e Flask, permitindo-lhes interagir perfeitamente. Ao integrar o serviço MinIO com suas credenciais e configurações apropriadas, pretendemos criar um fluxo de trabalho sistemático que demonstre efetivamente a aplicação prática de gerenciamento e resposta a eventos de bucket MinIO.


Depois de definirmos as configurações do cliente e definirmos a estrutura dos dados de resposta, como sempre, a verdadeira diversão começa. Esta demonstração destacará vários aspectos importantes de como você pode conectar seu cliente MinIO a um aplicativo Flask onde os dados de notificação de eventos podem ser processados posteriormente. Queremos que você se sinta confortável em desenvolver seus próprios sistemas orientados a eventos com MinIO, então utilize os serviços que fornecemos no blog-assets/flask-webhook-event-notifications recurso hospedado em Página GitHub do MinIO .


Prepare-se para mergulhar em um mundo onde o tratamento de dados é uma arte e uma ciência, simplificado com o MinIO. É uma oportunidade para inovar, criar e revolucionar a forma como seus aplicativos trabalham com dados.

MinIO e serviços integrados

A integração do MinIO no Ecossistema Kubernetes exemplifica sua adaptabilidade em várias tecnologias de nuvem. Os webhooks são essenciais, oferecendo aos desenvolvedores a flexibilidade de criar integrações personalizadas, seja para gerenciar dados em diversas plataformas de nuvem ou para configurações de laboratórios domésticos locais.


Este guia vai além dos conceitos teóricos, fornecendo trechos de código práticos e executáveis para construir suas integrações. É um convite para explorar o potencial ilimitado da sua criatividade no aproveitamento das notificações de eventos do MinIO.

Estabelecendo as bases para um aplicativo Python com Docker

A fase inicial de nossa jornada é dedicada a aproveitar o poder da conteinerização do Docker para criar um ambiente de aplicação Python robusto. Nossa abordagem gira em torno da implantação com Docker-compose, um método escolhido por sua simplicidade e eficácia. Esta escolha foi projetada para atender a uma ampla gama de desenvolvedores, priorizando a facilidade de uso e a rápida implantação, garantindo ao mesmo tempo um alto nível de funcionalidade.


Utilizando o Docker-compose, criamos uma configuração amigável e orientada por configuração. Este ambiente é perfeito para quem busca implantação rápida sem sacrificar a profundidade dos recursos do seu projeto. Ele fornece um caminho simples para integrar recursos avançados de webhook e ajustar as configurações do MinIO, atendendo aos requisitos específicos do seu projeto.


Cada passo que damos na criação deste ambiente é crucial. Não se trata apenas de colocar os serviços em funcionamento; trata-se de compreender e aproveitar componentes para criar um sistema abrangente. Desenvolver seus próprios sistemas pode ser a faísca que acende sua inovação, aprimorando sua estratégia geral de gerenciamento de dados e, eventualmente, transformando seus dados brutos em informações práticas e criteriosas.

Implantando MinIO e serviços integrados

Implante com Docker-Compose: Flask App e MinIO

Começaremos configurando um aplicativo Python e seu ambiente. Isso envolve a implantação do MinIO com docker compose e os serviços a serem integrados. Para configurar o MinIO com um aplicativo Flask, usaremos o comando git para clonar o repositório minio/blog-assets em seu ambiente local:


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


Isso irá clonar o minio/blog-assets repositório do GitHub, navegue até o /flask-webhook-event-notificações/ diretório que contém o docker-compose.yaml arquivo e inicie os serviços MinIO e Flask.

Estrutura de diretório

Esta estrutura docker-compose descreve dois serviços e suas respectivas variáveis de configuração. Para fins de visualização, forneci aqui uma visualização em árvore da estrutura de diretórios desejada:


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

Configurando Webhooks no MinIO

A configuração de um webhook no MinIO pode ser realizada por meio de vários métodos, desde o uso da interface do usuário, usando mc (o utilitário cliente MinIO) ou por meio de scripts com várias linguagens de programação.


MinIO suporta um variedade de serviços externos para notificações de eventos , incluindo: AMQP (RabbitMQ) , MQTT , NATS , NSQ , Elasticsearch , Kafka , MySQL , PostgreSQL , Redis e serviços de webhook .


Configurando o MinIO para utilizar estes notificações de eventos envolve uma série de etapas bem definidas, garantindo que sua instância MinIO não apenas capture, mas também comunique efetivamente dados de eventos importantes como uma parte interativa e responsiva de seu ecossistema de aplicativos.

Compreendendo a estrutura de dados das notificações de eventos MinIO

As notificações de eventos S3 do MinIO incluem um estrutura de dados JSON detalhada , essencial para uma compreensão abrangente e uma gestão eficaz dos eventos. Abaixo listei alguns dos valores encontrados nos dados do evento:


  • Chave : o identificador exclusivo do objeto no bucket.


  • eTag : o identificador de versão do objeto para integridade e controle de versão.


  • Tamanho : O tamanho do objeto em bytes, indicando sua escala.


  • Sequenciador : garante que os eventos sejam processados na sequência exata em que ocorreram.


  • Tipo de conteúdo : o tipo de mídia do objeto, especificando como manipular ou exibir o arquivo.


  • UserMetadados : metadados definidos pelo usuário anexados ao objeto, fornecendo contexto adicional.


  • Detalhes do intervalo :

    • ARN (nome de recurso da Amazon) : o identificador exclusivo do bucket na AWS.

    • Nome : o nome do bucket onde o objeto está armazenado.

    • Identidade do Proprietário : informações sobre o proprietário do bucket.


  • s3SchemaVersion : indica a versão do esquema de notificação de eventos do S3 usado.


  • ID de configuração : identificador da configuração de notificação específica que acionou esse evento.


Esta estrutura é particularmente eficaz para Aplicações de frasco , permitindo registro sistemático, análise e análise de interações com o bucket MinIO.

Configurando MinIO para Webhooks e operações orientadas a eventos

Depois de implantar o docker-compose.yaml descrito acima, continue usando o utilitário de linha de comando MinIO Client, mc . Esta configuração envolve a criação de um alias no MinIO, a configuração do endpoint e a definição de notificações de bucket.


Estaremos trabalhando dentro de um terminal interativo para o contêiner “minio” , que podemos gerar executando um único comando:


docker exec -it minio /bin/sh


A razão para executar nossos comandos mc a partir deste shell é porque a imagem Docker minio/minio já tem mc instalado e pronto para uso.


Uma vez dentro do terminal interativo do contêiner, o processo de configuração do MinIO para notificações de eventos usando o MinIO Client (mc) envolve as seguintes etapas principais:


  1. Configurando o alias do MinIO : A primeira etapa envolve a criação de um alias para seu servidor MinIO usando o MinIO Client (mc). Este alias é um atalho para o seu servidor MinIO, permitindo que você execute facilmente outros comandos mc sem especificar repetidamente o endereço do servidor e as credenciais de acesso. Esta etapa simplifica o gerenciamento do seu servidor MinIO através do cliente.

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

  2. Adicionando o endpoint do Webhook ao MinIO : configure um novo endpoint de serviço de webhook no MinIO. Essa configuração é feita usando variáveis de ambiente ou definições de configuração de tempo de execução, onde você define parâmetros importantes, como a URL do terminal, um token de autenticação opcional para segurança e certificados de cliente para conexões seguras.

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


  3. Reiniciando a implantação do MinIO : depois de definir as configurações, reinicie a implantação do MinIO para garantir que as alterações entrem em vigor.

    mc admin service restart myminio

    Esperar:

    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. Configurando notificações de bucket : A próxima etapa envolve o uso do comando mc event add. Este comando é usado para adicionar novos eventos de notificação de bucket, definindo o serviço Webhook recém-configurado como destino para essas notificações.

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

    Esperar:

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


  5. Listar eventos inscritos no bucket : execute este comando para listar o evento atribuído a myminio/mybucket:

    minio mc event list myminio/mybucket

    Esperar:

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


  6. Listar eventos atribuídos ao bucket (em JSON) : execute este comando para listar o evento atribuído a myminio/mybucket no formato JSON:

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

    Esperar:

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

A estrutura dos dados de notificação de eventos recebidos pelo Flask

Dependendo dos serviços ou integração que você está construindo, pode ser necessário identificar event_data do seu aplicativo Flask, e isso requer um bom entendimento dos dados que seu evento fornece.


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


Seguindo essas etapas, você pode utilizar efetivamente as notificações de eventos MinIO, automatizando significativamente os processos de fluxo de trabalho de dados. Para obter orientações e informações mais detalhadas, consulte a documentação do MinIO em Notificações de intervalo e Monitorando eventos de bucket e objeto .


Se você estiver interessado em configurar o MinIO com PostgreSQL , dê uma olhada em Simplificando eventos de dados com MinIO e PostgreSQL , onde abordei a extensa configuração e gerenciamento de eventos de dados do MinIO. Essas configurações variam desde o uso do console MinIO para uma interface gráfica amigável até a ferramenta de linha de comando mc para uma configuração mais detalhada e programável. A postagem do blog complementa sua compreensão do tópico, enfatizando a importância de configurar corretamente o PostgreSQL na interface do MinIO e a importância de reiniciar o servidor MinIO para que as alterações tenham efeito.


Desenvolvendo um Webhook com Flask para receber notificações de eventos

Após a implantação do nosso ambiente, agora mudamos nosso foco para a integração do MinIO com Python, um aspecto fundamental do nosso sistema de manipulação e processamento de dados. Esta integração é fundamental na criação de um ecossistema coeso, onde o MinIO pode colaborar perfeitamente com o Flask.

Importando os pacotes necessários

Em nosso código de demonstração, selecionamos cuidadosamente as importações do Python para garantir que a funcionalidade do aplicativo esteja alinhada com a finalidade pretendida. O pacote flask cria a infraestrutura do servidor web, definindo endpoints para lidar com solicitações HTTP recebidas. Em seguida, o aplicativo pode ser codificado para lidar com as notificações de eventos MinIO da maneira desejada.


 from flask import Flask, jsonify, request


Essas importações formam coletivamente a base do aplicativo, permitindo receber e processar notificações de eventos MinIO.

Aplicativo Flask e endpoint de manipulação de eventos em Python

Um aplicativo Flask é instanciado e um endpoint é configurado para lidar com solicitações POST na rota /minio-event . Flask é uma microestrutura web em Python, ideal para configurar aplicações web e endpoints de 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


A função handle_minio_event no aplicativo Flask processa solicitações POST contendo dados de eventos MinIO e retorna os event_data recebidos da notificação de eventos MinIO.


Essa abordagem facilita o processamento e a resposta em tempo real a eventos de armazenamento, permitindo a interação dinâmica entre o sistema de armazenamento MinIO e a aplicação Flask.

Integrando serviços com eventos de bucket MinIO por meio de scripts Python

Esta postagem do blog usou MinIO e Python em um ambiente Docker para demonstrar o poder e a flexibilidade das notificações de eventos de bucket MinIO e demonstra uma abordagem estratégica para criar aplicativos escalonáveis e eficientes orientados a eventos.


A utilização do Docker, com sua tecnologia de conteinerização, se destaca por permitir que componentes como MinIO e Flask funcionem de forma independente, porém coesa. É claro que essa configuração nativa da nuvem em contêiner minimiza conflitos e dependências, destacando a importância do Docker e dos contêineres Docker na arquitetura de software moderna.


Concluindo nossa exploração das notificações de eventos de webhook do MinIO, estou convencido de que a sinergia de uma linguagem de programação dinâmica e a força formidável do MinIO apresentam um kit de ferramentas incomparável. Esse emparelhamento abre caminho para oportunidades ilimitadas no desenvolvimento de aplicativos. Ela nos permite não apenas inovar e simplificar, mas também expandir nossas capacidades com notável eficiência e adaptabilidade.


Este guia demonstrou a simplicidade e a eficácia do desenvolvimento de APIs usando Python, estabelecendo uma base sólida para inovação contínua e atendendo às demandas em constante mudança. Ele ressalta a adaptabilidade que é essencial para o avanço contínuo no gerenciamento de dados e na evolução do desenvolvimento de aplicativos. Esta abordagem não é apenas uma metodologia; é um caminho para preparar nossos esforços tecnológicos para o futuro.