はじめに
この記事では、MinIOをいうサービスを使って、Amazon S3をローカルで使用できる環境を構築します。
MinIOはS3と互換性をもつので、aws sdk を用いたアクセスや、boto3を用いたpythonによる操作が可能です。
この記事に記載されているソースコードは以下のGitHubから入手することができます。
Docker Composeを用いたMinIOの構築
MinIOは公式からDocker imageが公開されています。
こちらを用いて、docker composeによる構築をおこないます。
docker-compose.yml
使用する docker-compose.yml
ファイルは下記の通りです。
minio:
image: minio/minio:latest
container_name: minio
environment:
MINIO_ROOT_USER: localid
MINIO_ROOT_PASSWORD: localpassword
entrypoint: bash
command: -c "/opt/bin/minio server /export --address :9999 --console-address :9001"
volumes:
- ./minio_data:/export # MinIOストレージの永続化
ports:
- '9000:9999'
- '9001:9001'
dockerコンテナの起動
docker-compose
コマンドを実行して、コンテナを起動します。
$ docker-compose up -d
Creating minio ... done
起動が完了すると、新しく minio_data
ディレクトリが作成され、このディレクトリがそのままバケットや階層と認識されます。
例として、minio_data ディレクトリの配下に次の階層構造を作成してみましょう。
docker-compose.yml
minio_data
└─ localbucket
└─ image_dir
├─ sample_image.jpg
└─ sample_image2.jpg
minio_data
直下に作成したディレクトリ localbucket
はバケットとして認識されます。上記の階層構造を作成したら、MinIOのコンソール上で認識されているか確認してみます。
http://localhost:9001にアクセスして、MinIOのコンソールを開きます。ログイン時のIDとパスワードは、docker-compose.ymlで定義した下記となります。
ID: localid
password: localpassword
下図のようにMinIOが作成した階層構造を認識できていることがわかります。
boto3を用いた、pythonによるS3 (MinIO) の操作
MinIOはS3と互換性をもつので、S3を操作するソースコードと同じものでMinIOを利用することができます。
pythonでS3を操作するには、boto3というライブラリが必要です。boto3のインストールはpipコマンドから行うことができます。
pip install boto3
それでは、pythonを用いてMinIOを操作してみます。先ほど作成したバケットに保存されているファイルの内容を取得してみます。
import boto3
BUCKET_NAME = 'localbucket'
if __name__ == '__main__':
s3 = boto3.resource(
service_name='s3',
endpoint_url='http://localhost:9000',
aws_access_key_id='localid',
aws_secret_access_key='localpassword',
region_name='')
bucket = s3.Bucket(BUCKET_NAME)
for obj in bucket.objects.all():
print(obj.key)
# 出力
image_dir/sample_image.jpg
image_dir/sample_image2.jpg
このように、S3を操作のと変わりなく、MinIOを利用することができます。