S3互換のオブジェクトストレージminioを試す

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSを利用するシステムを開発するときに、まだリソースを用意してないけどちょっと動かしてみたいな、ということが稀によくありますよね。 最近S3を使う機能の開発でそういう状況になったので、S3互換オブジェクトストレージのminioを試してみました。

簡単に動かすことができたので今回は導入方法とaws-cliからの操作方法を紹介します。

検証環境

  • Docker: 18.06.0-ce
  • minio: 2018-08-02T23:11:36Z
  • aws-cli: 1.16.1

minioとは

minioはプライベートクラウドでの利用を想定した分散オブジェクトストレージです。Go言語実装で、ソースはGitHubのリポジトリで確認できます。

インストール

各環境向けのバイナリとDockerイメージで配布されています。

今回はDockerコンテナで試してみます。 Minio Docs - Minio Quickstart Guide の手順を参考に起動してみましょう。本記事ではバージョンアップによる影響を避けるためリリースタグ 2018-08-02T23:11:36Z を明示します。また、コンテナ名を minio にします。

$ docker container run -d --name minio -p 9000:9000 minio/minio:RELEASE.2018-08-25T01-56-38Z server /data

起動できました、簡単ですね! http://localhost:9000 にアクセスしてminioの管理コンソールを開いてみましょう。

アクセスキーとシークレットキーを入力してログインするようになっています。 Minio Docker Quickstart Guide によるとどちらのキーも自動生成されるとのことなので、ログを確認してみましょう。

$ docker container logs minio
Endpoint:  http://127.0.0.1:9000
AccessKey: <<MINIO_ACCESS_KEY>>
SecretKey: <<MINIO_SECRET_KEY>>

Browser Access:
   http://http://127.0.0.1:9000

Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://127.0.0.1:9000 9C3ZRL4ESZGMZT3ICEHA AdMzEKn9ZHAOD8GGAzzpQTVz5owDR5P9cUq4DGEd

Object API (Amazon S3 compatible):
   Go:         https://docs.minio.io/docs/golang-client-quickstart-guide
   Java:       https://docs.minio.io/docs/java-client-quickstart-guide
   Python:     https://docs.minio.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.minio.io/docs/dotnet-client-quickstart-guide

MINIO_ACCESS_KEYMINIO_SECRET_KEY にキーが表示されます。今回は試しませんが、下記の環境変数を指定してコンテナを起動すると、好きなアクセスキー・シークレットキーを指定することができます。

変数名 内容
MINIO_ACCESS_KEY アクセスキー
MINIO_SECRET_KEY シークレットキー

試してみる

コンソールから操作する

画面右下のボタンを押してバケットを作成します。

ボタンが3つ表示されるので、中央のボタンを押します。

バケット名を入力したらEnterキーを押して作成します。

左側のペインから作成したバケットを選択します。

画面右下のボタンを押してファイルをアップロードします。今回は試しにテキストファイルを作ってアップロードしてみます。

$ echo 'Hello, minio!' > hello-minio.txt

今度は一番上のボタンを押します。

作成したファイルを選びます。

画面上部に成功のメッセージが表示されればアップロード完了です。

aws-cliから操作する

aws-cliからminioを操作してみます。まず環境変数でアクセスキーとシークレットキーを設定します。

# 一時的にminioのアクセスキー/シークレットキーを使用する
$ export AWS_ACCESS_KEY_ID=<<MINIO_ACCESS_KEY>>
$ export AWS_SECRET_ACCESS_KEY=<<MINIO_SECRET_KEY>>

そのままだとAmazon S3にアクセスしてしまうので、 --endpoint-url オプションを指定してminioにアクセスするようにします。

# aws-cliでminioを操作する
$ aws --endpoint-url http://127.0.0.1:9000 s3 ls
2018-08-30 17:59:45 minio-bucket

$ aws --endpoint-url http://127.0.0.1:9000 s3 ls s3://minio-bucket/
2018-08-30 17:59:45         14 hello-minio.txt

$ aws --endpoint-url http://127.0.0.1:9000 s3 cp s3://minio-bucket/hello-minio.txt .
download: s3://minio-bucket/hello-minio.txt to ./hello-minio-dl.txt

$ cat hello-minio-dl.txt
Hello, minio!

問題なく動きましたね!

おわりに

今回はminioを導入して、aws-cliで操作できることを確認しました。Dockerで簡単に構築できるのがとても魅力的ですね。 今回は試しませんでしたが、データの保存先をマウントできるのでフィクスチャを用意してテストするといった活用もできそうです。 便利そうなのでローカル環境でのテストを中心に使っていきたいと思います!