最近我将我的工作 Lambda 代码更新为 nodejs18.x,以应对今年夏天即将到来的弃用,并借此机会将 aws sdk 版本升级到 3,因为默认情况下 18.x 运行时不附带 sdk v2。这主要是一个无缝过渡,但 Lambda 客户端和调用命令导致了一些非常不一致的行为,我无法解决。在发现 v3 lambda 客户端返回 int8array 并使用缓冲区解码响应后,我有时仍然会收到此错误:
语法错误:意外的标记,在 JSON 中的位置 3
这有时会以
invoke error
的形式出现,并具有相同的消息,但 lambda 调用文档没有任何用于解决此问题的信息。
代码:
const data = await lambdaClient.send(new InvokeCommand(params));
let response = JSON.parse(Buffer.from(data.Payload).toString());
当在相同代码上使用
SAM LOCAL INVOKE
时,相同的有效负载始终有效。
所以我的问题是,什么会导致 JSON 变得无法解析?
编辑上下文:我们在升级 sdk 版本之前没有任何问题。我们返回 json 对象
看起来,当被调用的 lambda 抛出错误时,父 lambda 得到的响应具有“FunctionError: Unhandled”和不可解析的有效负载。这意味着调用新 lambda 的客户端不是问题,但在抛出错误和 int8array 有效负载之间,我们不再收到有意义的结果。