Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么可以';我不能用Lambda函数上传一个文件到s3吗?_Node.js_Amazon Web Services_Amazon S3_Aws Lambda_Amazon Cloudwatch - Fatal编程技术网

Node.js 为什么可以';我不能用Lambda函数上传一个文件到s3吗?

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

我正在创建一个lambda函数,该函数已绑定到API网关,我的代码似乎没有触发s3.putObject事件

我可以将AWS、s3、params变量记录到console.log中,没有任何问题,但是当尝试使用putObject函数时,没有触发任何事件……我的其余代码似乎只是在运行

有人知道我可能需要做什么吗

我在s3实例上设置了一个区域,一个API版本 注销我的变量 检查cloudwatch日志以了解更改

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
真正开始之前完成。