View a markdown version of this page

Lambda 函数的响应流 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

Lambda 函数的响应流

Lambda 函数可以通过 Lambda 函数 URL 或使用 InvokeWithResponseStream API(通过 Amazon SDK 或直接调用 API),将响应有效载荷在本机流式传输回客户端。您的 Lambda 函数还可以通过 Amazon API Gateway 代理集成流式处理响应有效载荷,该集成使用 InvokeWithResponseStream API 来调用您的函数。响应流式处理可通过提高首字节时间(TTFB)性能,使延迟敏感型应用程序受益。这是因为您可以在部分响应可用时将其发送回客户端。此外,响应流式传输函数最多可以返回 200MB 的有效载荷,而缓冲响应的最大有效载荷为 6 MB。

流式处理响应还意味着您的函数不需要在内存中容纳整个响应。对于非常大的响应,这样可以减少您需要为函数配置的内存量。要根据使用案例在函数 URL 和 API Gateway 之间做出选择,请参阅选择使用 HTTP 请求调用 Lambda 函数的方法。

注意

Lambda 响应流式处理在所有 Amazon Web Services 区域中均不可用。有关各区域的功能可用性,请参阅 Builder Center 的按区域探索 Amazon 功能。

Lambda 流式处理您的响应的速度取决于响应大小。函数响应的前 6MB 的流式处理速率无上限。对于大于 6MB 的响应,响应的其余部分受带宽上限的限制。有关流式处理带宽的详细信息,请参阅响应流式处理的带宽限制。

当调用的客户端连接中断时,流式处理响应会产生成本,并且流式处理的响应不会中断或停止。将按整个函数运行的完整时长来向客户收取费用,因此客户在配置较长的函数超时时间时应谨慎行事。

Lambda 在 Node.js 托管式运行时系统上支持响应流式处理。对于包括 Python 在内的其他语言,您也可以使用带有自定义运行时系统 API 集成的自定义运行时系统来流式处理响应或使用 Lambda Web Adapter。

注意

通过 Lambda 控制台测试函数时,将始终显示缓冲响应。

要了解如何编写流式处理函数,请参阅编写支持响应流式处理的 Lambda 函数。要通过函数 URL 调用流式处理函数,请参阅使用 Lambda 函数 URL 调用支持响应流式处理的函数。有关分步演练,请参阅教程:使用函数 URL 创建响应流式处理 Lambda 函数。

响应流式处理的带宽限制

函数响应有效载荷的前 6 MB 的带宽无上限。在此初始突增之后,Lambda 会以最大 2MBps 的速率流式处理您的响应。如果您的函数响应从未超出 6MB,则此带宽限制永远不适用。

注意

带宽限制仅适用于您的函数的响应有效载荷,不适用于您的函数的网络访问。

无上限带宽的速率因多种因素而异,其中包括函数的处理速度。通常,函数响应的前 6 MB 的速率高于 2 MBps。如果您的函数将响应流式处理到 Amazon 以外的目标,则流式处理速率还取决于外部互联网连接的速度。

VPC 与响应流的兼容性

在 VPC 环境中使用 Lambda 函数时,响应流有一些重要注意事项:

  • Lambda 函数 URL 不支持 VPC 环境内的响应流。

  • 您可以使用 InvokeWithResponseStream API 通过 Amazon SDK 调用 Lambda 函数来在 VPC 中使用响应流。这需要为 Lambda 设置适当的 VPC 端点。

  • 对于 VPC 环境,您需要为 Lambda 创建一个接口 VPC 端点,以实现 VPC 中的资源与 Lambda 服务之间的通信。

VPC 中响应流的典型架构可能包括:

Client in VPC -> Interface VPC endpoint for Lambda -> Lambda function -> Response streaming back through the same path