gpt4 book ai didi

javascript - 编排 AWS lambda 函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:54:40 27 4
gpt4 key购买 nike

背景

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

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

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

第一个想法:Step Functions

Step 函数似乎很适合,但阶段之间可以传递的数据负载大小有 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 方法是愚蠢的,那么也欢迎回答解释为什么我的担忧是没有根据的。

编辑

Why do you even consider splitting the functionality of fetching the data and processing it into two different AWS Lambda functions?

想象一下,我有两打需要使用 Lambda B 功能的 Lambda,而不仅仅是 Lambda A。

因此,我打包了 Lambda B(的功能),将其发布到 Nexus,而我的其他两打 Lambda 都在构建时使用了它。我所有的 lambda 都在膨胀,随着我积累更多的“Lambda B”,我不得不发布更多的 npm 包。这是我想避免的。

我希望我的“Lambda A”使用其他 lambda,而不是 npm 包,以实现广泛共享的功能。也许我从字面上理解了“lambda 函数”中的“函数”,或者我只是想充分发挥 FaaS 的潜力。

最佳答案

从你的问题中我可以看出以下要求:

  • 您需要一个 AWS Lambda 函数(在 API 网关后面)充当客户端应用程序的 API 端点
  • 您的 AWS Lambda 函数必须从后端系统获取数据并处理它以供客户端应用程序使用
  • 此类请求是同步的,越快得到答复越好(当然也更便宜)
  • 您需要运行的逻辑并不太复杂,可能只需几毫秒即可执行

为什么您甚至考虑将获取数据和处理数据的功能拆分为两个不同的 AWS Lambda 函数?不要把“AWS Lambda 函数”中的“函数”看得太字面意思:您在 AWS Lambda 函数中运行的代码可以很复杂,也可以很复杂。只需在单个 AWS Lambda 函数中运行所有内容并按逻辑拆分代码。这是最高效、最干净的方式。

关于javascript - 编排 AWS lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47913139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com