2015-11-11 21 views
11

sto attraversando un AWS di base su come creare una funzione lambda:richiamare la funzione Amazon lambda da App nodo

http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser-create-test-function-create-function.html

In questo esempio stiamo creando un servizio di un'immagine ridimensionamento, un modo per l'attivazione è di ascoltare che alcune immagini vengano trasferite su un bucket S3 e quindi verrà eseguita la funzione lambda.

Ma sto cercando di capire come richiamare questa funzione lambda dalla mia app nodejs, quando l'utente invia un'immagine al mio server nodo, invio questa immagine a aws lambda tramite API REST per essere ridimensionata e quindi ricevere il nuova posizione dell'immagine come risposta.

C'è qualche tipo di esempio che posso seguire? Sono più interessato alla parte di invocazione effettiva, poiché ho già il mio servizio lambda attivo e funzionante.

Grazie

risposta

22

Dal momento che si sta utilizzando un server node.js si può solo richiamare la vostra lambda direttamente con l'AWS JavaScript SDK (https://www.npmjs.com/package/aws-sdk). In questo modo non devi preoccuparti di utilizzare il gateway API.

Invocare dal server è semplice come:

var AWS = require('aws-sdk'); 

// you shouldn't hardcode your keys in production! See http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-configuring.html 
AWS.config.update({accessKeyId: 'akid', secretAccessKey: 'secret'}); 

var lambda = new AWS.Lambda(); 
var params = { 
    FunctionName: 'myImageProcessingLambdaFn', /* required */ 
    Payload: PAYLOAD_AS_A_STRING 
}; 
lambda.invoke(params, function(err, data) { 
    if (err) console.log(err, err.stack); // an error occurred 
    else  console.log(data);   // successful response 
}); 

vedere il resto dei documenti SDK qui: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

+1

sì, ho capito che non ha senso utilizzare l'endpoint API. – inside

0

Ecco una risposta che è più idomatic per l'ultimo JavaScript.

import AWS from 'aws-sdk'; 

const invokeLambda = (lambda, params) => new Promise((resolve, reject) => { 
    lambda.invoke(params, (error, data) => { 
    if (error) { 
     reject(error); 
    } else { 
     resolve(data); 
    } 
    }); 
}); 

const main = async() => { 

    // You shouldn't hard-code your keys in production! 
    // http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-configuring.html 
    AWS.config.update({ 
    accessKeyId: 'AWSAccessKeyId', 
    secretAccessKey: 'AWSAccessKeySecret', 
    region: 'eu-west-1', 
    }); 

    const lambda = new AWS.Lambda(); 

    const params = { 
    FunctionName: 'my-lambda-function', 
    Payload: JSON.stringify({ 
     'x': 1, 
     'y': 2, 
     'z': 3, 
    }), 
    }; 

    const result = await invokeLambda(lambda, params); 

    console.log('Success!'); 
    console.log(result); 
}; 

main().catch(error => console.error(error)); 
Problemi correlati