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 コマンドで起動させると、ブラウザからコンソールへアクセスできる。
ルートのユーザー名、パスワードを入力してログインできる。
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 アクセスに重宝しそう。