【发布时间】:2021-02-04 23:53:29
【问题描述】:
我有以下用例要解决。我需要使用 Lambda 函数(NodeJS 12)从 S3 存储桶中提取数据。创建新文件时将触发 Lambda 函数。该文件是一个 gz 存档,可以包含多个 TSV(制表符分隔)文件。对于每一行,都会从 Lambda 函数触发 API 调用。问题:
1 - 它必须是一个两步过程:解压缩 /tmp 文件夹中的存档,然后读取 TSV 文件。或者您可以直接流式传输存档文件的内容吗?
2 - 您是否有一段可以分享的代码,显示如何从 S3 存储桶及其内容 (TSV) 流式传输 GZ 文件?我发现了几个例子,但仅适用于纯 NodeJS。不是来自 Lambda/S3。
非常感谢您的帮助。
为我的第一次测试添加了一个 sn-p 代码,但它不起作用。控制台中没有记录任何数据
const csv = require('csv-parser')
const aws = require('aws-sdk');
const s3 = new aws.S3();
exports.handler = async(event, context, callback) => {
const bucket = event.Records[0].s3.bucket.name;
const objectKey = event.Records[0].s3.object.key;
const params = { Bucket: bucket, Key: objectKey };
var results = [];
console.log("My File: "+objectKey+"\n")
console.log("My Bucket: "+bucket+"\n")
var otherOptions = {
columns: true,
auto_parse: true,
escape: '\\',
trim: true,
};
s3.getObject(params).createReadStream()
.pipe(csv({ separator: '|' }))
.on('data', (data) => results.push(data))
.on('end', () => {
console.log("My data: "+results);
});
return await results
};
【问题讨论】:
-
"您有可以共享这部分功能的 sn-p 代码吗?"你能定义“这部分”吗?
-
嗨@MyStackRunnethOver。谢谢你回到我身旁。我的意思是流式传输 GZ 存档中的 TSV 文件的内容。
标签: node.js amazon-s3 aws-lambda