为什么无服务器函数(例如 AWS Lambda)有 zip 文件大小限制?
Why serverless functions (e.g. AWS Lambda) have zip file size limit?
我想知道为什么无服务器函数在部署时有这么小的大小限制?
例如具有依赖项的 AWS lambda 压缩函数不能超过 50MB。为什么这么低的限制?
谢谢!
据我了解。
将第一个请求推送到 lambda(或冷启动)后,AWS 将下载并解压缩,然后为 运行 函数准备环境。
如果功能比较大,拉取、解压、执行可能需要很长时间。
为什么您需要在 lambda 上将 zip 压缩超过 50 MB 您可以调整您的设计并使用它?
所以 50 MB lambda+250 MB 层 = 300 MB
AES 层 -
" 层使 运行 Lambda 函数与自定义 运行 时间代码成为可能。层为 Lambda 带来的最令人兴奋的好处之一是能够 运行 Lambda 函数在任何编程语言中."
When building serverless applications, it is quite common to have code
that is shared across Lambda functions. It can be your custom code,
that is used by more than one function, or a standard library, that
you add to simplify the implementation of your business logic.
创建最大 50 MB 大小的 Lambda 函数部署包(.zip/.jar 文件)
创建另一个大尺寸的 code/dependencies,您可以将其压缩到部署包中(.zip/.jar 大小)
注意:将文件存储在 S3 存储桶中并上传然后包大小可以大于 50 MB,如果通过 S3 上传而不是直接上传。
更新:- 为什么? , 限制
AWS Lambda 限制对其资源进行有效的内部容量规划,每当向外部开发团队发布任何产品时都会进行测试和基准分析并分享最佳实践和限制。
以下可能的限制原因:
1) 当调用labda函数时,它会开始环境配置和加载你的代码并执行,如果你上传的文件很大,那么这个冷启动将需要很长时间。
2) 并发数:
AWS Lambda allows you to use normal language and operating system
features, such as creating additional threads and processes. Resources
allocated to the Lambda function, including memory, execution time,
disk, and network use, must be shared among all the threads/processes
it uses
然而,Lambda 函数可用的 CPU 在所有线程之间共享,并且线程不会通过 运行 并行工作在 Lambda 函数中获得更多 CPU,因此线程开始饥饿和sleep 很长,如果您正在通过并发请求访问 lambda,那么 lambda 将启动新容器来支持您的请求,并且大文件大小再次开始在此处添加延迟。
无服务器概念和 Lambda 的想法是让 "small" 函数(即没有太多代码)具有单一职责。如果打包代码的大小大于 50 MB,要么是你的打包有问题,要么是你的函数中有太多代码,你应该重新考虑你的设计(也许你想在功能如此庞大以至于 Lambda 不是适合它的工具?)。
此外,正如其他人所写,Lambda 函数的代码大小是有限的,因为 Lambda 需要在函数的每次冷启动(调用)时加载和初始化整个函数。
我想知道为什么无服务器函数在部署时有这么小的大小限制?
例如具有依赖项的 AWS lambda 压缩函数不能超过 50MB。为什么这么低的限制?
谢谢!
据我了解。
将第一个请求推送到 lambda(或冷启动)后,AWS 将下载并解压缩,然后为 运行 函数准备环境。
如果功能比较大,拉取、解压、执行可能需要很长时间。
为什么您需要在 lambda 上将 zip 压缩超过 50 MB 您可以调整您的设计并使用它?
所以 50 MB lambda+250 MB 层 = 300 MB
AES 层 - " 层使 运行 Lambda 函数与自定义 运行 时间代码成为可能。层为 Lambda 带来的最令人兴奋的好处之一是能够 运行 Lambda 函数在任何编程语言中."
When building serverless applications, it is quite common to have code that is shared across Lambda functions. It can be your custom code, that is used by more than one function, or a standard library, that you add to simplify the implementation of your business logic.
创建最大 50 MB 大小的 Lambda 函数部署包(.zip/.jar 文件)
创建另一个大尺寸的 code/dependencies,您可以将其压缩到部署包中(.zip/.jar 大小)
注意:将文件存储在 S3 存储桶中并上传然后包大小可以大于 50 MB,如果通过 S3 上传而不是直接上传。
更新:- 为什么? , 限制
AWS Lambda 限制对其资源进行有效的内部容量规划,每当向外部开发团队发布任何产品时都会进行测试和基准分析并分享最佳实践和限制。
以下可能的限制原因:
1) 当调用labda函数时,它会开始环境配置和加载你的代码并执行,如果你上传的文件很大,那么这个冷启动将需要很长时间。
2) 并发数:
AWS Lambda allows you to use normal language and operating system features, such as creating additional threads and processes. Resources allocated to the Lambda function, including memory, execution time, disk, and network use, must be shared among all the threads/processes it uses
然而,Lambda 函数可用的 CPU 在所有线程之间共享,并且线程不会通过 运行 并行工作在 Lambda 函数中获得更多 CPU,因此线程开始饥饿和sleep 很长,如果您正在通过并发请求访问 lambda,那么 lambda 将启动新容器来支持您的请求,并且大文件大小再次开始在此处添加延迟。
无服务器概念和 Lambda 的想法是让 "small" 函数(即没有太多代码)具有单一职责。如果打包代码的大小大于 50 MB,要么是你的打包有问题,要么是你的函数中有太多代码,你应该重新考虑你的设计(也许你想在功能如此庞大以至于 Lambda 不是适合它的工具?)。
此外,正如其他人所写,Lambda 函数的代码大小是有限的,因为 Lambda 需要在函数的每次冷启动(调用)时加载和初始化整个函数。