无法在 Lambda (nodejs) 中使用 s3 函数

Can't use s3 functions in Lambda (nodejs)

我是 AWS Lambda 的新手,我正在为在 nodejs 中调用 S3 APIs 而烦恼。我想读取 S3 对象的内容,所以这是我的代码:

exports.handler = function (event, context) {
var AWS = require('aws-sdk'); 
var s3 = new AWS.S3();

s3.getObject({
  Bucket: 'lambda-bucket',
  Key: 'test.html'
}, function (err, data) {
    console.log('this is happening!');
    console.log(data);
});

context.done();
}

我遵循了 API 文档,但我什至没有看到 CloudWatch 中的第一个日志。我也试过 putObject,似乎效果不佳。我的运行时是nodejs4.3。希望我能在这里得到一些帮助。

谢谢。

我建议在尝试处理 AWS Lambda 之前了解异步调用在 NodeJS 中的工作原理。在您的代码中,您在调用 s3.getObject() 之前调用 context.done()。这导致函数在您的 S3 调用完成之前终止。将 context.done() 调用移动到 getObject 回调中将解决此问题:

exports.handler = function (event, context) {
  var AWS = require('aws-sdk'); 
  var s3 = new AWS.S3();

  s3.getObject({
    Bucket: 'lambda-bucket',
    Key: 'test.html'
  }, function (err, data) {
    console.log('this is happening!');
    console.log(data);

    // Now that the S3 call is complete, 
    // we can terminate the Lambda function execution
    context.done();
  });    
}