JavaScript 版の AWS SDK は v3 が出ていて、たとえば、AWS Lambda で Node.js 18.x をランタイムに選択した場合 SDK を使うならこれがデフォルトになっている。
公式ページ: https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/
AWS SDK v3 を使うときの S3 から取ってきて保存したり、S3 にアップロードしたりするときのメモ。
ちなみに ReadableStream の使い方含めよくわからなかったところは Bing のチャット AI に助けてもらった。AI すごい。
import { createWriteStream, createReadStream } from "fs"; import { S3Client, GetObjectCommand, PutObjectCommand } from "@aws-sdk/client-s3"; const s3Client = new S3Client({ region: "ap-northeast-1" }); async function run() { const data = await s3Client.send(new GetObjectCommand({ Bucket: "mybucket", Key: "foo/bar/gazou.png", })); const writeStream = createWriteStream("/tmp/gazou.png"); data.Body.pipe(writeStream); await new Promise((resolve, reject) => { // これが必要 writeStream.on("finish", resolve); writeStream.on("error", reject); }); // todo: process const readStream = createReadStream("/tmp/kakou.png"); await s3Client.send(new PutObjectCommand({ Bucket: "mybucket", Key: "foo/bar/kakou.png", Body: readStream, })); } run();