Serverless 调用 Lambda 函数返回对象长度超过 6MB 的问题解决方案

阅读时长 4 分钟读完

在 Serverless 架构中,Lambda 函数作为后端服务提供 API 服务。Lambda 函数可以返回 JSON 格式的数据,但当返回的对象长度超过 6MB 时,就会出现问题。这篇文章将介绍如何解决这个问题。

问题描述

在 Serverless 架构中,使用 Lambda 函数返回 JSON 格式的数据。当返回的对象长度超过 6MB 时,就会出现以下错误:

这是因为 AWS API Gateway 对于返回的对象长度有限制,超过限制就会返回错误。这个限制是 6MB,包括 HTTP 头部和正文内容。

解决方案

为了解决这个问题,我们可以使用 S3 存储来存储返回的对象,然后返回对象的 S3 存储地址。这样可以避免返回对象长度超过 6MB 的问题。

以下是解决方案的步骤:

  1. 在 Lambda 函数中,将要返回的对象上传到 S3 存储中。可以使用 AWS SDK for JavaScript 或者 AWS CLI 来实现。以下是使用 AWS SDK for JavaScript 的示例代码:
-- -------------------- ---- -------
----- --- - -------------------
----- -- - --- ---------

--------------- - ----- ------- -- -
  ----- ------ - -
    ------- ------------
    ---- ----------------
    ----- -----------
    ------------ ------------------
  --
  
  ----- ------ - ----- ----------------------------
  
  ------ -
    ----------- ----
    ----- ---------------- ---- --------------- --
  --
--
  1. 在 API Gateway 中,配置一个资源和方法,将其与 Lambda 函数关联。在方法中,将 Lambda 函数返回的 URL 作为响应体返回。以下是 API Gateway 配置的示例代码:
-- -------------------- ---- -------
----- ------------------------
-----------
  ----- ---------

----------
  -----------
    ----- -------------------------
    -----------
      ---------- ---- ---------
      --------- ------- ------------------------
      --------- -----------

  ---------
    ----- -----------------------
    -----------
      ---------- ---- ---------
      ----------- ---- ----------
      ----------- ---
      ------------------ ----
      ------------
        ----- ---------
        ---------------------- ----
        ---- ---- ----------------------------------------------------------------------------------------------
        -------------------- -----------------
        ---------------- ---------------
      ----------------
        - ----------- ---
          ---------------
            ----------------- -----
  1. 在前端代码中,使用 ajax 或者 fetch API 发起 GET 请求,获取 Lambda 函数返回的 URL。然后使用这个 URL 发起 GET 请求,获取存储在 S3 存储中的对象。以下是使用 jQuery 的示例代码:

总结

在 Serverless 架构中,Lambda 函数作为后端服务提供 API 服务。Lambda 函数可以返回 JSON 格式的数据,但当返回的对象长度超过 6MB 时,就会出现问题。为了解决这个问题,我们可以使用 S3 存储来存储返回的对象,然后返回对象的 S3 存储地址。这篇文章介绍了如何实现这个解决方案,并提供了示例代码。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65641051d2f5e1655dd76e24

纠错
反馈