4

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

4

4 回答 4

12

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

在官方文档中查看更多信息使用 Amazon SNS 通知调用 Lambda 函数

于 2015-10-30T01:56:57.017 回答
3

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

根据您使用的 sdk,解决方案看起来会有所不同。如果使用 Node sdk,我建议使用 Promise 库对 sdk 进行承诺,例如 Bluebird。

代码看起来像:

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 的上下文,并且可以决定对不同的响应做任何你喜欢的事情。

于 2016-07-04T10:38:45.200 回答
3

使用蟒蛇:

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));
于 2016-03-31T23:47:55.853 回答
0

只是在每个函数的末尾调用下一个 Lambda 函数?

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

于 2015-10-29T15:28:20.773 回答