はじめに
オブジェクトストレージとかS3使えばいいっしょとか思っていたんですが、
開発環境を作ったときに開発者一人ひとりにS3のバケット切って管理してもらうとか、
まあめんどくさくいつか絶対共有で使うバケットができてしまうなって思っており、何かないかなって探してたらMinioを見つけた。
Minioとは
公式ページから引用すると
Minio is a distributed object storage server built for cloud applications and devops.
Minioは、クラウドアプリケーションとdevops用に作られた分散オブジェクトストレージサーバーです。
他にもなんか色々書かれてて気になったところで言うと、
- Amazon S3 v4 APIの実装してあるからAWS CLIとか使える
- ライセンスはApache License 2.0
- Goで書いたから軽量でいい感じ
スクリーンショット
ログイン画面
WEB UI
サーバ構築
クイックスタートを参考に立ててみた。
僕はdockerが大好きなのでdockerで試すことにした。
大好きな理由はローカルの環境を汚さないことと、共有が楽だからである。
クイックスタートに書かれてる内容は下記である。
しかし、アクセスキーが立ち上げるたびに違ったりすると開発時にはこまるので固定化する方法を探すことにした。
$ docker pull minio/minio
$ docker run -p 9000:9000 minio/minio server /export
上記にポートの変更とバックグラウンド実行とアクセスキーの固定とデータの永続化を追加して上げると下記になる。アクセスキーとシークレットキーはAWSのサンプル用のキーと合わせた。実際に実行する場合は環境変数などに埋めて渡したり docker secret
コマンドを使ったりするべきだと思う。
$ docker run -p 8080:9000 \
-d \
-e MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE \
-e MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY \
-v "/mnt/export/minio:/export" \
-v "/mnt/config/minio:/root/.minio" \
minio/minio server /export
あとは表示された情報でアクセスするだけで動作が確認できる
(Browser Accessはdocker hostのip+port番号に読み替える必要がある)
Endpoint: http://172.100.0.1:9000 http://127.0.0.1:9000
AccessKey: AKIAIOSFODNN7EXAMPLE
SecretKey: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Region: us-east-1
SQS ARNs: <none>
Browser Access:
http://172.100.0.1:9000 http://127.0.0.1:9000
AWS CLIで操作
公式のドキュメント参照すると
やること
- Minio Serverを立てる(上でやった)
-
AWS CLIインストール(
$ pip install awscli
) - configure設定
というわけでconfigureの設定のみです。
direnv
を使っているので好きなディレクトリで$ direnv edit .
をしてやりたいところですが、direnv
説明がめんどくさいのでコマンドベースで設定します。
$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
$ export AWS_DEFAULT_REGION=us-east-1
以上。
あとはコマンドを実行していくだけです。
$ aws --endpoint-url http://192.168.99.100:8080/ s3 mb s3://test1
make_bucket: test1
$ aws --endpoint-url http://192.168.99.100:8080/ s3 ls
2017-05-08 18:54:37 test1
$ aws --endpoint-url http://192.168.99.100:8080/ s3 cp hogehoge.txt s3://test1
upload: ./hogehoge.txt to s3://test1/hogehoge.txt
$ aws --endpoint-url http://192.168.99.100:8080/ s3 ls s3://test1
2017-05-08 18:54:37 6 hogehoge.txt
$ aws --endpoint-url http://192.168.99.100:8080/ s3 rm s3://test1/hogehoge.txt
delete: s3://test1/hogehoge.txt
$ aws --endpoint-url http://192.168.99.100:8080/ s3 rb s3://test1
remove_bucket: test1
見ての通りAWS CLIのコマンドがそのまま使えるので(要endpoint-url)巷にあるawsライブラリのほとんどがそのまま使えると思われる(未検証)
良いところ
- 構築ワンコマンド
- AWS CLIで操作できる(他のクライントも動く)
- 一時的にシェアー用のリンクを生成できる
- ファイルをおいたとか削除したイベントが取得できるみたいなのでhookしたりできるみたい
良くないところ
調査不足感が否めないです。
- IAMユーザー的なのが複数用意できない?
- バケットごとでユーザーによるアクセス制限できない?
- 分散の設定調べてない
まとめ
気軽に試せて楽しい。開発用途ぐらいならこれぐらいできればよさそう。
間違っているところなどあればコメントや編集リクエスト送っていただけると。