paint-brush
MinIO 및 Python을 사용하여 확장 가능하고 효율적인 이벤트 기반 애플리케이션 만들기~에 의해@minio
3,783 판독값
3,783 판독값

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의 이벤트 알림은 처음에는 별로 흥미로워 보이지 않을 수 있지만, 일단 그 기능을 활용하면 스토리지 버킷 내의 역학을 밝혀줍니다. 이벤트 알림은 본격적인 효율적인 개체 스토리지 시스템의 중요한 구성 요소입니다. Webhooks는 MinIO 통합을 위해 제가 개인적으로 가장 좋아하는 도구 입니다. 이는 이벤트 세계의 스위스 군용 칼과 같으며 다양한 과제에 대한 보편적인 솔루션을 제공합니다.


MinIO의 사용자 친화적인 UI로 원활한 서비스 제공 통합 , 하지만 이 가이드에서는 더 자세히 살펴보겠습니다. 우리는 MinIO 통합의 기본 사항을 안내하기 위해 클라이언트 자격 증명을 사용하여 Python으로 처음부터 서비스를 구축하고 있습니다.


탐색에서는 간소화되고 효율적인 오케스트레이션을 제공하는 방법인 docker-compose를 사용한 배포에 중점을 둘 것입니다. 이 접근 방식에는 MinIO와 Flask가 원활하게 상호 작용할 수 있도록 응집력 있는 환경을 설정하는 작업이 포함됩니다. MinIO 서비스를 적절한 자격 증명 및 구성과 통합함으로써 우리는 MinIO 버킷 이벤트를 관리하고 응답하는 실제 적용을 효과적으로 보여주는 체계적인 워크플로를 만드는 것을 목표로 합니다.


늘 그렇듯이 클라이언트 구성을 설정하고 응답 데이터의 구조를 정의하면 진짜 재미가 시작됩니다. 이 데모에서는 이벤트 알림 데이터를 추가로 처리할 수 있는 Flask 애플리케이션에 MinIO 클라이언트를 연결하는 방법에 대한 몇 가지 주요 측면을 강조합니다. 우리는 여러분이 MinIO를 사용하여 자신만의 이벤트 중심 시스템을 편안하게 개발할 수 있기를 바랍니다. 블로그 자산/flask-webhook-이벤트-알림 호스팅된 리소스 MinIO의 GitHub 페이지 .


MinIO를 통해 데이터 처리가 예술이자 과학이 되는 세상으로 뛰어들 준비를 하세요. 앱이 데이터와 함께 작동하는 방식을 혁신하고 창조하며 혁신할 수 있는 기회입니다.

MinIO 및 통합 서비스

MinIO가 쿠버네티스 생태계 다양한 클라우드 기술에 대한 적응성을 보여줍니다. 웹후크는 다양한 클라우드 플랫폼에서 데이터를 관리하든 로컬 홈 랩 설정을 위해든 개발자에게 맞춤형 통합을 만들 수 있는 유연성을 제공하는 중추적인 역할을 합니다.


이 가이드는 이론적 개념을 넘어 통합 구축을 위한 실용적이고 실행 가능한 코드 조각을 제공합니다. MinIO 이벤트 알림을 활용하여 창의성의 무한한 잠재력을 탐색할 수 있는 초대입니다.

Docker를 사용하여 Python 애플리케이션의 기반 마련

여정의 초기 단계는 Docker의 컨테이너화 기능을 활용하여 강력한 Python 애플리케이션 환경을 구축하는 데 전념합니다. 우리의 접근 방식은 단순성과 효율성을 위해 선택된 방법인 Docker-compose를 사용한 배포에 중점을 두고 있습니다. 이 선택은 높은 수준의 기능을 보장하는 동시에 사용 편의성과 빠른 배포를 우선시하여 광범위한 개발자의 요구에 부응하도록 설계되었습니다.


Docker-compose를 활용하여 사용자 친화적인 구성 기반 설정을 만듭니다. 이 환경은 프로젝트 기능의 깊이를 희생하지 않고 빠른 배포를 원하는 사람들에게 적합합니다. 고급 웹후크 기능을 통합하고 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의 리포지토리에서 다음으로 이동합니다. /flask-webhook-이벤트-알림/ 다음을 포함하는 디렉토리 docker-compose.yaml 파일을 저장하고 MinIO 및 Flask 서비스를 시작합니다.

디렉토리 구조

이 docker-compose 구조는 두 가지 서비스와 해당 구성 변수를 간략하게 설명합니다. 시각화를 위해 여기에 원하는 디렉터리 구조의 트리 보기를 제공했습니다.


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

MinIO에서 웹후크 설정

MinIO에서 웹훅 구성은 사용자 인터페이스 사용, mc (MinIO 클라이언트 유틸리티) 사용, 다양한 프로그래밍 언어를 사용한 스크립팅 등 다양한 방법을 통해 수행할 수 있습니다.


MinIO는 다음을 지원합니다. 이벤트 알림을 위한 다양한 외부 서비스 여기에는 AMQP(RabbitMQ) , MQTT , NATS , NSQ , Elasticsearch , Kafka , MySQL , PostgreSQL , Redis웹훅 서비스가 포함됩니다.


이를 활용하기 위해 MinIO 설정 이벤트 알림 MinIO 인스턴스가 중요한 이벤트 데이터를 캡처할 뿐만 아니라 애플리케이션 생태계의 대화형 반응형 부분으로 효과적으로 전달하도록 보장하는 잘 정의된 일련의 단계가 포함됩니다.

MinIO 이벤트 알림의 데이터 구조 이해

MinIO의 S3 이벤트 알림에는 다음이 포함됩니다. 자세한 JSON 데이터 구조 , 이벤트에 대한 포괄적인 이해와 효과적인 관리에 필수적입니다. 아래에는 이벤트 데이터 내에서 발견된 일부 값이 나열되어 있습니다.


  • 열쇠 : 버킷에 있는 객체의 고유 식별자입니다.


  • e태그 : 무결성 및 버전 제어를 위한 객체의 버전 식별자입니다.


  • 크기 : 크기를 나타내는 객체의 크기(바이트)입니다.


  • 시퀀서 : 이벤트가 발생한 정확한 순서대로 처리되도록 합니다.


  • 컨텐츠 타입 : 파일을 처리하거나 표시하는 방법을 지정하는 객체의 미디어 유형입니다.


  • 사용자메타데이터 : 객체에 첨부된 사용자 정의 메타데이터로 추가 컨텍스트를 제공합니다.


  • 버킷 세부정보 :

    • ARN(Amazon 리소스 이름) : AWS 버킷의 고유 식별자입니다.

    • 이름 : 객체가 저장되는 버킷의 이름입니다.

    • 소유자 신원 : 버킷 소유자에 대한 정보입니다.


  • s3스키마 버전 : 사용된 S3 이벤트 알림 스키마의 버전을 나타냅니다.


  • 구성 ID : 이 이벤트를 트리거한 특정 알림 구성에 대한 식별자입니다.


이 구조는 특히 다음과 같은 경우에 효과적입니다. 플라스크 응용 , MinIO 버킷과의 상호 작용에 대한 체계적인 로깅, 구문 분석 및 분석이 가능합니다.

웹훅 및 이벤트 기반 작업을 위한 MinIO 설정

위에서 설명한 docker-compose.yaml을 배포한 후 MinIO 클라이언트 mc 명령줄 유틸리티를 사용하여 계속 진행합니다. 이 설정에는 MinIO에서 별칭 생성, 엔드포인트 구성 및 버킷 알림 설정이 포함됩니다.


우리는 단일 명령을 실행하여 생성할 수 있는 "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에 웹훅 엔드포인트 추가 : MinIO에서 새로운 웹훅 서비스 엔드포인트를 구성합니다. 이 설정은 엔드포인트 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와 원활하게 협업할 수 있는 응집력 있는 생태계를 만드는 데 중추적인 역할을 합니다.

필요한 패키지 가져오기

데모 코드에서는 애플리케이션의 기능이 의도한 목적과 일치하는지 확인하기 위해 Python 가져오기를 신중하게 선택했습니다. flask 패키지는 들어오는 HTTP 요청을 처리하기 위한 엔드포인트를 정의하는 웹 서버 인프라를 생성합니다. 그런 다음 원하는 방식으로 MinIO 이벤트 알림을 처리하도록 애플리케이션을 코딩할 수 있습니다.


 from flask import Flask, jsonify, request


이러한 가져오기는 애플리케이션의 기초를 집합적으로 형성하여 MinIO 이벤트 알림을 수신하고 처리할 수 있도록 합니다.

Python의 Flask 애플리케이션 및 이벤트 처리 끝점

Flask 애플리케이션이 인스턴스화되고 /minio-event 경로에서 POST 요청을 처리하도록 엔드포인트가 설정됩니다. Flask는 Python의 마이크로 웹 프레임워크로, 웹 애플리케이션 및 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 웹후크 이벤트 알림에 대한 탐색의 결론적으로 저는 동적 프로그래밍 언어와 MinIO의 강력한 힘의 시너지 효과가 비교할 수 없는 툴킷을 제공한다고 확신합니다. 이러한 결합은 애플리케이션 개발에 무한한 기회를 제공하는 길을 열어줍니다. 이를 통해 우리는 혁신과 합리화뿐 아니라 놀라운 효율성과 적응성을 통해 역량을 확장할 수 있습니다.


이 가이드는 Python을 사용한 API 개발의 단순성과 효율성을 입증하여 지속적인 혁신을 위한 견고한 기반을 마련하고 끊임없이 변화하는 요구 사항을 충족합니다. 이는 데이터 관리와 애플리케이션 개발의 지속적인 발전에 필수적인 적응성을 강조합니다. 이 접근 방식은 단순한 방법론이 아닙니다. 이는 우리의 기술적 노력을 미래에도 보장할 수 있는 통로입니다.