AWS Lambda 错误:解压缩后的大小必须小于 262144000 字节

Posted

技术标签:

【中文标题】AWS Lambda 错误:解压缩后的大小必须小于 262144000 字节【英文标题】:AWS Lambda Error: Unzipped size must be smaller than 262144000 bytes 【发布时间】:2018-01-02 17:20:57 【问题描述】:

我正在开发一个 lambda 函数,它使用 Python 2.7 中的 ResumeParser 库。但是当我在 AWS 上部署包括库在内的这个函数时,它会抛出以下错误:

解压后的大小必须小于 262144000 字节

【问题讨论】:

【参考方案1】:

也许您没有排除使您的文件变得那么大的开发包。

我的情况,(对于 NodeJS)我在 serverless.yml 中遗漏了以下内容:

package:
  exclude:
    - node_modules/**
    - venv/**

查看 Python 或您的情况是否有类似之处。

【讨论】:

哇,我整个下午都在寻找解决这个问题的方法。非常感谢! 当您的代码尝试加载/使用包时,删除“node_modules/**”会导致运行时错误吗? 排除 Node 函数的所有依赖项并不是必须的,尤其是对于像 Serverless 这样的工具,因为它已经排除了开发依赖项。确保将 aws-sdk 之类的包作为开发依赖项安装意味着您可以在包中没有膨胀的情况下完成代码。 @epetousis 你确定我们需要aws-sdk 作为开发依赖而不是实际依赖吗? @kittu 它没有真正记录在任何地方,但 aws-sdk 确实预安装在 Lambda 映像中。将 aws-sdk 安装为生产依赖项只会影响 Lambda 的预安装 aws-sdk,这可能是可取的,也可能不是可取的,例如,如果您出于某种原因需要锁定软件包版本。 SO上有一个讨论node.js图像依赖关系的线程:***.com/questions/53566478/…)【参考方案2】:

这是一个hard limit,无法更改:

AWS Lambda 限制错误

超过前面限制表中列出的任何限制的函数将失败,并出现超出限制异常。这些限制是固定的,目前无法更改。例如,如果您从 AWS Lambda 收到异常 CodeStorageExceededException 或类似“超出代码存储限制”的错误消息,则需要减少代码存储的大小。

您需要减小包裹的大小。如果您有大型二进制文件,请将它们放在 s3 中并在引导程序上下载。同样对于依赖项,您可以从 s3 位置 pip installeasy_install 它们,这将比从 pip 存储库中提取更快。

【讨论】:

谢谢,就我而言,我认为我们没有大型二进制文件。正在安装的 pip 包增加了总 zip 的大小。如果我要尝试通过 pip (s3) 安装。打包项目的时候不会还下载吗? 如果不在包内则不会被AWS拒绝,使用pip安装即可。【参考方案3】:

对我有用的解决方法: 安装pyminifier:

    pip install pyminifier

转到您要压缩的库文件夹。就我而言,我想将 site-packages 文件夹压缩到我的虚拟环境中。所以我在 site-packages 所在的同一级别创建了一个 site-packages-min 文件夹。运行以下 shell 脚本以缩小 python 文件并在 site-packages-min 文件夹中创建相同的结构。压缩这些文件并将其上传到 S3。

    #/bin/bash

    for f in $(find site-packages -name '*.py')
    do
            ori=$f
            res=$f/site-packages/site-packages-min
            filename=$(echo $res| awk -F"/" 'print $NF')
            echo "$filename"
            path=$res%$filename
            mkdir -p $path
            touch $res
            pyminifier --destdir=$path $ori >> $res || cp $ori $res
    done        

HTH

【讨论】:

有没有办法通过无服务器配置来做到这一点?您是如何将 zip 文件上传到 S3 的? 有,结帐***.com/questions/63535960/…

以上是关于AWS Lambda 错误:解压缩后的大小必须小于 262144000 字节的主要内容,如果未能解决你的问题,请参考以下文章

AWS CodeBuild 解压后的大小必须小于 350198 字节

AWS Lambda (Python) 无法在 S3 中解压缩和存储文件

使用Zappa部署lambda时出错:调用UpdateFunctionCode操作时:解压后的大小必须小于262144000字节

在 pom 中添加硒依赖项后,AWS Lambda Jar 无法压缩

如果通过验证,AWS lambda 读取 zip 文件执行验证并解压缩到 s3 存储桶

在AWS lambda函数上使用pyspark二进制文件,在向驱动程序发送其端口号之前退出错误Java网关进程