2015-06-18 12 views
15

Es kann nicht scheinen, ein Objekt in S3 in Lambda hochzuladen. Alles funktioniert gut lokal. Keine Fehler in Protokollen, die zeigen würde, was falsch läuft ...Wie lade ich ein Objekt in S3 in Lambda hoch?

-Code unten:

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

Läuft erfolgreich w/o Fehler, aber der Rückruf in s3.upload scheint nicht genannt zu werden. Kein Objekt im Bucket wird erstellt.

Überprüfte IAM-Rollenberechtigungen waren kein Problem, da sie vollen Zugriff gewährten und lokal getestet wurden.

Ausgabe

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

Warum wird das s3-Objekt ein zweites Mal erstellt? (lokal und global) –

+0

Ich habe eine vollständige funktionierende Version, die hier erklärt wird: http://stackoverflow.com/questions/33631229/how-to-set-open-download-permissions-on-a-file-created-in -s3-mit-amazon-lambda/33632736 –

Antwort

41

Ich vermute, dass Sie die context.done() Funktion vor s3.upload() fordern eine Chance hat, zurückzukehren. Wenn Sie context.done() in den Upload-Antwortcodeblock verschieben, sollte es funktionieren.

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

Danke @James, das funktionierte für mich :-) –

+1

@KatharineOsborne Wenn es geklappt hat, dann akzeptiere bitte die Antwort. Dies hilft anderen in der Gemeinschaft. –

+0

@ParthapratimNeog Ich würde aber ich habe die Frage nicht gestellt ;-) –

Verwandte Themen