Mik*_*ick 5 javascript amazon-web-services aws-lambda aws-api-gateway aws-step-functions
背景
我有一个 API 网关端点,它代理 Lambda 函数 (Lambda A),供我的 React 应用程序获取客户数据。
此 lambda 函数进行 API 调用来获取客户数据,但响应的格式还有很多不足之处。所以我想重新格式化它。
我没有将这种重新格式化逻辑填充到 Lambda A 中,而是编写了一个单独的 Lambda 函数 (Lambda B)。当我的 API 网关端点被命中时,我需要调用这两个函数,第一个函数的输出是第二个函数的输入。
第一个想法:阶跃函数
Step 函数看起来很自然,但可以在阶段之间传递的数据有效负载的大小有 32kb 的限制。我们的 json blob 客户数据经常超出此范围。
我听说针对这种情况提供的唯一“最佳实践”是将有效负载写入 S3,然后将对象密钥传递到下一阶段。
这很好,但我对必须向 S3 写入和删除如此多的短期对象感到不高兴。每天可能有数十或数十万个此类请求。所以我(暂时)放弃了阶跃函数方法。
目前的方法
我目前正在使用 javascript SDK 直接从 Lambda A 调用 Lambda B。这有相当多的缺点;值得注意的是,我有时会同时运行两个 lambda,但没有任何性能优势。换句话说,我付钱让 Lambda A 坐在那里等待 Lambda B 的响应(我也付钱)。
这感觉像是一种反模式,而且我听说过它具有这样的特征。
问题
这似乎是一个相对常见的场景 - 进行 API 调用(函数 A),然后执行一些附加逻辑来补充、重新格式化或以其他方式修改该响应(函数 B),然后将其传回调用者。
当然,我不是第一个想要使用两个 Lambda 函数来做这样的事情的人。
假设我不能使用步骤函数,我可以选择使用两个 lambda 函数执行此操作吗?
除了使用 S3 之外,还有其他方法可以解决 Step Functions 的 32kb 有效负载大小限制吗?
如果我愚蠢地想避免使用 S3/Step Function 方法,那么解释为什么我的担忧毫无根据的答案也将受到欢迎。
编辑
为什么您甚至考虑将获取数据和处理数据的功能拆分为两个不同的 AWS Lambda 函数?
想象一下,我不仅有 Lambda A,还有两打 Lambda 需要使用 Lambda B 的功能。
因此,我将 Lambda B(的功能)打包起来,将其发布到 Nexus,而我的另外两打 Lambda 都在构建时使用它。我所有的 lambda 的大小都在膨胀,随着我积累了更多的“Lambda B”,我必须发布更多的 npm 包。这是我想避免的。
我希望我的“Lambda A”能够使用其他 lambda,而不是 npm 包,以实现广泛共享的功能。也许我太从字面上理解了“lambda 函数”中的“函数”,或者也许我只是想充分利用 FaaS 的潜力。
从你的问题中我可以看出以下要求:
为什么您甚至考虑将获取数据和处理数据的功能拆分为两个不同的 AWS Lambda 函数?不要将“AWS Lambda 函数”中的“函数”理解得太字面意义:您在 AWS Lambda 函数中运行的代码可以像需要的那样复杂。只需在单个 AWS Lambda 函数中运行所有内容并逻辑地拆分代码即可。这是最有效、最干净的方式。
| 归档时间: |
|
| 查看次数: |
584 次 |
| 最近记录: |