MinIO on Docker

Docker Compose で MinIO を動作させたい。

動作させた MinIO コンテナに対して S3 API を使って何らかの操作をしたい。

MinIO 起動

server コマンドに console-address オプションを指定してコンソール画面に 9001 番ポートを割り当てている。

ルートのユーザーとパスワードを環境変数で指定している。

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

docker compose コマンドで起動させると、ブラウザからコンソールへアクセスできる。

ルートのユーザー名、パスワードを入力してログインできる。

後の API 操作で使用するバケットを作成しておく。

S3 API 操作

バケット一覧を取得する API を実行して、example バケットが取得できるか確認する。

import { S3 } from "@aws-sdk/client-s3";
import { fromEnv } from "@aws-sdk/credential-providers";

const initEnv = () => {
  process.env.AWS_ACCESS_KEY_ID = "root";
  process.env.AWS_SECRET_ACCESS_KEY = "password";
};

const client = new S3({
  credentials: fromEnv(),
  region: "us-west-2",
  endpoint: "http://localhost:9000",
});

initEnv();

client
  .listBuckets({})
  .then((data) => {
    console.log(data);
  })
  .catch((error) => {
    console.error(error);
  });
% npx ts-node index.ts
{
  '$metadata': {
    httpStatusCode: 200,
    requestId: '17C851EF64A23053',
    extendedRequestId: 'dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8',
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  Buckets: [ { Name: 'example', CreationDate: 2024-04-21T14:28:52.674Z } ],
  Owner: {
    DisplayName: 'minio',
    ID: '02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4'
  }
}

想定通り、example バケットが取得できている。

まとめ

全ての API を試していないが S3 互換なのはかなり嬉しい。Local 動作確認、テストでの S3 アクセスに重宝しそう。