蛇ノ目の記

技術のことも。そうでないことも。

ローカル環境で動かせるS3互換のストレージminioを使ってみる

新年初ブログです。今年もよろしくお願いします。ことよろ。

ちなみに今年は雪山合宿に来ていて、そこでこれを書いている。

pyhack.connpass.com

TL;DR

  • S3互換のオブジェクトストレージminioというものがある
  • Dockerで動かせる
  • ローカル環境でS3を使う機能を動作確認したいときなどに便利

minio is 何

S3互換のオブジェクトストレージ。

min.io

Go言語で実装されているらしい。

github.com

ドキュメントはこちら。

docs.min.io

仕事でS3を使う機能をローカル環境で動作確認したくなり、「S3 ローカル環境」とか検索したら出てきた。日本語の解説記事としてはClassmethodさんのものがある。

dev.classmethod.jp

Dockerで使う

minioはGNU/Linux, MacOS, Windows, BSDなど幅広い環境にインストールすることができるが、今回は手軽に使いたいという気持ちでDockerによるインストールに触れる。Docker Hubのページはこちら

仕事ではDjangoのアプリサーバーのコンテナと同時に立ち上げたため、ここではdocker-composeによる起動について書く。

version: '2'
services:
    minio:
        image: minio/minio:latest
        container_name: my_minio
        ports:
            - "9000:9000"
        volumes:
            - ./data/minio:/data
        command: minio server /data
        environment:
            MINIO_SECRET_KEY: minioadmin
            MINIO_ACCESS_KEY: minioadmin

これをdocker-compose.ymlに書いて、$ docker-compose upするだけで起動する。簡単。 environment を指定することで任意の認証情報を設定できる。なお、minioadminは指定しない場合のデフォルト値。

起動して localhost:9000 (今回の場合)にアクセスするとログイン画面に遷移するので、認証情報を入れてログイン。

f:id:Nao_Y:20210122161631p:plain

右下のボタンからバケット作成とファイルアップロードができる。

f:id:Nao_Y:20210122161740p:plain

フォルダアイコンからパスを追加できる。

f:id:Nao_Y:20210122161859p:plain

boto3からアクセスできる

S3互換ということでboto3からのアクセスもできる。そのため、S3を使う機能をローカル環境で動作確認したいときに便利、という話。boto3.clientendpoint_urlにはローカルホストのアドレスを渡そう。

s3 = boto3.client(
    's3',
    aws_access_key_id=settings.AWS_ACCESS_KEY_ID,  # minioのACCESS_KEY
    aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,  # minioのSECRET_KEY
    endpoint_url='http://localhost:9000'
)