

# Lambda 函数的响应流
<a name="configuration-response-streaming"></a>

Lambda 函数可以通过 [Lambda 函数 URL](urls-configuration.md) 或使用 [InvokeWithResponseStream](https://docs.amazonaws.cn/lambda/latest/api/API_InvokeWithResponseStream.html) API（通过 Amazon SDK 或直接调用 API），将响应有效载荷在本机流式传输回客户端。您的 Lambda 函数还可以通过 [Amazon API Gateway 代理集成](https://docs.amazonaws.cn/apigateway/latest/developerguide/response-transfer-mode-lambda.html)流式处理响应有效载荷，该集成使用 [InvokeWithResponseStream](https://docs.amazonaws.cn/lambda/latest/api/API_InvokeWithResponseStream.html) API 来调用您的函数。响应流式处理可通过提高首字节时间（TTFB）性能，使延迟敏感型应用程序受益。这是因为您可以在部分响应可用时将其发送回客户端。此外，响应流式传输函数最多可以返回 200MB 的有效载荷，而缓冲响应的最大有效载荷为 6 MB。流式处理响应还意味着您的函数不需要在内存中容纳整个响应。对于非常大的响应，这样可以减少您需要为函数配置的内存量。

**注意**  
Lambda 响应流式处理在所有 Amazon Web Services 区域中均不可用。请参阅 Builder Center 的 [按区域划分的 Amazon 功能](https://builder.aws.com/build/capabilities)，了解按区域划分的特征可用性。

Lambda 流式处理您的响应的速度取决于响应大小。函数响应的前 6MB 的流式处理速率无上限。对于大于 6MB 的响应，响应的其余部分受带宽上限的限制。有关流式处理带宽的详细信息，请参阅[响应流式处理的带宽限制](#config-rs-bandwidth-cap)。

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

Lambda 在 Node.js 托管式运行时系统上支持响应流式处理。对于包括 Python 在内的其他语言，您也可以[使用带有自定义运行时系统 API 集成的自定义运行时系统](runtimes-custom.md#runtimes-custom-response-streaming)来流式处理响应或使用 [Lambda Web Adapter](https://github.com/awslabs/aws-lambda-web-adapter)。

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

**Topics**
+ [响应流式处理的带宽限制](#config-rs-bandwidth-cap)
+ [VPC 与响应流的兼容性](#config-rs-vpc-compatibility)
+ [编写支持响应流式处理的 Lambda 函数](config-rs-write-functions.md)
+ [使用 Lambda 函数 URL 调用支持响应流式处理的函数](config-rs-invoke-furls.md)
+ [教程：使用函数 URL 创建响应流式处理 Lambda 函数](response-streaming-tutorial.md)

## 响应流式处理的带宽限制
<a name="config-rs-bandwidth-cap"></a>

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

**注意**  
带宽限制仅适用于您的函数的响应负载，不适用于您的函数的网络访问。

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

## VPC 与响应流的兼容性
<a name="config-rs-vpc-compatibility"></a>

在 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
```