繁体   English   中英

Node.js Lambda函数中的AWS S3 ListObjects

[英]AWS S3 ListObjects in Node.js Lambda Function

我正在尝试从我的node.js(8.10)lambda函数中列出一个S3存储桶。

当我运行下面的函数(在Lambda中)时,我在日志中看到“检查点1”和“检查点2”,但没有看到来自listObjectsV2调用的任何日志记录,既没有错误也没有数据。 我的超时设置为10秒,并且我也没有看到任何超时日志条目。 我想我可能会错过有关在lambda中使用异步函数的某些知识?

const AWS = require('aws-sdk');
const s3 = new AWS.S3({apiVersion: '2006-03-01'});

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

    // console.log('Received event:', JSON.stringify(event, null, 2));

    var params = { 
        Bucket: 'bucket-name'
    }

    console.log("Checkpoint 1");

    s3.listObjectsV2(params, function (err, data) {
        if (err) {
            console.log(err, err.stack);
        } else {
            console.log(data);
        }
    });


    console.log("Checkpoint 2");

};

有人可以指出正确的方向,以便在这里找到我的错误吗?

不仅您需要退还诺言,还需要await它,否则它没有效果。 这是因为您的处理程序是async ,这意味着无论如何它将返回一个Promise。 这意味着,如果您不等待要执行的代码,则Lambda很可能会在兑现承诺之前终止。

您的代码应如下所示:

const AWS = require('aws-sdk');
const s3 = new AWS.S3({apiVersion: '2006-03-01'});

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

    // console.log('Received event:', JSON.stringify(event, null, 2));

    var params = { 
        Bucket: 'bucket-name'
    }

    console.log("Checkpoint 1");

    let s3Objects

    try {
       s3Objects = await s3.listObjectsV2(params).promise();
       console.log(s3Objects)
    } catch (e) {
       console.log(e)
    }


    console.log("Checkpoint 2");

    // Assuming you're using API Gateway
    return {
        statusCode: 200,
        body: JSON.stringify(s3Objects || {message: 'No objects found in s3 bucket'})
    }

};

AWS SDK可以返回承诺,只需将.promise()添加到您的函数中即可。

s3.listObjectsV2(params).promise();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM