2016-04-10 11 views
1

AWS Lambda'da yeniyim, tüylerimi nodejs'de S3 API'leri çağırmak üzere çekiyorum. Lambda'da (nodejs) s3 işlevlerini kullanamazsınız

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 doc uyguladım ama bile CloudWatch ilk günlüğünü görmüyorum: Ben işte benim kodu bir S3 nesnenin içeriğini okumak istiyorum. Ayrıca putObject denedim, işe yaramadı. Çalışma zamanım nodejs4.3. Keşke burada yardım edebilirim.

Teşekkürler.

cevap

4

AWS Lambda ile uğraşmadan önce, NodeJS'de asenkron çağrıların nasıl çalıştığını öğrenmeyi öneririm. Kodunuzda, s3.getObject() aramanız tamamlanmadan önce context.done() numaralı telefonu arayın. Bu, S3 çağrınızın bitmeden işlevinin sonlandırılmasına neden oluyor. context.done() çağrısının getObject geri çağrısına taşınması, bu sorunu giderir:

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(); 
    });  
}