Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 有多个lambdas链调用是个坏主意吗?_Amazon Web Services_Aws Lambda_Serverless - Fatal编程技术网

Amazon web services 有多个lambdas链调用是个坏主意吗?

Amazon web services 有多个lambdas链调用是个坏主意吗?,amazon-web-services,aws-lambda,serverless,Amazon Web Services,Aws Lambda,Serverless,我们目前正在为我们的微服务使用无服务器框架,目前每个服务都存储在一个大lambda中,用于处理多种类型的请求 似乎标准是每个请求类型都有一个lambda,因此我们的每个服务器最终都会被分成许多部分 我担心,如果我必须调用这些新函数中的其他函数,我最终会链接调用(并因此支付大量等待的lambda) 如何解决这个问题?可以让一个lambda异步触发另一个lambda。然后,您就可以拥有小而快速的功能。下面是一些用于此目的的示例Python代码: payload = {'any-data-you-ne

我们目前正在为我们的微服务使用无服务器框架,目前每个服务都存储在一个大lambda中,用于处理多种类型的请求

似乎标准是每个请求类型都有一个lambda,因此我们的每个服务器最终都会被分成许多部分

我担心,如果我必须调用这些新函数中的其他函数,我最终会链接调用(并因此支付大量等待的lambda)


如何解决这个问题?

可以让一个lambda异步触发另一个lambda。然后,您就可以拥有小而快速的功能。下面是一些用于此目的的示例Python代码:

payload = {'any-data-you-need-to-pass-along': 'your_data',
           'resources': ['you_can_make_this_something_custom']}

lambda_client = boto3.client('lambda')
lambda_client.invoke(FunctionName=the_arn_of_function_you_want_to_call,
                     InvocationType='Event', 
                     Payload=json.dumps(payload))
关键是使用“事件”的调用类型,因为这会导致调用是异步的。这种方法的一个优点是,每种不同类型的请求都可以有一个lambda,该lambda根据其内存和超时需求进行定制。如果所有内容都在一个大lambda中运行——就像一个大的switch语句一样——那么必须将lambda配置为任何请求类型所需的最高内存,这可能意味着小请求类型运行的内存超过了它们所需的内存,这会浪费您的资金

我建议您仔细阅读有关其他注意事项的异步注释:

对于异步调用,Lambda在调用之前向队列添加事件 将它们发送到您的功能。如果您的函数没有足够的 为了跟上队列,事件可能会丢失。偶尔地 您的函数可能多次接收同一事件,即使没有 发生错误。要保留未处理的事件,请配置 具有死信队列的函数


如果您需要更多的流,您应该研究步骤函数:

您当然不希望一个Lambda函数同步调用第二个Lambda函数,因为在这种情况下,您将为重叠时间支付双倍的费用。我不确定您所说的“每个请求类型的lambda”(应用程序中的请求类型是什么?)是什么意思,但下面是serverless关于体系结构模式的一些建议: