Minio
MinioはS3互換のオブジェクトストレージです
MinIO is a high performance object storage server compatible with Amazon S3 APIs
概要
- docker-composeでMinioを起動する
- boto3を使用してMinioのオブジェクトストレージにアクセスする
tree
.
├── docker-compose.yml
├── list_objects_sample.py
└─- .env
docker-compose.yml
version: '3'
services:
app:
image: python:3.7
container_name: my-app
working_dir: /var/www/app
volumes:
- app-volume:/var/www/app
depends_on:
- s3
tty: true
s3:
image: minio/minio
container_name: my-s3
volumes:
- s3-volume:/data
ports:
- "9001:9000"
command: ["--compat", "server", "/data"]
volumes:
app-volume:
driver: local
s3-volume:
driver: local
.env
AWS_ACCESS_KEY_ID=dummy_s3_access_key
AWS_SECRET_ACCESS_KEY=dummy_s3_secret_key
AWS_DEFAULT_REGION=us-east-1
AWS_S3_ENDPOINT_URL=http://s3:9000
.envを作っておくと、docker-composeが自動で環境変数に設定してくれます
list_objects_sample.py
import boto3
import os
s3_endpoint_url = os.getenv('AWS_S3_ENDPOINT_URL', None)
s3 = boto3.client('s3', endpoint_url=s3_endpoint_url)
res = s3.list_objects_v2(Bucket='bucket-name')
print(res)
boto3は環境変数AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGIONを使用します
endpoint_urlは環境変数で設定できないので、clientのパラメータとして設定します
本番環境ではAWS_S3_ENDPOINT_URLを設定しないことで、endpoint_url=Noneとなります
実行
docker-compose build
docker-compose up -d
# http://localhost:9001/minio/ にアクセスしてbucket作成、file登録する
docker run my-app python list_objects_sample.py