不能在Lambda(nodejs)中使用s3函数

Mic*_*ael 2 amazon-s3 aws-lambda

我是AWS Lambda的新手,我正在研究如何在nodejs中调用S3 API.我想阅读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();
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Mar*_*k B 5

我建议在尝试处理AWS Lambda之前了解NodeJS中异步调用的工作原理.在您context.done()的呼叫s3.getObject()完成之前,您在呼叫的代码中.这导致函数在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();
  });    
}
Run Code Online (Sandbox Code Playgroud)