3回連続でMinIOネタになっちゃった。
MinIOではmc
というCLIを提供していることを知ったので試してみた。
詳しい使い方はこちらに書いてある。
MinIO | MinIO Client Quickstart Guide
事前準備:Minio Serverを起動しておく
dockerを用いて手元にMinIO Serverを立てておく。
詳しくは過去記事 MinIOを触ってみた - rsym’s diary を参照。今回の記事ではここへ向けてmc
を実行する。
$ docker run -d --name minio_container -p 9000:9000 minio/minio server /data fc35d67f860df59715922eb1dff6ed60c8d1f8941d59032a1064907796883848 $ docker ps -f name=minio_container CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fc35d67f860d minio/minio "/usr/bin/docker-ent…" 33 seconds ago Up 31 seconds 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp minio_container
MinIO Clientのインストール
Mac(Homebrew)、Linux(Binary)、Windows(Binary)、Dockerといろんな環境で利用できるように用意されている。 goで記述されたソースからインストールすることもできる。 今回はMac(Homebrew)を利用してみる。
$ brew install minio/stable/mc
エイリアスの設定
次に、エンドポイントやアクセスキーなどの情報にエイリアスを付与する。
mc
ではエイリアスを用いてオブジェクトストレージへアクセスする。
コマンドの構文は以下の通り。
mc alias set <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> --api <API-SIGNATURE> --path <BUCKET-LOOKUP-TYPE>
実際に設定してみる。
デフォルトのアクセスキーでMinio Serverを起動したので、アクセスキーはminioadmin:minioadmin
である。
$ mc alias set minio http://127.0.0.1:9000 minioadmin minioadmin mc: Configuration written to `/Users/<username>/.mc/config.json`. Please update your access credentials. mc: Successfully created `/Users/<username>/.mc/share`. mc: Initialized share uploads `/Users/<username>/.mc/share/uploads.json` file. mc: Initialized share downloads `/Users/<username>/.mc/share/downloads.json` file. Added `minio` successfully.
エイリアスは~/.mc/config.json
というファイルにjsonで出力される。
上記コマンドで設定したエイリアスはminio
という名前で記述されている。
minio
以外にも、gcs
、local
、play
、s3
という4つのエイリアスがデフォルトで記述されている。
エイリアスを設定しておけば、GCSやS3でmc
を利用することもできる。
$ cat ~/.mc/config.json { "version": "10", "aliases": { "gcs": { "url": "https://storage.googleapis.com", "accessKey": "YOUR-ACCESS-KEY-HERE", "secretKey": "YOUR-SECRET-KEY-HERE", "api": "S3v2", "path": "dns" }, "local": { "url": "http://localhost:9000", "accessKey": "", "secretKey": "", "api": "S3v4", "path": "auto" }, "minio": { ⬅これが設定したエイリアス "url": "http://127.0.0.1:9000", "accessKey": "minioadmin", "secretKey": "minioadmin", "api": "s3v4", "path": "auto" }, "play": { "url": "https://play.min.io", "accessKey": "***********************", "secretKey": "***********************", "api": "S3v4", "path": "auto" }, "s3": { "url": "https://s3.amazonaws.com", "accessKey": "YOUR-ACCESS-KEY-HERE", "secretKey": "YOUR-SECRET-KEY-HERE", "api": "S3v4", "path": "dns" } } }%
~/.mc/config.json
以外に~/.mc/share/uploads.json
と~/.mc/share/downloads.json
というファイルも生成されている。
これらはmc
コマンドでアップロード・ダウンロード用の共有URLを生成したときに、そのURLが記録されるファイルのようだ。
download.json
の出力例については後述する。
いろいろ実行してみる
各実行コマンドのminio
の部分がエイリアスである。
<alias>/<bucket>/path/to/<object>
というふうに記述することで、目的のバケット・オブジェクトを参照できる。
バケット作成
$ mc mb minio/sample-bucket
Bucket created successfully `minio/sample-bucket`.
オブジェクトのPUT
$ mc cp sample-object minio/sample-bucket/ 0 B / ? ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓ $ mc cp sample-object2 minio/sample-bucket/ 0 B / ? ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓
バケットとオブジェクトの参照
$ mc ls -r minio/ [2021-06-19 16:43:30 JST] 0B sample-bucket/sample-object [2021-06-19 16:44:26 JST] 0B sample-bucket/sample-object2
特定のオブジェクトをダウンロードするための共有URLを生成
URLは~/.mc/share/downloads.json
にも記録される。
$ mc share download minio/sample-bucket/sample-object URL: http://127.0.0.1:9000/sample-bucket/sample-object Expire: 7 days 0 hours 0 minutes 0 seconds Share: http://127.0.0.1:9000/sample-bucket/sample-object?X-Amz-Algorithm=..................... $ cat ~/.mc/share/downloads.json { "version": "1", "shares": { "http://127.0.0.1:9000/sample-bucket/sample-object?X-Amz-Algorithm=.....................": { "share": "http://127.0.0.1:9000/sample-bucket/sample-object", "versionID": "", "date": "2021-06-19T08:04:29.236446Z", "expiry": 604800000000000 } } }%
ユーザ作成
ACCESSKEY:SAMPLEUSER
、SECRETKEY:SAMPLEKEY
として生成する。
$ mc admin user add minio SAMPLEUSER SAMPLEKEY
Added user `SAMPLEUSER` successfully.
$ mc admin user list minio
enabled SAMPLEUSER
使ってみての所感
S3だとs3cmd
やaws s3
を利用することもあるが、これらのCLIと遜色ない使いやすさだと感じた。
brewで入れてaliasを入れればすぐに利用できるし、aliasがあることで複数のバケットを使い分けられるのも便利。
s3cmd
やaws s3
でも使い分けはできるけど、mc
のほうがよりコンパクトに記述できる点は個人的にいいなと感じた。
ただし、さすがにS3やGCSの全機能をカバーしているわけではなさそうなので(CloudFrontディストリビューションの利用とか)、S3/GCSのCLIの完全な代替えとまではいかなそう。 それでも使い勝手がかなりいいので、積極的に利用してみようかなと思った。
余談:MinIOの遊び環境
設定されているのエイリアスのうちplay
というのは https://play.min.io/ という遊び環境として利用できるMinIO Serverへのエイリアスである。
バケット作成、オブジェクトのPUT/DELETE、ユーザ管理、など自由に利用できる。
とりあえずMinIOを触ってみたいという人は、この環境を活用するのも手だろう。
ただし、文字通り「遊び環境」であり、だれでも自由に利用できる環境である。
第三者が用意したバケットやオブジェクトなども参照できるし、自身が作成したものも第三者から参照できるのでその点は要注意。
たとえば mc ls play
と実行するだけで既存バケットやオブジェクトを参照できる。
用途を限定した上で活用しよう。