如何设置 Lambda/Step 函数,以便在空闲时不对 API 响应计费?



假设我有一个顶级AWS Lambda函数,称为order_for_all_clients,还有一个Lambda函数称为order_for_single_client

order_for_all_clients聚集了1000个客户端,并为每个客户端对order_for_single_client进行Step Function调用。

order_for_single_client的工作流程如下:

  1. 放置外部API调用,等待响应
  2. 基于#1,进行另一个外部API调用,等待响应
  3. 基于#2,进行另一个外部API调用,等待响应

在此函数中,90%的时间用于等待API调用返回响应。另外10%用于执行实际处理/计算。

有没有一种方法可以构建Lambda/Step函数,使其能够启动API调用,关闭当前Lambda函数,然后在API调用返回后重新启动Lambda函数?在这样做的时候,我将只为实际计算时间付费,而不会为等待API调用返回所花费的空闲时间付费。

不,这是不可能的。没有什么可以"接收"API响应。

更干净的"异步"解决方案是请求外部服务向亚马逊SQS队列发送响应,然后可以触发AWS Lambda函数。然而,这需要改变外部服务处理API请求的方式。

或者,外部服务可能提供单独的API调用来"提交"请求,然后"检索"请求的结果。Lambda函数无法"提交"请求。然后,另一个进程将轮询服务,以检索已完成的任何作业的结果。

如果您每秒对外部服务有许多请求,那么可能值得转移到AmazonEC2并并行请求。这将在等待响应时更充分地利用资源。

最新更新