- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
背景
我有一个 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 函数?不要把“AWS Lambda 函数”中的“函数”看得太字面意思:您在 AWS Lambda 函数中运行的代码可以很复杂,也可以很复杂。只需在单个 AWS Lambda 函数中运行所有内容并按逻辑拆分代码。这是最高效、最干净的方式。
关于javascript - 编排 AWS lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47913139/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!