添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 使用本机 Node.js 运行时系统提供的 awslambda.streamifyResponse() 装饰器包装函数。

  • 正常结束流,以确保所有数据处理完成。

配置处理程序函数以流式处理响应

要向运行时系统指示 Lambda 应该流式处理函数的响应,您必须使用 streamifyResponse() 装饰器包装函数。从而指示运行时系统使用正确的响应流式处理逻辑路径,同时确保函数能够流式处理响应。

streamifyResponse() 装饰器接受可接受以下参数的函数:

  • event – 提供有关函数 URL 的调用事件的信息,例如 HTTP 方法、查询参数和请求正文。

  • responseStream – 提供可写流。

  • context – 提供的方法和属性包含有关调用、函数和执行环境的信息。

responseStream 对象为 Node.js writableStream 。与任何此类流一样,您应该使用 pipeline() 方法。

例 支持响应流式处理的处理程序
const pipeline = require("util").promisify(require("stream").pipeline); const { Readable } = require('stream'); exports.echo = awslambda.streamifyResponse(async (event, responseStream, _context) => { // As an example, convert event to a readable stream. const requestStream = Readable.from(Buffer.from(JSON.stringify(event))); await pipeline(requestStream, responseStream);

尽管 responseStream 提供了写入流的 write() 方法,但建议您尽可能使用 pipeline()。使用 pipeline() 能够确保可写流不会被速度更快的可读流所淹没。

确保在处理程序返回之前正确结束流。pipeline() 方法会自动处理此问题。

对于其他使用案例,请调用 responseStream.end() 方法以正确结束流。此方法表示不应向流写入更多数据。如果您使用 pipeline()pipe() 写入流,则不需要使用此方法。

例 使用 pipeline() 结束流的示例
const pipeline = require("util").promisify(require("stream").pipeline); exports.handler = awslambda.streamifyResponse(async (event, responseStream, _context) => { await pipeline(requestStream, responseStream);
例 不使用 pipeline() 结束流的示例
exports.handler = awslambda.streamifyResponse(async (event, responseStream, _context) => { responseStream.write("Hello "); responseStream.write("world "); responseStream.write("from "); responseStream.write("Lambda!"); responseStream.end();

使用 Lambda 函数 URL 调用支持响应流式处理的函数

注意

您必须使用函数 URL 调用函数才能流式处理响应。

您可以通过更改函数 URL 的调用模式来调用支持响应流式处理的函数。调用模式决定 Lambda 使用哪个 API 操作来调用函数。可用的调用模式有:

BUFFERED – 这是默认选项。Lambda 通过 Invoke API 操作调用函数。负载完成后,调用结果可用。最大负载大小为 6MB。

RESPONSE_STREAM – 使函数能够在负载结果可用时对其进行流式处理。Lambda 通过 InvokeWithResponseStream API 操作调用函数。最大响应负载大小为 20MB。但是,您可以请求提高限额

通过直接调用 Invoke API 操作,您仍然可以在不进行响应流式处理的情况下调用函数。但是,Lambda 会流式处理通过函数 URL 发出的调用的所有响应负载,直到您将调用模式更改为 BUFFERED

设置函数 URL 的调用模式(控制台)
  1. 打开 Lamba 控制台的函数页面

    选择您要为其设置调用模式的函数的名称。

    选择 Configuration(配置)选项卡,然后选择 Function URL(函数 URL)。

    选择编辑,然后选择其他设置

    调用模式下,选择所需的调用模式。

    选择 Save(保存)。

    设置函数 URL 的调用模式(AWS CLI)

    aws lambda update-function-url-config --function-name my-function --invoke-mode RESPONSE_STREAM

    设置函数 URL 的调用模式(AWS CloudFormation)

    MyFunctionUrl: Type: AWS::Lambda::Url Properties: AuthType: AWS_IAM InvokeMode: RESPONSE_STREAM

    有关配置函数 URL 的更多信息,请参阅 Lambda 函数 URL