AWSのストレージサービスS3と互換性があるMinIOをローカルに作ってみました。
環境) Python 3.9.16, Docker Desktop & M2 Mac
参考) https://laid-back-scientist.com/minio
以前業務のデバッグ環境で使用したことはありますが、docker imageとして使えるものがあることを知り、試してみました。
Macでは、上記参考サイトのdocker-composeファイルフォーマットがまずいようなので、修正が必要です。
(root) Additional property minio is not allowed
https://qiita.com/mida12251141/items/2e07cb332e436e56fcc9
しかしここでは使わず以下のような、コマンド一発にしました。(永続化にはVolumeの指定が必要ですが、テストなのですぐ消えてくれた方が良いのと、DockerDesktopのクリック一つで、start/stopができるのでこのままでも問題なし)
参考) https://hub.docker.com/r/minio/minio/
docker run -p 9000:9000 -p 9001:9001 -e MINIO_ROOT_USER=root -e MINIO_ROOT_PASSWORD=password quay.io/minio/minio server /data –console-address “:9001”
管理コンソールから(loginはroot/password)ファイルをドラッグ&ドロップで、アップロードします。
ストレージの内容確認のためファイルリストを取得するPythonプログラムを実行します。
S3を操作するライブラリをインストール
pip install boto3
s3.py
1 2 3 4 5 6 7 8 9 10 11 12 |
import boto3 if __name__ == '__main__': s3 = boto3.resource( service_name='s3', endpoint_url='http://localhost:9000', aws_access_key_id='root', aws_secret_access_key='password', region_name='') bucket = s3.Bucket("test01") for obj in bucket.objects.all(): print(obj.key) |
実行結果
% python s3.py
sd00.png
sd01.png
Dockerの中に入って確認します。
mcコマンドは、もともと実行権限がなかったのですが、chmodで付与して実行しました。(このようなことをやっていいのかどうかわかりませんが・・コマンド実行のテストという目的です)
運よく導入が簡単なPythonの事例がありましたが、他の言語でもまた試してみたいと思います。