【问题标题】:How can I cancel a download that's too big or slow in a lambda?如何取消 lambda 中太大或太慢的下载?
【发布时间】:2021-12-08 22:28:42
【问题描述】:

我在 lambda 函数中使用 axios 从用户提供的 url 下载文件。显然,该文件可以是任何大小,并且可以以任何速度提供服务。我担心这可能会造成拒绝服务和拒绝钱包风险。

我不知道 aws 是否对 lambda 入口收取任何费用,我还没有找到明确的答案。即使他们不这样做,大量上传仍可能迫使我的 lambda 运行更长时间(花费我的钱)并可能将我推向我设定的速率限制,部分原因是为了减轻洪水攻击风险(拒绝人员服务) .

同样,下载速度非常慢可能会导致我的 lambda 表达式一直运行到超时。我的超时设置得相当高,因为下载文件后需要处理。我宁愿在几秒钟后打包,因为输入数据应该总是小而快。

所以我想要的是,如果下载达到预设的最大字节大小或最大下载时间,则下载中止。

如果使用 Axios 无法添加这些限制,那么我愿意使用不同的库,例如 node-fetch。

【问题讨论】:

  • Axios Cancellation 没有帮助吗?另外,请注意,您可以使用 context.getRemainingTimeInMillis() 从 Lambda 上下文中检索“直到 Lambda 超时的时间”。
  • 另外,是的,AWS Lambda 会向您的 Lambda 函数收取data transfer fees 的费用,区域内除外。
  • 在axios端自己可以设置一个timeout和maxContentLength来限制请求时间和下载时间。 Lambda 最大超时我们 15 分钟。如果您可能有很多冗长的请求,最好使用 EC2。高内存和高持续时间的大量 Lambda 请求最终比 EC2 成本更高
  • @addicted - 这是正确的答案,非常感谢。如果您想将其作为实际答案提交,我将很乐意接受它,以便您获得荣誉。
  • 谢谢@RogerHeathcote!让我提交,非常感谢您的澄清!

标签: amazon-web-services aws-lambda axios fetch


【解决方案1】:

在 axios 端本身可以设置 timeout 和 maxContentLength 来限制请求时间和下载时间。 Lambda 最大超时 15 分钟。

如果您可能有很多冗长的请求,最好使用 EC2。高内存和高持续时间的大量 Lambda 请求最终比 EC2 成本更高。基本上无服务器确实具有成本效益且易于操作,特别是对于尖峰类型的工作负载。对于稳定的 24/7 工作负载、较长的处理时间,最好使用 VM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2021-05-30
    • 1970-01-01
    • 2019-01-19
    • 2018-04-05
    相关资源
    最近更新 更多