amazon-web-services - 如何取消 lambda 中太大或太慢的下载?
问题描述
我在 lambda 函数中使用 axios 从用户提供的 url 下载文件。显然,该文件可以是任何大小,并且可以以任何速度提供服务。我担心这可能会产生拒绝服务和拒绝钱包风险。
我不知道 aws 是否对 lambda 入口收取任何费用,我还没有找到明确的答案。即使他们不这样做,大型上传仍然可能迫使我的 lambda 运行更长时间(花费我的钱)并可能将我推向我设定的速率限制,部分原因是为了减轻洪水攻击风险(拒绝人员服务) .
同样,非常慢的下载可能会导致我的 lambdas 运行直到超时。我的超时设置得相当高,因为下载文件后需要处理。我宁愿在几秒钟后打包,因为输入数据应该总是小而快。
所以我想要的是,如果下载达到预设的最大字节大小或最大下载时间,则下载中止。
如果使用 Axios 无法添加这些限制,那么我愿意使用不同的库,例如 node-fetch。
解决方案
在 axios 端本身可以设置 timeout 和 maxContentLength 来限制请求时间和下载时间。Lambda 最大超时 15 分钟。
如果您可能有很多冗长的请求,最好使用 EC2。高内存和高持续时间的大量 Lambda 请求最终比 EC2 成本更高。基本上无服务器确实具有成本效益且易于操作,尤其是对于尖峰类型的工作负载。对于稳定的 24/7 工作负载、较长的处理时间,最好使用 VM。
推荐阅读
- activemq-artemis - ActiveMQ Artemis - 按顺序处理消息
- java - 将 Shedlock 与 mongo 一起使用时如何解决此编解码器错误
- powershell - 为什么我不能始终清除默认网关?
- google-calendar-api - 为什么我在创建事件时收到 parseerror 错误
- ansible - 如果匹配多个模式,则从列表中过滤掉元素
- r - 使用 ggplot 在 R 中绘制组合 shapefile 时出现问题,未给出定义错误
- c++ - 如何使 Visual Studio (2019) 在当前窗口中始终以选项卡的形式打开新文件?
- git - 将存储库合并到 monorepo
- ios - 我的 tableview 正在注册单元格之前设置数据
- python - 在 GET 请求后发送 POST 请求时,Flask 视图函数丢失请求参数