为什么无服务器功能(例如AWS Lambda)具有zip文件大小限制?

时间:2019-12-11 15:21:50

标签: amazon-web-services aws-lambda serverless

我想知道为什么无服务器功能在部署时会有如此小的限制?

例如具有依赖项的AWS lambda压缩函数不能超过50MB。为什么这么低的限制?

谢谢!

3 个答案:

答案 0 :(得分:2)

据我了解。

将第一个请求推送到lambda(或冷启动)后,AWS将下载并解压缩,然后准备env以运行该功能。

如果功能较大,则执行和解压缩可能需要很长时间。

答案 1 :(得分:2)

无服务器概念和Lambda的想法是具有“小”功能(即,没有太多的代码),这些功能只承担单一责任。如果打包的代码的大小大于50 MB,则说明打包有问题,或者函数中的代码过多,您应该重新考虑设计(也许要在内部执行的任务)。函数是如此之大,以至于Lambda不是合适的工具?)。

另外,正如其他人所写,Lambda函数的代码大小受到限制,因为Lambda需要在函数的每次冷启动(调用)时加载并初始化整个事情。

答案 2 :(得分:1)

为什么您需要在lambda上推送超过50 MB的zip压缩文件,然后才能调整设计并使用它?

因此50 MB lambda + 250 MB层= 300 MB

AES层- “层使使用自定义运行时代码运行Lambda函数成为可能。层带给Lambda的最令人兴奋的好处之一就是能够以任何编程语言运行Lambda函数。”

  

在构建无服务器应用程序时,拥有代码非常普遍   在Lambda函数之间共享。它可以是您的自定义代码,   由多个功能或标准库使用的   您可以添加以简化业务逻辑的实现。

注意:如果通过S3上传而不是直接上传,则将文件存储在S3存储桶中并上传,然后程序包大小可以大于50 MB。

更新:-为什么? ,限制

无论何时向外部开发团队发布任何产品进行测试和基准分析,并共享最佳实践和局限性,AWS Lambda都必须对资源进行有效的内部容量规划。

以下可能的限制原因:

1)调用labda函数时,它将启动环境配置并加载您的代码并执行,如果您上传的文件大小很大,则此冷启动将花费很长时间。

2)并发性:

  

AWS Lambda允许您使用常规语言和操作系统   功能,例如创建其他线程和进程。资源资源   分配给Lambda函数,包括内存,执行时间,   磁盘和网络使用必须在所有线程/进程之间共享   它使用

但是,Lambda函数可用的CPU在所有线程之间共享,并且线程不会通过并行运行工作而在Lambda函数中获得更多的CPU,因此线程开始挨饿并睡眠很长的时间,如果您在并发请求的情况下遇到lambda,则lambda将启动新容器来支持您的请求,然后再次增大文件大小,开始在此处增加延迟。