🐷
lmabdaからS3ファイルを読み込む例+α
ファイルの読み込み
・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