我试图理解aws lambda的部署大小限制,因为在向lambda函数添加另一层后遇到以下错误:
An error occurred: <function name> - Function code combined with layers exceeds the maximum allowed size of 262144000 bytes. The actual size is 269081659 bytes. (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: <request ID>; Proxy: null).
我知道代码+层的总未压缩大小不能超过250 mib,但我不明白我的代码和层是如何突破这个限制的。我尤其不能使我的层加起来的'实际大小'中所述的错误。
我使用的是java8运行时,jar是54mib。解压后是140 mib。我有两个现有层,大小如下:
layercompressed sizeuncompressed SizeLasticSearch(jar)22 mib54 mibimagemagick17 mib58 mib压缩大小
我添加了另一层,ghostscript,它是16 mib压缩和34 mib未压缩。添加此层会导致上面的错误。
我的困惑是因为我无法使压缩/未压缩文件的任何组合与错误消息匹配。检查输出 aws lambda get-function
显示代码和层的未压缩大小。
此外,我单独部署了我的每一层并运行 df -h
在lambda示例中查看使用了多少空间。图层加载到 /opt
这个挂载点的大小或多或少等于elasticsearch和imagemagick的未压缩大小(在一到两兆字节之内,可能只是由于使用mb和mib不一致而有所不同)。然而 df
报告说 /opt
添加ghostscript层时为52MB,几乎是我机器上未压缩大小的两倍。即使有这些数字,我也找不到一个能给出错误中列出的“实际大小”的组合。
如何找出代码和层占用的实际空间?
计算压缩和未压缩大小的注意事项:
对于jar文件,我将jar文件本身的大小作为压缩大小。对于未压缩的大小,我使用了 unzip
命令并使用文件夹的大小。
对于层,我使用了从aws控制台下载的zip文件的大小(它与 aws lambda get-function
命令)作为压缩大小。对于未压缩的大小,我提取了zip文件并使用了文件夹的大小。
暂无答案!
目前还没有任何答案,快来回答吧!