maybe daily dev notes

私の開発日誌

TIL: AWS SDK for JavaScript v3 で s3.GetObject する最新の方法

最近はもっぱらNode.jsのAWS SDKはv3を使っているのですが、一つ大きな不満がありました。 それは s3.GetObject がv2よりも使いづらかった点です。ユーザーはS3のファイルを読み込むために ReadableStream をなめていくコード () を自分で書く必要がありました。

これが毎回必要になるため地味に面倒で、SDK v2に戻るか…と思案した人もいたのではと思います。

この面倒ですが、今は過去のものになりました! SDK v3公式にReadable Streamをstring型に変換する関数が追加されました。

コード

ということで、最新のAWS SDK v3によるS3上ファイルの取得方法は以下です:

import { S3, GetObjectCommand } from '@aws-sdk/client-s3'

const s3 = new S3({});

const getObjectCommand = new GetObjectCommand({
  Bucket: process.env.BUCKET_NAME,
  Key: 'sample.txt',
});
const response = await s3.send(getObjectCommand);
// transformToString が新たに追加された!
// strに sample.txt の中身の文字列が入る
const str = await response.Body?.transformToString();
// バイナリの場合はこちら
const arr = await s3Object.Body?.transformToByteArray();

かなり簡単になりましたね!文字列だけでなく、バイト列に変換することも容易です。

コード自体は2022/10/22に追加されたようですが、なかなか該当のIssueがクローズしないので見逃してました。 おそらくそろそろクローズされるんではと思います。

github.com

実装はこの辺りです: sdk-stream-mixin.ts。気になる方はご覧ください。

github.com

なお、その他のS3ファイル操作APIに関する情報は、こちらの記事もご参照ください:

tmokmss.hatenablog.com