【问题标题】:How to trigger my Lambda Function once the file is uploaded to s3 bucket文件上传到 s3 存储桶后如何触发我的 Lambda 函数
【发布时间】:2017-09-05 00:10:50
【问题描述】:

我已将 zip 文件上传到 S3 存储桶。我需要触发以下 拉姆达
上传 zip 文件后立即运行。请帮助我如何 继续

exports.handler = function (event, context) { 

MyLambdaFuntion();
}

MyLambdaFuntion()
{
var bucketName = "TestBucket1";
var fileKey = "test.js";
s3.getObject(params, function (err, data) {
if (err)
    console.log(err, err.stack);
   else {
          console.log(data);
       }
 });
}

【问题讨论】:

    标签: node.js amazon-s3 lambda


    【解决方案1】:

    您需要正确遵循一些步骤才能这样做。

    第 1 步:首先创建您的 lambda 函数,选择 runtime 并从列表中选择 blank function 或任何蓝图。

    第 2 步:选择空白方块并从服务列表中选择 S3。

    第 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
             }
         });       
    };
    

    希望对你有帮助!!!

    【讨论】:

    • 嘿....只是想对那篇文章表示感谢,这是一个很大的帮助,我知道这有点远,但我试图在脑海中实现你的代码 sn-p,因此将发送一封包含上传数据的电子邮件,但它发送的是空值...如果您有时间,请查看我的帖子,如果您能提供任何建议,我们将不胜感激,谢谢
    • 如何将他上传的文件传递到需要多部分文件的 API 端点?
    【解决方案2】:

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

    下面是一个如何触发的例子:

    下一个:

    这是一个示例代码 lambda nodejs 来做到这一点:

    exports.handler = (event, context, callback) => {
    
      var lastCreatedFile = event.Records[0].s3.object.key;
      console.log(lastCreatedFile);
    
    };
    


    希望对你有所帮助!

    【讨论】:

      【解决方案3】:

      您可以使用 S3 events notification

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-24
        • 1970-01-01
        相关资源
        最近更新 更多