【问题标题】:Compress js lambda response before sending it to the API gateway在发送到 API 网关之前压缩 js lambda 响应
【发布时间】:2020-06-11 00:25:21
【问题描述】:

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

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

413 Request entity too large

我想在将此响应发送到 API 网关之前对其进行压缩。我的 lambda 在 javascript 中,我正在使用 zlib 以 gzip 格式压缩响应,但出现异步错误。

代码 sn-p:

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 对其进行编码。

【问题讨论】:

  • 如果 AWS lamda 有硬限制,那么为什么不将 zip 保存到 s3 位置,并共享 s3 位置作为响应。客户端可以使用共享的s3路径下载文件。
  • 这只是其中一种方法,我已经在这样做了。我认为这是一个硬性限制。

标签: javascript aws-lambda gzip response http-compression


【解决方案1】:

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

正确

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

错了

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-25
    • 2022-06-29
    • 1970-01-01
    • 2013-12-02
    • 2023-04-09
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多