【发布时间】: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