::: IT인터넷 :::

Python으로 MinIO를 사용하는 방법 (1) - 소개와 설치

곰탱이푸우 2022. 4. 11. 08:20
MinIO는 AWS S3와 호환되는 파이썬 라이브러리를 제공한다.
해당 라이브러리를 활용하면 MinIO의 WebUI나 mc (MinIO Client)에서 제공하는 기능의 일부를 파이썬에서 사용할 수 있다.
 
MinIO의 WebUI를 사용하는 방법은 아래 포스팅을 참고한다.
MinIO의  mc (MinIO Client)를 설정하고 사용하는 방법은 아래 포스팅을 참고한다.
 

MinIO 라이브러리

파이썬에서 MinIO의 기능을 사용하기 위해서는 minio 라이브러리를 사용해야 한다.
AWS S3 라이브러리와 사용법이 상당히 유사한 특징이 있다.
 

개요

파이썬의 MinIO 라이브러리는 아래 사이트에서 오픈소스로 관리되고 있다.
파이썬 버전 3.6 또는 그 이상 버전에서 사용 가능하다.
Apache 2.0 라이선스를 사용하고 있어, 수정과 재배포 의무는 자유로운 편이다. (Apache 라이선스만 표기하면 된다.)
 

설치

해당 라이브러리를 사용하기 위해서는 로컬에 설치해야 한다.
 
pip 명령을 사용하며, 특정 버전 설치를 원하는 경우 버전 지정도 가능하다.
$ pip install minio

# 2022-02-28 기준 최신 버전 설치
$ pip install minio==7.1.4
 
conda 가상환경에서 설치하는 방법은 다음과 같다.
사용하려는 가상환경을 활성화 시킨 다음 설치하면 된다.
$ conda create -n ENV_NAME python==3.8
...
$ conda activete ENV_NAME

(ENV_NAME) $ pip install minio
 

라이브러리 사용법

minio 라이브러리의 자세한 사용 방법은 아래 문서에 자세히 정리되어 있다.
주요 기능은 버킷 (Bucket)과 데이터 (Object) 사용에 집중되어 있다.
MinIO 관리 기능은 대부분 WebUI와 mc에서 수행 가능하기 때문에 큰 문제는 되지 않는다.
 
WebUI와 mc (MinIO Client) 사용법에서 다룬 버킷과 데이터 관련 부분만 정리한다.
 
 

클래스와 인스턴스

클래스 생성자를 호출하여 인스턴스를 생성하는데 사용한다.
MinIO에 연결하고 인증하는데 필요한 정보들을 포함한다.
 

클래스 정의

minio 라이브러리에 정의 된 클래스는 다음과 같다.
Minio(endpoint, access_key=None, secret_key=None,
      session_token=None, secure=True,
      region=None, http_client=None, credentials=None)
 
전달하는 인자들은 다음과 같다. 사용 빈도가 낮거나 불필요한 인자는 회색으로 표시했다.
Param
Type
Default
Description
endpoint
str
 
Hostname of a S3 service.
access_key
str
None
(Optional) Access key (aka user ID) of your account in S3 service.
secret_key
str
None
(Optional) Secret Key (aka password) of your account in S3 service.
session_token
str
None
(Optional) Session token of your account in S3 service.
secure
bool
True
(Optional) Flag to indicate to use secure (TLS) connection
to S3 service or not.
region
str
None
(Optional) Region name of buckets in S3 service.
http_client
urllib3
.poolmanager
.PoolManager
None
(Optional) Customized HTTP client.
credentials
minio
.credentials
.Provider
None
(Optional) Credentials provider of your account in S3 service.
 
해당 클래스를 구현한 상세 코드는 아래 코드를 참고한다.

https://github.com/minio/minio-py/blob/master/minio/api.py

 

 

인스턴스 생성

파이썬으로 MinIO에 접속하여 사용하기 위해서는 해당 클래스를 인스턴스로 생성해야 한다.
생성 된 인스턴스에는 사용하고자 하는 MinIO 서버에 대한 연결 정보를 포함하고 있다.
간단하게는 서버 주소와 계정 정보만 사용할 수 있고, 운영 환경에 따라 추가 설정도 지정 가능하다.
 
기본형
인스턴스를 생성할때 계정 정보가 없으면 익명 접근, 계정 정보가 있으면 정상적인 접근으로 사용 가능하다.
from minio import Minio

# Create client with anonymous access.
client = Minio("play.min.io")

# Create client with access and secret key.
client = Minio("s3.amazonaws.com", "ACCESS-KEY", "SECRET-KEY")
 
익명 접근을 사용하기 위해서는 해당 설정이 적용되어 있어야 한다.
일반적으로 익명 접근은 잘 사용하지 않으므로 계정 정보를 전달하는 방법을 사용하면 된다.
 
상세 설정
인스턴스를 생성할때 전달하는 인자는 여러가지가 있다.
그러나 로컬에 단독 환경으로 구성해서 사용하는 경우 프록시 옵션만 참고하면 될 것으로 판단된다.
 
프록시 서버를 사용한 Custom HTTP Client 예제 코드는 다음과 같다.
from minio import Minio
import urllib3

client = Minio(
    "SERVER:PORT",
    access_key="ACCESS_KEY",  secret_key="SECRET_KEY", secure=True,
    http_client=urllib3.ProxyManager(
        "https://PROXYSERVER:PROXYPORT/",
        timeout=urllib3.Timeout.DEFAULT_TIMEOUT,
        cert_reqs="CERT_REQUIRED",
        retries=urllib3.Retry(
            total=5,
            backoff_factor=0.2,
            status_forcelist=[500, 502, 503, 504])
    )
)
다른 옵션에 대한 내용은 아래 사이트에서 1. Contructor의 example 항목을 참고한다.

인스턴스 동시 사용

참고로 여러 개의 인스턴스를 동시 사용하는 방법과 관련해서 아래 내용을 참고한다.
NOTE on concurrent usage:
Minio object is thread safe when using the Python threading library.
Specifically, it is NOT safe to share it between multiple processes, for example when using multiprocessing.Pool.
The solution is simply to create a new Minio object in each process, and not share it between processes.
 
Python Threading Library를 사용할때 스레드로부터 안전하지만, multiprocessing.Pool 과 같은 여러 프로세스 공유는 안전하지 않다.
따라서 각 프로세스에서 새 Minio 객체를 생성하여 사용하고, 프로세스간 공유가 없도록 해야 한다.
 

MinIO 관리

계정, 그룹, 정책 관리는 WebUI 또는 mc (MinIO Client)를 사용한다.