簡體   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