首页 > 解决方案 > 如何取消 lambda 中太大或太慢的下载?

问题描述

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

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

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

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

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

标签: amazon-web-servicesaws-lambdaaxiosfetch

解决方案


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

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


推荐阅读