使用Lambda与Node Stream解析S3 CSV文件遇阻求助
问题:S3触发Lambda解析CSV无预期输出
我正在尝试编写一个Lambda函数,当CSV文件上传至S3存储桶时触发该函数并解析文件。我使用的是Node.js 14x版本,以下是我的代码:
import { S3Event } from 'aws-lambda'; import { S3 } from 'aws-sdk'; import * as csv from 'fast-csv'; const s3 = new S3({ apiVersion: 'latest' }); export async function hello(event: S3Event, context, cb) { event.Records.forEach(async (record) => { const bucket = record.s3.bucket.name; const key = decodeURIComponent(record.s3.object.key.replace(/\+/g, ' ')); const params: S3.GetObjectRequest = { Bucket: bucket, Key: key, }; const stream = s3.getObject(params).createReadStream(); console.log({ stream }); csv.parseStream(stream, { headers: true }).on('data', data => { console.log(data); }) .on('error', error => console.error(error)) .on('end', (rowCount: number) => console.log(`Parsed ${rowCount} rows`)); console.log('processo 01 acabou!'); }); }
执行该Lambda函数后,我未得到任何预期输出,仅在console.log(stream)中看到一个PassThrough对象:
stream: PassThrough { _readableState: ReadableState { objectMode: false, highWaterMark: 16384, buffer: BufferList { head: null, tail: null, length: 0 }, length: 0, pipes: [], flowing: null, ended: false, endEmitted: false, reading: false, sync: false, needReadable: false, emittedReadable: false, readableListening: false, resumeScheduled: false, errorEmitted: false, emitClose: true, autoDestroy: true, destroyed: false, errored: null, closed: false, closeEmitted: false, defaultEncoding: 'utf8', awaitDrainWriters: null, multiAwaitDrain: false, readingMore: false, dataEmitted: false, decoder: null, encoding: null, [Symbol(kPaused)]: null }, _events: [Object: null prototype] { prefinish: [Function: prefinish] }, _eventsCount: 1, _maxListeners: undefined, _writableState: WritableState { objectMode: false, highWaterMark: 16384, finalCalled: false, needDrain: false, ending: false, ended: false, finished: false, destroyed: false, decodeStrings: true, defaultEncoding: 'utf8', length: 0, writing: false, corked: 0, sync: true, bufferProcessing: false, onwrite: [Function: bound onwrite], writecb: null, writelen: 0, afterWriteTickInfo: null, buffered: [], bufferedIndex: 0, allBuffers: true, allNoop: true, pendingcb: 0, prefinished: false, errorEmitted: false, emitClose: true, autoDestroy: true, errored: null, closed: false }, allowHalfOpen: true, [Symbol(kCapture)]: false, [Symbol(kTransformState)]: { afterTransform: [Function: bound afterTransform], needTransform: false, transforming: false, writecb: null, writechunk: null, writeencoding: null } } }
我还附上了CloudWatch的截图:
请问有人能帮我指出我哪里出错了吗?
内容的提问来源于stack exchange,提问作者jefferson dos santos aguiar
相关产品推荐
相关产品推荐

