简体   繁体   中英

Invoke multiple aws lambda functions

How can we invoke multiple AWS Lambda functions one after the other ? For example if an AWS Lambda chain consists of 8 separate lambda functions and each simulate a 1 sec processing event and then invoke the next function in the chain.

I wouldn't recommend using direct invoke to launch your functions. Instead you should consider creating an SNS Topic and subscribing your Lambda functions to this topic. Once a message is published to your topic, all functions will fire at the same time. This solution is also easily scalable.

See more information at official documentation Invoking Lambda functions using Amazon SNS notifications

A simple way to do it is to use the AWS sdk to invoke the lambda function.

The solution would look different depending on what sdk you use. If using the Node sdk I would suggest promisifying the sdk with a Promise library like for example Bluebird.

The code would look something like:

 const Promise = require('bluebird'); const AWS = require('aws-sdk'); const lambda = Promise.promisifyAll(new AWS.Lambda({ apiVersion: '2015-03-31' })); lambda.invokeAsync({FunctionName: 'FirstLambdaFunction'}) .then(() => { // handle successful response from first lambda return lambda.invokeAsync({FunctionName: 'SecondLambdaFunction'}); }) .then(() => lambda.invokeAsync({FunctionName: 'ThirdLambdaFunction'})) .catch(err => { // Handle error response ); 

The reason why I like this approach is that you own the context of all the lambdas and can decide to do whatever you like with the different responses.

With python:

from boto3 import client as botoClient
import json
lambdas = botoClient("lambda")

def lambda_handler(event, context):
    response1 = lambdas.invoke(FunctionName="myLambda1", InvocationType="RequestResponse", Payload=json.dumps(event));
    response2 = lambdas.invoke(FunctionName="myLambda2", InvocationType="RequestResponse", Payload=json.dumps(event));

Just call the next Lambda function at the end of each function?

Use http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda_20141111.html#invokeAsync-property if you are using Node.js/JavaScript.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM