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]:
バケット操作(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は良い選択肢になると思いました。
最後まで読んで頂きありがとうございました。