@unikvs/s3.node
Node.js で S3 互換オブジェクトストレージに保存する @unikvs/s3.node の使い方を説明します。
概要
@unikvs/s3.node は、S3 互換オブジェクトストレージにバイト配列を保存する Node.js 専用プラグインです。Node.js 専用
インストールは次のように行います。
npm install @unikvs/s3.node @aws-sdk/client-s3 @aws-sdk/lib-storagepnpm add @unikvs/s3.node @aws-sdk/client-s3 @aws-sdk/lib-storageyarn add @unikvs/s3.node @aws-sdk/client-s3 @aws-sdk/lib-storagebun add @unikvs/s3.node @aws-sdk/client-s3 @aws-sdk/lib-storagenub add @unikvs/s3.node @aws-sdk/client-s3 @aws-sdk/lib-storageaube add @unikvs/s3.node @aws-sdk/client-s3 @aws-sdk/lib-storage使い方
ストレージクラスは S3 です。
import { S3 } from "@unikvs/s3.node";
new S3(bucket: string, config: S3ClientConfig = {}, options: S3StorageOptions = {})
| 引数 | 型 | 説明 |
|---|---|---|
bucket |
string |
保存先のバケット名です。すべての操作で使います。 |
config |
S3ClientConfig |
S3Client に渡す設定です。既定値は空オブジェクトです。リージョンや認証情報などを含めます。 |
options |
S3StorageOptions |
ストレージの動作設定です。既定値は空オブジェクトです。 |
options.allowRepair |
boolean |
書き戻しによる書き込みを許可するかどうかです。既定値は false です。 |
構築済みの S3Client を渡す引数や、プレフィックス指定はありません。キー変換や使い分けが必要なら、キーに含めるかバケットごとにインスタンスを作ってください。
ライフサイクルは次のとおりです。生成直後は isOpen が false で、open() すると true になります。close() で破棄して false に戻ります。
import { UniKvs } from "unikvs";
import { S3 } from "@unikvs/s3.node";
const storage = new S3("my-bucket", {
region: "ap-northeast-1",
});
const kvs = UniKvs.config()
.appendStorage(storage)
.create();
オブジェクト配置
キーはオブジェクトキーにそのまま対応します。
clear はバケット内のすべてのオブジェクトを削除します。プレフィックスで絞り込みません。UniKVS 専用のバケットを使ってください。共有していると他のデータも消えます。
ストリームとマルチパート
大容量データは単発の write ではなく書き込みストリームを使ってください。マルチパートアップロードに対応します。
const writable = storage.getWritable({ key, vars, signal });
パートサイズは vars で指定します。バイト単位の正の整数で指定し、未指定なら既定値に従います。
signal が中断済みなら開始せずに StorageAbortedError を投げます。
読み取りストリームは次のように取得します。
const readable = await storage.getReadable({ key, signal });
大きなオブジェクトも複数チャンクで読み取れます。
エラー
| クラス | 投げる条件 |
|---|---|
InvalidPartSizeError |
vars のパートサイズが正の整数でない場合に getWritable が投げます。@unikvs/core の共通エラーです。 |
StorageAbortedError |
getWritable の signal が中断済みの場合に投げます。@unikvs/core の共通エラーです。 |
- 存在しないキーの
readはエラーで失敗します。必要なら事前にexistsを使います。 - 存在しないキーの
deleteはエラーになりません。
使用例
S3 互換ストレージへの最小構成例です。エンドポイントや認証情報はダミー値で、MinIO などへの接続を想定しています。バケットは事前に作っておきます。
import { S3 } from "@unikvs/s3.node";
const storage = new S3("my-bucket", {
endpoint: "http://127.0.0.1:9000",
region: "ap-northeast-1",
credentials: {
accessKeyId: "minioadmin",
secretAccessKey: "minioadmin",
},
forcePathStyle: true,
});
storage.open();
const signal = AbortSignal.timeout(30_000);
const key = "hello.txt";
const data = new TextEncoder().encode("Hello S3");
await storage.write({ key, data, signal });
const loaded = await storage.read({ key, signal });
console.log(new TextDecoder().decode(loaded));
storage.close();