はじめに
最近、開発のためにMinIOを導入したが、Node.jsのaws-sdk
でMinIOを操作するサンプルコードがなかなか見つからなくて少し苦労したので、備忘録のために投稿します。
(AWS CLIやNode.jsの@aws-sdk/client-s3
でMinIOを操作するサンプルはたくさんある)
前半はMinIOの導入方法で、本題は後半の Node.jsでMinIOを操作(本題)です。
MinIOを導入
1. docker-compose.yamlファイルを用意する
docker-compose.yaml
version: '3.9'
services:
minio:
image: quay.io/minio/minio:latest
container_name: example-minio
environment:
MINIO_ROOT_USER: root
MINIO_ROOT_PASSWORD: password
command: server --console-address ":9001" /data
ports:
- 9000:9000
- 9001:9001
2. コンテナを起動
docker-compose up
これでMinIOが http://localhost:9000 で稼働する。
また、管理画面が http://localhost:9001 で稼働する。
MinIO管理画面にログイン
ブラウザで http://localhost:9001 にアクセスすると下記の画面が表示される。
Username/Passwordはdocker-compose.yaml
に設定したroot/password
Node.jsでMinIOを操作(本題)
以下のコードでMinIOにアップロードしたファイルをダウンロードできる
test.js
const AWS = require('aws-sdk');
const s3 = new AWS.S3({
accessKeyId: "root",
secretAccessKey: "password",
endpoint: "http://localhost:9000",
s3ForcePathStyle: 'true',
signatureVersion: 'v4',
})
const bucketName = "test"
const fileName = "sample.png"
const config = { Bucket: bucketName, Key: fileName }
(async () => {
const file = await s3.getObject(config).promise()
const { Body } = file
// 取得したファイルをBase64に変換する
const base64Result = Body.toString('base64');
})
実行方法
node test.js
おわりに
昔は他のS3互換のOSSをローカルの開発に利用していたが、管理画面があるMinIOが圧倒的に便利と感じた