繁体   English   中英

如何为AWS Lambda捆绑Python

[英]How to bundle Python for AWS Lambda

我有一个项目我想在AWS Lambda上运行,但它超过了50MB的压缩限制。 现在它的压缩为128MB,带有虚拟环境的项目文件夹位于623MB并包含(空间的顶级用户):

  • scipy(~187MB)
  • 熊猫(~108MB)
  • numpy(约74.4MB)
  • lambda_packages(~71.4MB)

没有virtualenv该项目<2MB。 requirements.txt是:

click==6.7
cycler==0.10.0
ecdsa==0.13
Flask==0.12.2
Flask-Cors==3.0.3
future==0.16.0
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
matplotlib==2.1.2
mpmath==1.0.0
numericalunits==1.19
numpy==1.14.0
pandas==0.22.0
pycryptodome==3.4.7
pyparsing==2.2.0
python-dateutil==2.6.1
python-dotenv==0.7.1
python-jose==2.0.2
pytz==2017.3
scipy==1.0.0
six==1.11.0
sympy==1.1.1
Werkzeug==0.14.1
xlrd==1.1.0

我使用Zappa进行部署,因此我对整个基础架构的理解是有限的。 我的理解是一些(很少)的库没有上传,所以例如numpy,那部分没有上传,亚马逊的版本被使用,已经在该环境中可用。

我建议使用以下工作流程(不使用slim_handler S3存储桶):

  1. 删除所有包中与“test _ * .py”匹配的所有文件
  2. 手动树震动scipy因为我只使用scipy.minimize ,删除大部分并重新运行我的测试
  3. 缩小所有代码并使用pyminifier混淆
  4. zappa部署

要么:

  1. 运行compileall以获取.pyc文件
  2. 删除所有* .py文件,让zappa上传.pyc文件
  3. zappa部署

我遇到了slim_handler: true问题slim_handler: true ,我的连接断开,上传失败或发生其他一些错误,并且上传到S3的约25%我得到Could not connect to the endpoint URL 出于这个问题的目的,我希望将依赖关系降低到可管理的级别。

然而,主应用程序小于2MB的超过一半的依赖关系必须是某种记录。

我的问题是:

  1. AWS的解压缩限制是多少? 是250MB还是500MB?
  2. 我是否采用上述方法缩小包装尺寸?
  3. 是否可以更进一步使用.pyz文件?
  4. 是否有任何标准实用程序可以帮助解决上述问题?
  5. 是不是有用于python的树摇动库?
  1. AWS中的限制是针对解压缩的250MB代码(如https://hackernoon.com/exploring-the-aws-lambda-deployment-limits-9a8384b0bec3所示
  2. 我建议去第二种方法并编译所有内容。 我认为你还应该考虑使用无服务器框架。 它不会强迫你创建非常沉重的virtualenv。

我已经看到你的所有包都可以压缩到83MB(只是包)。

我的解决方法是:

  1. 使用无服务器框架(考虑从flask直接移动到API网关)
  2. 使用以下方法在本地安装您的软件包:

     pip install -r requirements.txt -t . 
  3. 尝试编译.pyc文件的方法,并删除其他文件。

  4. 部署:

     sis deploy 

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM