最近はもっぱら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がクローズしないので見逃してました。 おそらくそろそろクローズされるんではと思います。
実装はこの辺りです: sdk-stream-mixin.ts
。気になる方はご覧ください。
なお、その他のS3ファイル操作APIに関する情報は、こちらの記事もご参照ください: