【问题标题】:NodeJS stream out of AWS Lambda functionNodeJS 从 AWS Lambda 函数中流出
【发布时间】:2019-04-08 12:07:36
【问题描述】:

我们正在尝试将我们的 zip 微服务从 nodejs Express 中的常规应用程序迁移到与 AWS Lambda 集成的 AWS API Gateway。
我们当前的应用程序向我们的 API 发送请求,获取附件列表,然后访问这些附件并将其内容以 zip 存档的形式返回给用户。它看起来像这样:

module.exports = function requestHandler(req, res) {

  //...
  //irrelevant code
  //...

  return getFileList(params, token).then(function(fileList) {
    const filename = `attachments_${params.id}`;
    res.set('Content-Disposition', `attachment; filename=${filename}.zip`);

    streamFiles(fileList, filename).pipe(res); <-- here magic happens
  }, function(error) {
    errors[error](req, res);
  });
};

除了必须从 Lambda 函数流式传输内容的部分之外,我已经设法完成了所有工作。
我认为可能的解决方案之一是使用 aws-serverless-express,但我想要一个更优雅的解决方案。

有人有什么想法吗?甚至可以从 Lambda 中流出吗?

【问题讨论】:

    标签: node.js amazon-web-services express aws-lambda


    【解决方案1】:

    不幸的是,lambda 不支持将流作为事件返回值。 (很难在文档中明确提到它,除非注意在工作 documentation 中如何描述调用和上下文/回调)。

    在您的示例中,您必须等待streamFiles,然后返回完成的结果。

    aws-serverless-express 在这里无济于事,如果您检查代码,他们会等待您的管道完成后再返回:https://github.com/awslabs/aws-serverless-express/blob/master/src/index.js#L68

    n.b.这里有一个细微差别,许多语言 SDK 支持请求/响应的流式传输,但这意味着连接到流传输,例如流从 lambda 下载完整响应,而不是监听从 lambda 发出的流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 2018-11-17
      • 2020-07-28
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      相关资源
      最近更新 更多