開発のためにローカルにもS3が欲しいというわがまま、MINIOが叶えてくれました

開発のためにローカルにもS3が欲しいというわがまま、MINIOが叶えてくれました

まさくに

まさくに

こんにちは。バックエンドエンジニアのまさくにです。

数年前に「Vagrantはどこに消えた?」などと思っていましたが、私もうダメ、認めざるをえない。Dockerのことを愛してしまった。もうDockerなしのWebサイト、Webサービス制作は考えられなくなってきました。Webに関わる多くの方がそうなのではないでしょうか。

ただ、本番環境をAWSで作ろうというとき(ECSを使うなどであれば話は別かもしれませんが)、「どうやって構成をローカルのDockerで再現しようか」と迷うリソースがあります。直近の案件ですと、S3が必要でした。

そこだけAWSで作っておいて、開発時につなぎにいくというのもなくはない。でも、できればローカルだけで構築して依存をなくしたい。そこだけステージングや本番と違うロジックなんかは使いたくない。いい方法ないかなぁ、ないかなぁと思ってですね、一生懸命、探しました。

わりとすぐに見つかったので、本日はDockerで簡単に動かせるS3のクローンにスタジオまで来てもらっています! それではどうぞー!

S3互換のMINIO

概要

探してみたところ、MINIOというソフトウェアを見つけました。このMINIOはS3に互換のあるオブジェクトストレージです。GOで作成されており、最初にリリースされたのは2016年2月のようです。知りませんでした。機能的にはS3のクローンにおさまらず、暗号化や独自のファイルシステムなどを備え、AWS SDKでも接続ができるとのこと。すごいな。

起動

公式ドキュメントを見ながらDockerで入れます。

$ docker run -p 9000:9000 minio/minio server/tmp/minio

すぐに下記のような情報が表示されました。起動したようです。

Endpoint:  http://172.17.0.2:9000  http://127.0.0.1:9000
AccessKey: RDGENDYW5WGHAYOTGT5M
SecretKey: VpulAXhwypwY1EAqpamO+ZQI5eT1y7azkD3uzsdL

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

Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://172.17.0.2:9000 RDGENDYW5WGHAYOTGT5M VpulAXhwypwY1EAqpamO+ZQI5eT1y7azkD3uzsdL

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

バケットを作る

AWS CLIでバケットを作ってみます。AWS CLIはあらかじめインストールしておいてください。先ほど表示された認証情報でprofileをまず作っておきました。

$ aws configure --profile minio_test
AWS Access Key ID : RDGENDYW5WGHAYOTGT5M
AWS Secret Access Key : VpulAXhwypwY1EAqpamO+ZQI5eT1y7azkD3uzsdL
Default region name :
Default output format :

それではバケットを作ります。本物のAWSへアクセスをするわけではないので、endpointの指定が必要です。

$ aws --endpoint-url http://127.0.0.1:9000 --profile minio_test s3 mb s3://minio-test-bucket
make_bucket: minio-test-bucket

作られたようです。

作ったバケットを確認する

下記コマンドでバケットの存在を確認できます。

$ aws --endpoint-url http://127.0.0.1:9000 --profile minio_test s3 ls
2018-05-24 18:49:45 minio-test-bucket

ちゃんとある。

オブジェクトをアップロードする

下記コマンドでMINIOへファイルをアップロードできます。

ito_masakuni@lig-mi % echo 'nemui no da' > nnd.txt
ito_masakuni@lig-mi % aws --endpoint-url http://127.0.0.1:9000 --profile minio_test s3 cp ./nnd.txt s3://minio-test-bucket
upload: ./nnd.txt to s3://minio-test-bucket/nnd.txt

管理画面について

ここでWeb管理画面からファイルを確認してみます。http://127.0.0.1:9000/ へアクセスするとAccess KeyとSecret Keyを聞かれますので、先ほどまでと同じものを入力してログインしてください。

超便利じゃないですか……。

オブジェクトを削除する

ファイルを削除します。

$ aws --endpoint-url http://127.0.0.1:9000 --profile minio_test s3 rm s3://minio-test-bucket/nnd.txt
delete: s3://minio-test-bucket/nnd.txt

削除されていますね。まあこの管理画面から削除してもいいんですけど。

誰かの仕事が誰かの仕事を支えている

MINIOを使えばオブジェクトストレージまで何の苦もなくローカル環境に構築することができます。さらにAWS SDKを使用できることから、本番環境と差異なくコードを書くことも可能です。一点、「EndPointを変更する」ことだけお気をつけください。

ほかにもElasticMQというSQSクローンがあり、こちらもDockerで問題なく動きましたし、開発も大変便利な時代になったのだと思います。ありがとう、世の中の天才開発者たち。でも僕の仕事時間が変わらないのはなぜでしょうか。

クローンと言えばマモーですね。僕もクローンが欲しいです。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

まさくに
まさくに バックエンドエンジニア / 伊藤 正訓

漢字で書くと正訓。バックエンドのエンジニアです。静岡と石川に住んだことがあり、現在は千葉に住んでいます。誰かが作ったシステムに対しては、正常系だけを通るように並列処理やデッドロックが起きそうな処理を避けて操作する職業病があります。好きな色は紫、好きなキーボードの位置は「i」、好きなご当地ヒーローはセッシャー1です。

このメンバーの記事をもっと読む
バックエンドへの道 | 58 articles
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL