Blog

S3互換のオブジェクトストレージMinIOを利用したローカル開発環境のサンプル

はじめに

はじめまして!基幹システムグループの田澤です。普段はNifMoの運用を担当しています。 みなさんはS3を利用したアプリケーションを作成する際に開発環境をどのように構築していますか?
endpointにawsのs3を指定するのは楽ですが少額とはいえお金がかかるので、ローカルのほうが検証しやすいですよね。
今回の記事では、ローカルS3の開発環境のサンプルを作ってみました!

サンプルでできること

Pythonのコンテナからminio(S3)に対してAWS SDKでアクセスし、以下の事ができます
  • バケット作成と削除
  • ファイル作成と削除と内容取得

環境

  • Microsoft Windows [Version 10.0.19044.2604]
  • Docker version 20.10.11, build dea9396
  • docker-compose version 1.29.2, build 5becea4c

ファイル構成

ファイル内容


docker-compose.yml

各サービスの説明:
  • Python
  • minio
    • 使用しているコンテナイメージ: https://hub.docker.com/r/minio/minio/
    • ports
      • minioのデフォルトポートは9000と9001です。僕の環境だと9000番ポートは競合するため、9090と9091を割り当てています。
    • environment
      • minioにアクセスする際のキーを環境変数として指定しています
  • createbuckets
    • 使用しているコンテナイメージ: https://hub.docker.com/r/minio/mc/
    • entrypoint
      • until ~~ の部分では、minioに接続できるまで待機しています。ここでは、minioにアクセスする際のキーを利用し、接続しています。
      • 接続できしだい、default-bucketの作成を行っています。

python.Dockerfile

Pipfile

create_bucket.py

boto3.resourceでは、minioの環境変数で決めたMINIO_ROOT_USER、MINIO_ROOT_PASSWORDを指定しています。

create_file.py

read_file.py

delete_file.py

delete_bucket.py

動作確認

docker-compose.ymlがあるディレクトリで以下コマンドを打ちます コンテナが起動したら以下を確認します。
  • http://127.0.0.1:9091/ にアクセス
  • docker-compose.yml内で指定しているMINIO_ROOT_USER、MINIO_ROOT_PASSWORDでログイン
ログインすると以下のような画面が表示されるはずです。
その際にdefault-bucketが作成されていることを確認しましょう。
これはdocker-compose.ymlのcreatebucketsで作成されたバケットになります。
画面確認ができたので、次はpythonコンテナに入り、サンプルソースを実行していきます。

pythonコンテナに入りpipenv shellをする

create_bucket.pyを実行しminioのweb画面からtest-bucketが作成されていることを確認する

http://127.0.0.1:9091/buckets
にアクセスし、以下のようにtest-bucketが作成されていることを確認する

create_file.pyを実行しminioのweb画面でtest-fileが作成されていることを確認する

http://127.0.0.1:9091/buckets/test-bucket/browse にアクセスし、以下のようにtest-fileが作成されていることを確認する

read_file.pyを実行しtest-fileの中身を読み込めることを確認する

delete_file.pyを実行し、minioのweb画面でtest-fileが削除されていることを確認する

http://127.0.0.1:9091/buckets/test-bucket/browse にアクセスし、以下のようにtest-fileが削除されていることを確認する

delete_bucket.pyを実行し、minioのweb画面でtest-bucketが削除されていることを確認する

http://127.0.0.1:9091/buckets にアクセスし以下のようにtest-bucketが削除されていることを確認する
長くなりましたが、以上でサンプルの実行ができました。

おわりに

今回はMinIOを利用したローカル開発環境のサンプルを作成しました。
ブログ投稿は初めてなのでお手柔らかにお願いします!

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!