繁体   English   中英

调用多个aws lambda函数

[英]Invoke multiple aws lambda functions

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

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

请参阅官方文档中的更多信息使用Amazon SNS通知调用Lambda函数

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

根据您使用的sdk,解决方案看起来会有所不同。 如果使用Node sdk,我建议使用Promise库(例如Bluebird)来宣传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的上下文,并且可以决定用不同的响应做任何你喜欢的事情。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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