🐷

lmabdaからS3ファイルを読み込む例+α

2023/04/18に公開

ファイルの読み込み

・lambdaでファイルを書き込める場所は/tmp配下
・writeFileSyncでファイルの保存を行う(S3から読み込んだファイルはBuffer)

 const s3 = new AWS.S3({
   signatureVersion: 'v4',
 });

 const s3file = await s3.getObject({
   Bucket : bucketName,
   Key: objectKey,
 }).promise();

 const fileName = '/tmp/test.zip';
 fs.writeFileSync(fileName, s3file.Body as Buffer);

 // unzip
 const zip = new admzip(fileName);
 const zipEntries = zip.getEntries();

 zipEntries.forEach(async function (zipEntry) {
   const fileBuffer = zipEntry.getData()
   fs.writeFileSync(`/tmp/${zipEntry.entryName}`, fileBuffer);
 });

読み込んだCSVファイルを1行ずつストリームで処理する例

 await new Promise(resolve => {
   fs.createReadStream(`/tmp/test.csv`)
     .pipe(csv({ skipLines: 4, headers: ['title', 'name1', 'name2'] }))
     .on('headers', (headers) => {
       console.info('haders found', headers)
     }).on('data', (data) => {
       console.log(data); // ここで必要な処理を行う
     })
     .on('end', () => {
       console.info('stream end');
       resolve(undefined);
     })
 })

Discussion