【问题标题】:AWS Lambda Consumes time when uploading files to S3 using node.jsAWS Lambda 在使用 node.js 将文件上传到 S3 时消耗时间
【发布时间】:2018-02-15 14:58:36
【问题描述】:

我在 lambda 上的程序的工作原理是,它首先在 url 的帮助下从 twilio 获取文件,然后将其存储在我的 lambda 中的 /tmp 中,然后该文件从 lambda 的 /tmp 上传到 aws S3。我担心的是,如果它是一个大文件,比如 200MB,那么 lambda 会运行很长时间。有没有办法在 lambda 上传到 s3 时停止它,然后在 s3 上传成功完成时唤醒。并且可以下载类似的概念,以便 lambda 可以停止,当文件上传到 /tmp 时,它会唤醒并将文件上传到 AWS S3 。这样可以节省很多时间

【问题讨论】:

  • 运行 Lambda 的容器在您执行任何这些操作时必须处于活动状态,因此它不能“休眠”然后回来,并且从容器上传和读取需要执行时间。如果这种情况经常发生并且您的代码每次都运行很长时间,那么您的用例可能对 Lambda 来说不是最理想的。
  • 如果停止 lambda,则上传停止。

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


【解决方案1】:

/tmp 所在的硬盘驱动器和处理上传/下载的 CPU 以及上传/下载使用的缓冲区所需的内存...由 running Lambda 容器提供正在处理传输。

您可以访问这些资源正是因为您为正在运行的 Lambda 容器付费。

如果可以阻止它运行或暂停它,您将无法访问这些资源,上传/下载也将停止。

这不可能。

【讨论】:

  • 没有任何 api 可以将文件直接下载到 s3 而没有 lambda 在它们之间。只是 lambda 中的 api 调用和 url 传递,其余的将由 api 处理?
  • 您无法向 Amazon S3 发出任何 API 请求来指示它从外部获取内容。如果您的帐户对源对象具有权限,则可以请求 S3 从另一个 S3 存储桶(或同一个存储桶)获取和复制内容,但这仍然是一个同步/阻塞 API 调用——您必须在等待时保持连接响应。
  • Michael,这意味着我无法从公共 url 向 s3 存储桶发送数据,除非我有 ec2 服务器或任何中间服务器?
  • 当然,除了使用 Lambda 之外,这是正确的。我已经考虑创建一个可以代表用户执行此操作的服务,但我还没有得出关于这种服务可能有多少需求的结论......一种异步传输服务,它会立即响应并给你用于轮询状态的后续 URL,或在传输完成时向您发送 webhook。
  • 我试图找到一个外部第三方 api 来将数据从公共 url 传输到 AWS s3 ,带有 url 的请求将从我的 AWS lambda 传输,因此 lambda 不会存储文件在 /tmp 上,api 将完成将文件保存和传输到 S3 的所有处理。由于 Lambda 将运行大量时间来保存 '/tmp' ,然后将其转移到 s3。
猜你喜欢
  • 1970-01-01
  • 2021-03-18
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
相关资源
最近更新 更多