文件上传到s3存储桶后如何触发我的Lambda函数

时间:2017-04-10 04:13:28

标签: node.js amazon-s3 lambda

  

我已将zip文件上传到S3存储桶。我需要触发我的下方   拉姆达
      一旦zip文件上传就立即运行。请帮我怎么做       继续

(plus[f.legs.idxOf[leg], 1] =  f.legs.idxOf[leg']) =>
(leg -> leg') in NextLegTable.nextLeg

3 个答案:

答案 0 :(得分:5)

您需要正确遵循一些步骤才能执行此操作。

步骤1:首先创建lambda函数,选择runtime并从列表中选择blank function或任何蓝色打印。

步骤2:选择空白方块,然后从服务列表中选择S3。 enter image description here

步骤3:选择要从中触发的存储桶,然后选择事件类型。在您的情况下,它应该是Object Created (All)

步骤4:输入前缀,如果S3中有任何文件夹,并且只想触发上传到该文件夹​​,则输入前缀。

第5步:输入后缀,仅针对特定后缀触发' .jpg'

步骤6:勾选启用触发复选框,然后选择下一步。

步骤7:现在给出一个名称和描述。如果您想上传代码或在编辑器中输入代码,请更改代码条目类型。

步骤8:在Handler功能中选择index.handler这是上传文件后将调用的函数名称。索引是文件名,处理程序是函数名。

第9步:选择create a custom role并指向新页面,保留所有字段,不要更改任何内容并选择Allow

步骤10:现在回到旧标签,选择角色 - > choose from existing role并选择新创建的role name

步骤11:选择下一步,查看所有选定的选项,然后点击Create Function

成功创建功能后,转到触发选项卡,您可以看到配置为触发的S3存储桶。

现在开始在代码编辑器中编写代码,或者将代码从本地上传到代码选项卡中的lambda函数。

读取文件的简单S3代码如下。

var aws = require('aws-sdk'),;

var s3 = new aws.S3({ apiVersion: '2006-03-01', accessKeyId: process.env.ACCESS_KEY, secretAccessKey: process.env.SECRET_KEY, region: process.env.LAMBDA_REGION });


exports.handler = function(event, context, exit){
    //console.log('Received event:', JSON.stringify(event, null, 2));

    // Get the object from the event and show its content type
    const bucket = event.Records[0].s3.bucket.name;
    const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
    const params = {
       Bucket: bucket,
       Key: key,
    };

     s3.getObject(params, function(err, data){
         if (err) {
           console.log('ERROR ' + err);
           exit(err);
         } else {
           // the data has the content of the uploaded file
         }
     });       
};

希望这有帮助!!!

答案 1 :(得分:2)

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

以下是如何触发的示例:

enter image description here

下:

enter image description here

这是一个示例代码lambda nodejs来执行此操作:

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

  var lastCreatedFile = event.Records[0].s3.object.key;
  console.log(lastCreatedFile);

};


我希望它对你有所帮助!

答案 2 :(得分:0)

您可以使用S3 events notification

然后使用bucket PUT事件触发lambda函数。