2015-06-18 11 views
15

Lambda'da bir nesneyi S3'e yükleyemiyor gibi görünüyor. Her şey yerel olarak iyi çalışıyor. yanlış neler gösterecek günlüklerinde hiçbir hata ... aşağıdaLambda'da S3'e nesne nasıl yüklenir?

Kodu:

console.log('Loading function'); 
var AWS = require('aws-sdk'); 
var s3 = new AWS.S3(); 

exports.handler = function(event, context) { 
    //console.log(JSON.stringify(event, null, 2)); 
    var s3 = new AWS.S3(); 
    var param = {Bucket: 'flow-logs', Key: 'test-lambda-x', Body: 'me me me'}; 
    console.log("s3"); 
    s3.upload(param, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else console.log(data);   // successful response 
    }); 
    console.log('done'); 
    context.done(); 
}; 

çalıştırır başarıyla hata o ama s3.upload içinde geri arama çağrılacak görünmüyor w /. Kovada hiçbir nesne oluşturulmaz.

Doğrulanmış IAM rol izinleri, yerel olarak sınanmanın yanı sıra tam erişim izni vererek bir sorun değildi.

Çıktı

START RequestId: d4847fdb-160c-11e5-8a8c-b555b123e14d 
2015-06-18T22:53:29.750Z d4847fdb-160c-11e5-8a8c-b555b123e14d s3 
2015-06-18T22:53:30.271Z d4847fdb-160c-11e5-8a8c-b555b123e14d done 
END RequestId: d4847fdb-160c-11e5-8a8c-b555b123e14d 
+0

s3 nesnesi neden ikinci kez oluşturuldu? (yerel ve küresel) –

+0

Burada açıklanan tam bir çalışma sürümü var: http://stackoverflow.com/questions/33631229/how-to-set-open-download-permissions-on-a-file-created-in -s3-with-amazon-lambda/33632736 –

cevap

41

Sana s3.upload() önce context.done() işlevini çağırarak şüpheleniyorsanız dönmek için bir şansı vardır. Yükleme yanıt kodu bloğuna context.done()'u taşırsanız, çalışması gerekir.

var AWS = require('aws-sdk'); 
var s3 = new AWS.S3(); 

exports.handler = function(event, context) { 
    //console.log(JSON.stringify(event, null, 2)); 
    var s3 = new AWS.S3(); 
    var param = {Bucket: 'flow-logs', Key: 'test-lambda-x', Body: 'me me me'}; 
    console.log("s3"); 
    s3.upload(param, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else console.log(data);   // successful response 

     console.log('actually done!'); 
     context.done(); 
    }); 

    console.log('done?'); 
    //context.done(); 
}; 
+2

Teşekkürler @James, bu benim için çalıştı :-) –

+1

@KatharineOsborne Eğer işe yaradıysa, lütfen cevabı kabul edin. Bu topluluktaki diğerlerine yardımcı olur. –

+0

@ParthapratimNeog İsterdim ama ben sormadı ;-) –