当我们使用节点js触发lambda时,如何从s3存储桶获取最近上传的zip文件

时间:2017-04-18 08:43:52

标签: node.js amazon-s3 aws-lambda

  

我正在将一个zip文件上传到s3存储桶,一旦我上传了zip文件,我的   lambda函数将被触发。

     

在Lambda Function块中,我需要获取最近上传的zip文件名   来自S3存储桶的zip文件的上次修改日期或来自Lambda的对象创建日期   记录事件

     

但它可能是,但我需要从s3桶获取最近上传的zip文件名。**

这是我的代码

The plugin does not have a valid header

1 个答案:

答案 0 :(得分:1)

我将向您展示两种解决方案。


1º选项(自动):

我看到的最佳选择是准备好自动运行lambda函数 每次将文件放入存储桶S3中。调用lambda函数时,带有来自创建文件的信息的事件将被发送到lambda函数。

以下是如何触发的示例:

enter image description here

下:

enter image description here

以下是执行此操作的示例:

exports.handler = (event, context, callback) => {

  var lastCreatedFile = event.Records[0].s3.object.key;
  //extractData(lastCreatedFile);

};


2º选项(手动):

但是,只要您想获取有关新文件的信息,就可以手动调用lambda函数。 使用您的代码,您将始终获得修改/创建的最后一个文件。

我已经调整了你提交的lambda函数来执行此操作:

s3.listObjects(params, function (err, data) {
if (err)
    console.log(err, err.stack); // an error occurred

var sortArray;

data.Contents.sort(function(a,b) {
    return (b.LastModified > a.LastModified) ? 1 :
    ((a.LastModified > b.LastModified) ? -1 : 0);
});

for(var file of data.Contents){
    if (file.Key.endsWith('tar.gz')) {
        //extractData(file.Key);
        break;
    }
}

但是我们可以遇到这样的问题,如果没有创建新文件,它将会多次提取同一个文件。我后来建议使用文件删除或找到另一种方法来识别该文件已经被使用过。


我希望它对你有所帮助!