概要
Minio (https://www.minio.io/) は AWS の S3 と互換の API を持ったオブジェクトストレージ。
golang で書かれており実行ファイル 1つを起動するだけでストレージサーバーになるという気軽さが売り。
分散化は必須では無くて、その分簡単にオブジェクトストレージが構築できるのでスモール環境で利用したり、S3 利用アプリケーション開発時のローカルテスト用に使うと便利。
久しぶりに触ってみたら案外良い感じに仕上がっていたのでお勧め記事を書くことにした。
Minio サーバーの起動
インストール
公式サイトから wget 等でダウンロードするか、go でビルド。
go get -u github.com/minio/minio
コマンドラインから
特に準備は必要なく、保存先ローカルストレージパスを指定して minio を起動するだけ。
起動時コンソールにアクセスキーとシークレットキー、リージョン名が表示されるのでメモしておく。
minio server /mnt/store
bind を指定するには --address
スイッチを指定する。指定の書式は IP:PORT
で省略時のデフォルト値は :9000
。
minio server --address 192.168.0.1:9000 /mnt/store
Docker コンテナで起動
コンテナでの起動が最近のお勧めパターンらしい。
docker run -p 9000:9000 -d --name minio minio/minio server /export
引数(minio/minio 部分以降)は minio にそのまま渡されるので変更可能だけれども、通常このままでOK。
この例だと /export はコンテナ内ファイルシステムなので実際は永続化のために /export を volume でどこかに配置することになると思う。
Docker のコンソールログにアクセスキーとシークレットキー、リージョン名が表示されるので表示させてメモしておく。
docker logs minio
最近のインテルCPUを搭載したミドルランク以上な NAS では仮想化環境として Docker コンテナを実行できるものがある。(QNAP や Synology など)
そういった NAS の上で Minio コンテナを起動すると NAS のストレージ部分をマウントして使えてとても魅力的なシステムとなる。
Minio を利用するクライアントサイド
ブラウザUI
起動後 API のアドレスにブラウザでアクセスするとファイル管理ができる UI が表示される。
ファイルのアップロード、ダウンロード、削除とかがここでできるのでこれだけでも十分有用だったりする。
アクセス時の認証にアクセスキーとシークレットキーを聞かれるので入力する。
複数アカウントに対応しているわけではないので、そういう意味でも簡易 UI として捉えるのが良い。
cli クライアント
コマンドライン上からファイルをコピー等管理するために mc (minio-client) という名前のコマンドが用意されている。
昔から Linux を使っている人は Midnight Commander (mc) とコマンド名が重なっていて気になるかもしれない。
mc も go で書かれているので実行ファイル 1つだけのお手軽さ。
実行の際には ~/.mc/config.json
の設定が必要。ここにアクセス先サーバーとアクセスキー等を「サーバー名」毎に予め設定しておく。
{
"version": "8",
"hosts": {
"(任意のサーバー名)": {
"url": "http://(サーバーのアドレスとポート):9000/",
"accessKey": "(minio 起動時に表示されるアクセスキー)",
"secretKey": "(minio 起動時に表示されるシークレットキー)",
"api": "S3v4"
}
}
}
config ファイルを直接編集しなくても mc コマンドで追記することもできる。
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> <API-SIGNATURE>
S3 サーバーも記述できるので利用するサーバーを複数登録しておいてサーバー名で分別しながら使う事が可能。
サーバー名やバケットはパス名として与える形になる。
mc ls (サーバー名)/(バケット名)/(ファイルパス)
これまで S3 アクセスの cli は s3cmd
を好んで使っていたけれども、mc はそれに近い感じだったので乗り換えることにした。
S3 互換なので当然 AWS cli や s3cmd も使えるので、お好みで選択する。
Minio SDK
公式に存在している Minio SDK は go/java/node/python となっている。
といっても AWS SDK の S3 も使えるのでそれ以外のプログラミング言語(rubyとか)でも困ることは無い感じ。
product 環境が S3 を指向しているとしたら最初から AWS SDK を使う場面が多いかもしれない。
使いどころ
オブジェクトストレージはファイルシステムと違って疎結合なのだけれども、それゆえにマシンや環境に依存しない形でファイルストアしたい時には有用ではないかと考える。
常に悩まされ続ける Docker の永続ストレージ問題だけれども、マイクロサーバーアーキテクチャや環境依存性を考慮すると Volume Driver に依存するより API 経由でのやりとりの方が簡潔になったりする。
読み書きが頻繁なシステムに適用はできないけれども、日々データを収集し続けて蓄積して行くようなシステムではオブジェクトストレージの方が簡素に構成できる。
といったわけで使い道が見つかり次第なのだけれども、それが見つかると便利かつお手頃なので気軽に試して貰いたい次第。