2017-09-29 3 views
0

J'ai suivi avec un AWS tutorial qui explique comment créer une fonction Lambda qui exécute un script Ruby. Ma seule confusion est comment je renvoie le résultat du script Ruby comme le résultat de la fonction Lambda.Retour résultat de la fonction Lambda qui exécute le script Ruby

const exec = require('child_process').exec; 

exports.handler = function(event, context) { 
    const child = exec('./lambdaRuby.rb ' + ''' + JSON.stringify(event) + ''', (result) => { 
     // Resolve with result of process 
     context.done(result); 
    }); 

    // Log process stdout and stderr 
    child.stdout.on('data', console.log); 
    child.stderr.on('data', console.error); 
} 
+0

Pourquoi ne pas récrire juste la logique Ruby NodeJS pour vous sauver tous les tracas? – dashmug

+0

Parce que Lambda ne supporte pas Ruby nativement et j'utilise un gem Ruby qui n'est pas porté au Noeud –

+0

Je pense que vous ajoutez un autre paramètre à la fonction de gestionnaire qui est un rappel. Voir l'exemple sur http://docs.aws .amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html –

Répondre

1

Le tutoriel que vous avez référencé est basé sur une ancienne version de Node dans Lambda.

Si vous utilisez nœud 6.10, il doit être écrit ...

const { exec } = require('child_process'); 

exports.handler = function(event, context, callback) { 
    const child = exec(`./lambdaRuby.rb '${JSON.stringify(event)}'`, (error, stdout) => { 
     if (error) return callback(error); 

     return callback(null, stdout) 
    }); 

    // Log process stdout and stderr 
    child.stdout.on('data', console.log); 
    child.stderr.on('data', console.error); 
} 
+0

Cette réponse fait ce que vous voulez qui est de retourner la sortie du script. Si vous voulez utiliser ceci avec API Gateway, vous devez toujours modifier la structure de l'objet de réponse. – dashmug