首页 > 解决方案 > 在发送到 API 网关之前压缩 js lambda 响应

问题描述

我有一个 AWS lambda 返回一个大小超过 6MB 的响应。(我知道它并不理想,并且限制了 RequestResponse lambda 调用类型的 AWS lambda 限制为 6MB)。

在这种情况下,我收到以下错误:

413 Request entity too large

我想在将它发送到 API Gateway 之前压缩这个响应。我的 lambda 在 javascript 中,我正在使用 zlib 以 gzip 格式压缩响应,但我收到异步错误。

代码片段:

const invocationResponse = await zlib.gzip(JSON.parse(data.Payload),function (error, result) {    
 if (error) throw error    return result
})

错误 :

ProcessingLambdaInvoker: Error (asynchronously) invoking backend lambda:  TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be one of type string or Buffer. Received type object
    at validChunk (_stream_writable.js:272:10)
    at Gzip.Writable.write (_stream_writable.js:307:21)
    at Gzip.Writable.end (_stream_writable.js:617:10) 

有人可以建议一种更好的方法来压缩 js 中的响应并将其发回。我还必须在前端解压缩它还是浏览器会自动解压。我知道在发送之前我必须对其进行压缩,然后使用 base64 对其进行编码。

标签: javascriptaws-lambdagzipresponsehttp-compression

解决方案


请注意错误类型ERR_INVALID_ARG_TYPE,请改用JSON.stringify

正确的

zlib.gzip(JSON.stringify(data.Payload), ...)

错误的

zlib.gzip(JSON.parse(data.Payload), ...)

推荐阅读