::: IT인터넷 :::

Python으로 MinIO를 사용하는 방법 (2) - Bucket 관리

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

 

Bucket 관리

기존 WebUI와 mc 사용법에서 조사한 자주 사용하는 기능을 중심으로 정리한다.
 
자세한 사항은 아래 문서를 참고한다.

Bucket 이해

Bucket은 MinIO에서 생성할 수 있는 최상위 디렉토리의 개념이다.
MinIO 내부에서 유일한 이름을 가져야 한다.
 
PostgreSQL과 같은 RDBMS 내부의 데이터베이스와 유사한 개념이다.
보통 서비스나 프로젝트 단위로 생성하며, 아래와 같은 경우에는 필요에 따라 용도별로 나눠도 된다.
 
보통 아래와 같은 경우 별도의 버킷을 제공하는 경우가 많다.
  • dev 버킷 - 개발 중 생성되는 임시 데이터 저장 목적
  • workspace - 사용자마다 자유로운 작업 공간 제공
 
이러한 임시 공간은 언제든 삭제 가능해야 하며, MinIO의 가용 공간이 부족할 경우 최우선적으로 정리해야 한다.
 

Bucket 생성

make_bucket 함수를 사용한다.
# Create a bucket with region and object lock.

make_bucket(bucket_name, location='us-east-1', object_lock=False)

## Parameters
# bucket_name (str) - Name of the bucket.
# location (str) - Region in which the bucket will be created.
# object_lock (bool) - Flag to set object-lock feature.

## Return
# None
 
예제 코드는 다음과 같다.
단독 모드로 사용하는 경우 location과 object_lock은 큰 의미가 없어 제외한다.
# client는 위에서 정의한 MinIO 클래스의 인스턴스이다.

client.make_bucket("my-bucket")
 
 

Bucket 목록 확인

전체 목록을 출력하거나 대상 Bucket이 존재하는지 확인한다.
 
목록 출력
list_buckets 함수를 사용한다.
# List information of all accessible buckets.

list_buckets()

## Parameters
# None

## Return
# List - Bucket
 
예제 코드는 다음과 같다.
# client는 위에서 정의한 MinIO 클래스의 인스턴스이다.

buckets = client.list_buckets()

for bucket in buckets:
    print(bucket.name, bucket.creation_date)
 
존재 확인
bucket_exists 함수를 사용한다.
# Check if a bucket exists.
bucket_exists(bucket_name)

## Parameters
# bucket_name (str) - Name of the bucket.

## Return
# Bool - bucket_exist
 
예제 코드는 다음과 같다.
# client는 위에서 정의한 MinIO 클래스의 인스턴스이다.

if client.bucket_exists("my-bucket"):
    print("my-bucket exists")
else:
    print("my-bucket does not exist")
 
 

Bucket 삭제하기

remove_bucket 함수를 사용한다.
# Remove an empty bucket.
remove_bucket(bucket_name)

## Parameters
# bucket_name (str) - Name of the bucket.

## Return
# None
 
예제 코드는 다음과 같다.
# client는 위에서 정의한 MinIO 클래스의 인스턴스이다.

client.remove_bucket("my-bucket")
 

Bucket의 Tag 설정

WebUI에서 Bucket 설정 화면에 진입하면 아래와 같이 Bucket의 Tag를 설정할 수 있다.
 
파이썬 API로도 가능하며 아래 함수를 제공한다.
  • get_bucket_tags - 설정 된 Tag 값 확인
  • set_bucket_tags - 지정한 Tag 값으로 설정
  • delete_bucket_tags- 지정한 Tag 값 삭제
 
해당 함수의 자세한 설명은 아래 문서를 참고한다.
지난 몇 번의 프로젝트 경험상 이러한 Tag 기능은 관리 목적으로 사용한다.
그러나 대규모 프로젝트가 아닌 이상 활용도가 극히 떨어졌다.
 
일반적으로 Tag에는 소유자 (또는 담당자) 정보, 관련 프로젝트나 어플리케이션 이름 정도를 입력하는 것이 적당하다.
 
따라서 이 정도 Tag 관리는 WebUI나 mc 명령어를 사용하는 것을 권장한다.
 
 

Bucket의 Policy (권한) 설정

WebUI에서 Bucket 설정 화면에 진입하면 아래와 같이 Bucket의 Access Policy를 설정할 수 있다.

 

일반적으로 MinIO가 기본 제공하는 Private와 Public을 주로 사용한다.
임의의 설정을 해야 하는 경우 Custom을 선택하고, JSON 형태인 S3 권한 설정 코드를 기입해야 한다.
 
Python에서 Bucket 접근 권한을 관리하는 API를 제공하는데, JSON 포맷을 사용해야 한다.
  • get_bucket_policy - 설정 된 접근 권한 확인 (JSON 리턴)
  • set_bucket_policy - 지정한 접근 권한 설정 (JSON 전달)
  • delete_bucket_policy- 지정한 Bucket의 접근 권한 삭제
 
해당 함수의 자세한 설명은 아래 문서를 참고한다.
지난 몇 번의 프로젝트 경험상 이러한 Custom 기능은 사용한 경험이 없다.
따라서 이 정도 권한 관리는 WebUI나 mc 명령어를 사용하는 것을 권장한다.