Amazon web services 有多个lambdas链调用是个坏主意吗?
我们目前正在为我们的微服务使用无服务器框架,目前每个服务都存储在一个大lambda中,用于处理多种类型的请求 似乎标准是每个请求类型都有一个lambda,因此我们的每个服务器最终都会被分成许多部分 我担心,如果我必须调用这些新函数中的其他函数,我最终会链接调用(并因此支付大量等待的lambda)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。然后,您就可以拥有小而快速的功能。下面是一些用于此目的的示例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关于体系结构模式的一些建议: