MinIOをboto3を使ってPythonから操作する
Python で S3 を操作するときに使う、AWS SDK for Python(boto3) を使って MinIO も操作できる。 以前作った環境を利用し、Python から操作できるか確認する。
準備
インストール
pip で boto3 をインストールしておく。
pip install boto3
コピー元ファイルの配置
ファイルアップロード機能を確認する際、minio から minio へファイルをコピーするような形で実現する。
今回はsystem-drummond
バケットを作成し、test.md
ファイルを作成して配置しておいた。
接続情報の確認
接続は client
を使い、接続のための情報を設定する。
- endpoint_url
- 起動している Docker を指定
- aws_access_key_id
- ユーザ ID
- 前回記事の Docker より
minio
を設定
- aws_secret_access_key
- パスワード
- 前回記事の Docker より
miniominiominio
を設定
s3 = boto3.client( "s3", endpoint_url="http://127.0.0.1:9000", aws_access_key_id="minio", aws_secret_access_key="miniominiominio", )
バケットの作成
import boto3 s3 = boto3.client( "s3", endpoint_url="http://127.0.0.1:9000", aws_access_key_id="minio", aws_secret_access_key="miniominiominio", ) response = s3.list_buckets() print(response["Buckets"]) s3.create_bucket(Bucket="from-boto") response = s3.list_buckets() print(response["Buckets"])
[{'Name': 'system-drummond', 'CreationDate': datetime.datetime(2022, 4, 29, 2, 4, 53, 547000, tzinfo=tzutc())}] [{'Name': 'from-boto', 'CreationDate': datetime.datetime(2022, 4, 29, 2, 49, 46, 32000, tzinfo=tzutc())}, {'Name': 'system-drummond', 'CreationDate': datetime.datetime(2022, 4, 29, 2, 4, 53, 547000, tzinfo=tzutc())}]
まず初期状態をs3.list_buckets()
で確認すると、準備で作成したsystem-drummond
が存在していることがわかる。
s3.create_bucket(Bucket="from-boto")
でfrom-boto
バケットを作成し、再度s3.list_buckets()
で確認するとfrom-boto
バケットが作成されていることが確認できる。
ファイルアップロード
import boto3 s3 = boto3.client( "s3", endpoint_url="http://127.0.0.1:9000", aws_access_key_id="minio", aws_secret_access_key="miniominiominio", ) object_list = s3.list_objects(Bucket="from-boto").get("Contents") print(object_list) s3.upload_file("./minio/data/system-drummond/test.md", "from-boto", "test.md") object_list = s3.list_objects(Bucket="from-boto").get("Contents") print(object_list)
None [{'Key': 'test.md', 'LastModified': datetime.datetime(2022, 4, 29, 3, 4, 45, 30000, tzinfo=tzutc()), 'ETag': '"2debfdcf79f03e4a65a667d21ef9de14"', 'Size': 5, 'StorageClass': 'STANDARD', 'Owner': {'DisplayName': 'minio', 'ID': '02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4'}}]
こちらも、まずは初期状態を確認する。
from-boto
をs3.list_objects(Bucket="from-boto").get("Contents")
で確認すると、None
であることがわかる。
「コピー元ファイルの配置」で配置したtest.md
を、s3.upload_file("./minio/data/system-drummond/test.md", "from-boto", "test.md")
でアップロード処理する。
再びs3.list_objects(Bucket="from-boto").get("Contents")
で見ると、test.md
が追加されていることがわかる。
バケットの削除
import boto3 s3 = boto3.client( "s3", endpoint_url="http://127.0.0.1:9000", aws_access_key_id="minio", aws_secret_access_key="miniominiominio", ) response = s3.list_buckets() print(response["Buckets"]) s3.delete_object(Bucket="from-boto", Key="test.md") s3.delete_bucket(Bucket="from-boto") response = s3.list_buckets() print(response["Buckets"])
[{'Name': 'from-boto', 'CreationDate': datetime.datetime(2022, 4, 29, 2, 49, 46, 32000, tzinfo=tzutc())}, {'Name': 'system-drummond', 'CreationDate': datetime.datetime(2022, 4, 29, 2, 4, 53, 547000, tzinfo=tzutc())}] [{'Name': 'system-drummond', 'CreationDate': datetime.datetime(2022, 4, 29, 2, 4, 53, 547000, tzinfo=tzutc())}]
from-boto
とsystem-drummond
が取得できる。
s3.delete_object(Bucket="from-boto", Key="test.md")
でオブジェクトの中身のtest.md
を削除、その直後にs3.delete_bucket(Bucket="from-boto")
でfrom-boto
バケットを削除している。
無事に削除できているので、最終的に表示されるのはsystem-drummond
バケットだけになっている。
まとめ
Python から MinIO を触り、オブジェクト操作をおこなってみた。
S3 同様にcreate_bucket
、upload_file
、delete_object
といった標準的な部分を使えることが確認できた。