编排AWS lambda函数

问题描述 投票:3回答:1

背景

我有一个API网关端点,它代理一个Lambda函数(Lambda A),用于我的React应用程序来获取客户数据。

这个lambda函数进行API调用以获取客户数据,但响应的格式还有很多不足之处。所以我想重新格式化它。

我没有将这个重新格式化的逻辑填充到Lambda A中,而是编写了一个单独的Lambda函数(Lambda B)。当我的API网关端点被命中时,我需要调用这两个函数,第一个的输出是第二个的输入。

首先想到的是:步骤功能

步骤函数看起来很自然,但是可以在各阶段之间传递的数据有效负载大小有32kb的限制。我们的json blob客户数据经常超出此范围。

我听说过这种情况的唯一“最佳实践”是将有效负载写入S3,然后将对象密钥传递给下一阶段。

这很好,但是我不必为S3编写和删除如此多的短期对象而感到兴奋。每天可能有数十或数十万个这样的请求。所以我放弃了阶梯函数方法(现在)。

目前的方法

我目前正在使用javascript SDK直接从Lambda A调用Lambda B.这有很大的不利因素;值得注意的是,我有时会同时运行两个lambdas而没有性能优势。换句话说,我正在支付Lambda A只是坐在那里等待Lambda B(我也付钱)的回应。

感觉就像一个反模式,我听说它的特点就是这样。

问题

这似乎是一个相对常见的场景 - 进行API调用(函数A),然后执行一些额外的逻辑来补充,重新格式化或以其他方式修改该响应(函数B),然后再将其传递回调用者。

当然,我不是第一个想要使用两个Lambda函数来做这样的事情的人。

  • 假设我不能使用步骤函数,我有两个lambda函数可以做什么选择?
  • 除了使用S3之外,还有其他方法可以解决Step Functions的32kb有效负载大小限制吗?
  • 如果我想要避免使用S3 / Step Function方法很愚蠢,那么解释为什么我的担忧是没有根据的也是受欢迎的。

编辑

为什么您甚至考虑拆分获取数据并将其处理为两个不同的AWS Lambda函数的功能?

想象一下,我有二十几个需要消耗Lambda B功能的Lambda,而不仅仅是Lambda A.

因此,我将Lambda B打包(将其功能)发布到Nexus,我的其他二十几个Lambdas都在构建时使用它。我的所有lambdas都在膨胀,我必须发布更多的npm包,因为我积累了更多的“Lambda B”。这是我想要避免的。

我希望我的“Lambda A”能够使用其他lambda而不是npm包来获得广泛共享的功能。也许我在字面上理解“lambda函数”中的“函数”,或者我只是想充分利用FaaS的潜力。

javascript amazon-web-services aws-lambda aws-api-gateway aws-step-functions
1个回答
3
投票

根据您的问题,我可以阅读以下要求:

  • 您需要AWS Lambda函数(在API网关之后)作为客户端应用程序的API端点
  • 您的AWS Lambda函数必须从后端系统获取数据并对其进行处理以供客户端应用程序使用
  • 这样的请求是同步的,它们得到的答案越快越好(当然也更便宜)
  • 你需要运行的逻辑不是太复杂,可能只需要几毫秒的时间来执行

为什么您甚至考虑拆分获取数据并将其处理为两个不同的AWS Lambda函数的功能?不要将“AWS Lambda函数”中的“函数”视为字面:您在AWS Lambda函数中运行的代码可能非常复杂。只需在单个AWS Lambda函数中运行所有内容,然后在逻辑上拆分代码。这是最有效和最干净的方式。

© www.soinside.com 2019 - 2024. All rights reserved.