web-dev-qa-db-fra.com

Comment télécharger un objet dans S3 dans Lambda?

Impossible de télécharger un objet dans S3 dans Lambda. Tout fonctionne bien localement. Aucune erreur dans les journaux qui montrerait ce qui ne va pas ...

Code ci-dessous:

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

S'exécute avec succès sans erreur, mais le rappel dans s3.upload ne semble pas être appelé. Aucun objet dans le compartiment n'est créé.

Les autorisations de rôle IAM vérifiées n'étaient pas un problème en accordant un accès complet, ainsi qu'en testant localement.

Production

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
16
Edwin

Je soupçonne que vous appelez la fonction context.done() avant que s3.upload() ait une chance de revenir. Si vous déplacez context.done() dans le bloc de code de réponse de téléchargement, cela devrait fonctionner.

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