调用多个aws lambda函数

时间:2015-10-29 09:57:36

标签: amazon-web-services amazon-s3 aws-lambda aws-sdk amazon-kinesis-firehose

我们如何一个接一个地调用多个AWS Lambda函数?例如如果AWS Lambda链由8个单独的lambda函数组成,每个函数模拟1秒处理事件然后调用下一个函数在链中。

4 个答案:

答案 0 :(得分:9)

我不建议使用直接invoke来启动您的功能。相反,您应该考虑创建SNS Topic并为此主题订阅Lambda个函数。一旦消息发布到您的主题,所有功能将同时触发。该解决方案也很容易扩展。

在官方文档Invoking Lambda functions using Amazon SNS notifications

上查看更多信息

答案 1 :(得分:3)

一种简单的方法是使用AWS sdk来调用lambda函数。

根据您使用的sdk,解决方案看起来会有所不同。如果使用Node sdk,我建议使用像Bluebird这样的Promise库来宣传sdk。

代码看起来像:

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

我喜欢这种方法的原因是你拥有所有lambdas的上下文,并且可以决定用不同的响应做任何你喜欢的事情。

答案 2 :(得分:2)

使用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));

答案 3 :(得分:0)

只需在每个函数结束时调用下一个Lambda函数吗?

如果您使用的是Node.js / JavaScript,请使用http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda_20141111.html#invokeAsync-property