Node.js 为什么可以';我不能用Lambda函数上传一个文件到s3吗?
我正在创建一个lambda函数,该函数已绑定到API网关,我的代码似乎没有触发s3.putObject事件 我可以将AWS、s3、params变量记录到console.log中,没有任何问题,但是当尝试使用putObject函数时,没有触发任何事件……我的其余代码似乎只是在运行 有人知道我可能需要做什么吗 我在s3实例上设置了一个区域,一个API版本 注销我的变量 检查cloudwatch日志以了解更改Node.js 为什么可以';我不能用Lambda函数上传一个文件到s3吗?,node.js,amazon-web-services,amazon-s3,aws-lambda,amazon-cloudwatch,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Cloudwatch,我正在创建一个lambda函数,该函数已绑定到API网关,我的代码似乎没有触发s3.putObject事件 我可以将AWS、s3、params变量记录到console.log中,没有任何问题,但是当尝试使用putObject函数时,没有触发任何事件……我的其余代码似乎只是在运行 有人知道我可能需要做什么吗 我在s3实例上设置了一个区域,一个API版本 注销我的变量 检查cloudwatch日志以了解更改 exports.handler = async (event) => { cons
exports.handler = async (event) => {
const AWS = require('aws-sdk');
const s3 = new AWS.S3({region: "us-east-1", apiVersion: '2006-03-01'});
const params = {
Bucket: bucketName,
Key: 'file.txt',
ContentType: 'text/plain',
Body: JSON.stringify(event)};
// The below doesn't seem to run or log out
s3.putObject(params).promise().then(data => {
console.log('complete:PUT Object',data);
})
.catch(err => {
console.log('failure:PUT Object', err);
});
return JSON.stringify(event);
};
我希望能够进入我的s3存储桶,看到上传的文件。相反,它是空的在告诉lambda返回结果之前,您不会等待承诺返回。如果你有一堆链接,承诺是很好的,但是在这个简单的例子中,回电就足够了 此外,如果您使用的是async,则需要确保运行时为8.10或更高版本
exports.handler = async (event, context, callback) => {
const AWS = require('aws-sdk');
const s3 = new AWS.S3({region: "us-east-1", apiVersion: '2006-03-01'});
const params = {
Bucket: bucketName,
Key: 'file.txt',
ContentType: 'text/plain',
Body: JSON.stringify(event)};
console.log(JSON.stringify(event));
// The below doesn't seem to run or log out
s3.upload(params, options, function(err, data) {
console.log(err, data);
if(!err) {
callback(null, "All Good");
}
else {
callback(err);
}
});
};
关于上下文对象的更多阅读 因为在代码中使用的是
exports.handler=async(event)
,所以使用的是async/await()
在异步函数中,您可以使用wait
语法对同步调用作出承诺:
try {
const res = await s3.upload(params, options).promise();
console.log('complete:', res);
} catch(err) {
console.log('error:', err);
}
这是一种现代化的回调方法,而且是一致的(没有回调和异步函数的混合)。您在日志中看到任何错误吗<代码>返回JSON.stringify(事件)代码>?如果要使用异步处理函数,不需要返回承诺吗?Lambda调用将在
putObject
真正开始之前完成。