たいきゅんの日記

ITエンジニアの積み上げ日記

minioに入門してみた。

今回は、開発環境でいつも動いているけど何者か分からなかったminio(ミニオ)について調べてみようと思います。



minioとは

分散オブジェクトストレージです。イメージとしてはS3に似たもので、オブジェクトストレージを構成するためのソフトウェアです。最大5TBまで保存できGo言語で実装されています。


特徴

1. S3の代わりをローカルで実現できる。

minioはS3互換のAPIが実装されているため、S3の開発をローカル環境で行う際に代わりにminioを使用することができます。つまり本番環境ではAmazon S3・開発時には、MinIOで開発・テストする。といった開発が可能です。




2. Dockerとの相性

Docker環境で動作確認することが可能でDockerとの相性がいいこともminioの特徴。




3. AWSの動きを確認できる

さらにaws-cliやコンソールから操作することが可能でaws-cliの動きの結果をminioで確認することができるのも特徴の一つです。




4. 分散構成を取れる

Minioは1台でも実行可能だが、分散構成も取れます。分散構成の場合、オブジェクトは自動的に分散・複製されて保存され、ストレージ破損に備えることができます。

一方で後からノードやストレージサイズを増やすことができない。つまり予め決まったサイズで運用をするか、新たなMinioクラスタを構築して、データの保管場所を調整するなどの対応が必要になります。



Docker環境サンプル

Docker環境でminioを動かすためのサンプルを紹介します。



docker-compose.yml

version: '3.9'

services:
  minio:
    image: quay.io/minio/minio:latest
    environment:
      MINIO_ROOT_USER: root
      MINIO_ROOT_PASSWORD: password
    command: server --console-address ":9001" /data
    ports:
      - 9000:9000
      - 9001:9001


この状態でbuild upしてもらいhttp://localhost:9001/ にアクセスします。
上記で設定したMINIO_ROOT_USER MINIO_ROOT_PASSWORDを入力することでログインができます。

AWS CLIの設定

(上記Docker環境でAWS CLIを使用することを想定)

xxxxxxxxxx minio-demo % aws configure
AWS Access Key ID [None]: root
AWS Secret Access Key [None]: password
Default region name [None]: 
Default output format [None]:

上記docker-compose.ymlで設定した値を設定することでAWS CLIを使用することができます。

バケット操作(aws-cli)

1. バケット作成

xxxxxxxxxxxx % aws --endpoint-url http://localhost:9000 s3 mb s3://miniotest
make_bucket: miniotest

(上記docker-compose環境で作成された環境前提)
上記コマンドで`miniotest`というバケットが作成されます。バケットはフォルダとは違って階層的にフォルダを掘っていくことはできないです。
コマンドのエンドポイントは9000番、ページのエンドポイントは9001番になるので注意。


2. バケット一覧

xxxxxxxxxxxx % aws --endpoint-url http://localhost:9000 s3 ls

2022-09-24 16:30:51 miniotest
2022-09-24 16:27:13 test-bucket


3. ファイルアップロード

xxxxxxxxxxxx  % aws --endpoint-url http://localhost:9000 s3 cp testfile s3://miniotest/testfile_from_local
upload: ./testfile to s3://miniotest/testfile_from_local

上記コマンドで、カレントディレクトリにあるtestfileを、miniotestバケットにtest_from_localという名前でアップロードすることができます。


4. ファイルダウンロード

xxxxxxxxxxxx  % aws --endpoint-url http://localhost:9000 s3 cp s3://miniotest/testfile_from_local testfile_from_s3
download: s3://miniotest/testfile_from_local to ./testfile_from_s3

上記コマンドで、miniotestバケットにあるtestfile_from_localを、カレントディレクトリにtestfile_from_s3としてダウンロードできます。

5. ファイルの削除

xxxxxxxxxxxx  % aws --endpoint-url http://localhost:9000 s3 rm s3://miniotest/testfile_from_local
delete: s3://miniotest/testfile_from_local

上記コマンドでminiotestバケットのtestfile_from_localを削除できます。


6. バケットの中身一覧表示

xxxxxxxxxxxx  % aws --endpoint-url http://localhost:9000 s3 ls s3://miniotest1                                                            
2022-09-24 17:02:30      69353 testXxx.png
2022-09-24 16:58:15     189249 test100.png

7. バケットの削除

xxxxxxxxxxxx  % aws --endpoint-url http://localhost:9000 s3 rb s3://miniotest
remove_bucket: miniotest

上記コマンドで、miniotestバケットを削除できます。

まとめ

実際に動作確認してみると、S3と相違ない開発体験を得ることができました。
開発環境でS3を使うことに抵抗がある方にとってminioは良い選択肢になると思いました。
最後まで読んで頂きありがとうございました。