invoke aws lambda from another lambda asynchronously

后端 未结 5 2065
小蘑菇
小蘑菇 2020-12-09 03:24

I need to invoke aws lambda from another lambda asynchronously. i have a working code for synchronous calls.

exports.handler = (event, context, callback) =&g         


        
5条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-09 04:17

    I was working with the currently latest node.js 8.10 version in AWS Lambda.
    The second lambda didn't execute (and the callback function was never called) until i used the async/await mechanism.
    So the handler function must be async, and the 'lambda.invoke' call be wrapped with a Promise.

    here is my working code:

    function invokeLambda2(payload) {
        const params = {
            FunctionName: 'TestLambda2',
            InvocationType: 'Event',
            Payload: JSON.stringify(payload)
        };
    
        return new Promise((resolve, reject) => {
    
            lambda.invoke(params, (err,data) => {
                if (err) {
                    console.log(err, err.stack);
                    reject(err);
                }
                else {
                    console.log(data);
                    resolve(data);
                }
            });     
        });
    }
    
    
    exports.handler = async (event, context) => {
        const payload = {
            'message': 'hello from lambda1'
        };
        await invokeLambda2(payload);
        context.done();
    };
    

    Please notice that the handler doesn't wait for the second lambda to exit, only for it to be triggered and the callback function being called.

    You could also return the Promise from within the handler, don't have to use await with a second function.

    No need for any import when working with Promises and async/await, other than:

    const AWS = require('aws-sdk');
    const lambda = new AWS.Lambda();
    

提交回复
热议问题