Lambda(node.js)からS3のオブジェクトをGetObjectCommandで取得する – AWS SDK for JavaScript v3

Lambda(node.js)からS3のオブジェクトをGetObjectCommandで取得する – AWS SDK for JavaScript v3

aws sdk for javascript v3のAPIリファレンスを見ていると、クライアントはS3とS3Clientの2つがあるようです。

ここではS3Clientを使用します。s3のオブジェクト取得するので、GetObjectCommandもimportします。

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

export async function handler(event, context) {
  const input = {
    Bucket: '<バケット名>',
    Key: 'tmp/hoge.json' // オブジェクトキー
  }
  const client = new S3Client({
    region: 'ap-northeast-1'
  })
  const command = new GetObjectCommand(input)
  const data = await client.send(command)
  const bodyContents = await streamToString(data.Body)
  console.log(bodyContents) // 文字列で返ってくる
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    }
    return response;
}

async function streamToString(stream) {
  return new Promise((resolve, reject) => {
      const chunks = [];
      stream.on('data', (chunk) => chunks.push(chunk));
      stream.on('error', reject);
      stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
  });
}

data.BodyにはReadableStreamが返ってくるので、stringに変換する必要があります。

変換する関数はstreamToStringで、AWSの以下ドキュメントのソースを丸々コピーしています。

AWS SDK を使用して Amazon S3 バケットとオブジェクトの使用を開始する - Amazon Simple Storage Service
AWS SDK を使用して Amazon S3 バケットとオブジェクトの使用を開始する

参考サイト

GetObjectCommand | S3 Client - AWS SDK for JavaScript v3
Documentation for S3 Client - AWS SDK for JavaScript v3

コメント

タイトルとURLをコピーしました