Ric*_*ree 4 amazon-s3 amazon-web-services node.js aws-lambda
我试图从我的 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");
};
Run Code Online (Sandbox Code Playgroud)
有人可以指出我在这里找到错误的正确方向吗?
Tha*_*ssi 10
不仅需要返回一个promise,还需要awaiton,否则没有任何效果。这是因为您的处理程序是async,这意味着它无论如何都会返回一个承诺。这意味着,如果您不等待要执行的代码,则 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'})
}
};
Run Code Online (Sandbox Code Playgroud)
AWS SDK 可以返回一个承诺,只需将 .promise() 添加到您的函数中即可。
s3.listObjectsV2(params).promise();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4125 次 |
| 最近记录: |