- 阿里云函数计算的内存最大是100M,如果函数加依赖的大小不超过100M,可以使用以下前三种方法
第一种:使用pip直接安装
特点:适用于需要安装的依赖少且小
安装方式:在函数根目录下使用命令pip install -t . xxx
,意为将依赖安装到项目根目录,没有任何组织结构
第二种:使用funcraft安装
特点:自动组织依赖结构,安装方式可以用FunFile或者fun install单独安装两种方式
安装方式:参考阿里云官方文档 Funcraft
如果遇到问题可以参考另一篇文章
第三种:使用Serverless Devs安装
特点:阿里云官方推荐方法,据说funcraft方法以后会被淘汰
安装方式:阿里云官方文档 Serverless Devs
- 如果函数加依赖的大小超过100M,使用以下几种方法:
一、使用Funcraft自动化部署
使用
fun install
安装的依赖,再通过fun deploy
部署可以自动解决大依赖问题,但是需要提前开通Nas服务,这种方法借用了Nas来部署依赖,函数计算只部署了代码
参考开发函数计算的正确姿势——轻松解决大依赖部署
二、使用initializer在函数初始化时加载第三方依赖
原理和过程参考使用 initializer 接口解决函数计算上传代码包大小受限问题
整个过程是:
- 在本地下载好依赖打包成zip格式上传到oss桶中(如果项目是深度学习模型,也需要将模型放到oss中)
- 创建服务和函数,函数需要配置函数初始化为loader.initializer,函数入口为loader.handler
- 在自己的代码中添加loader.py,在loader.initializer中实现将依赖和模型加载到
/tmp/
目录下的过程,可以在上文中进行改进,添加模型和依赖是否已经加载到本地的判断从而避免不必要的加载过程- 在loader.py的handler中调用index.py的handler
在文中提到的几个环境变量,如AppLibObject是oss里面的对象,AppLibDir是/tmp/目录下的某个文件夹,可自行设置,也可以不用环境变量的方式写成变量
需要注意的问题:函数计算的环境是Linux,如果是从Windows下安装依赖上传到函数计算上,可能存在no module named xxx这种问题,所以最好用Linux安装好依赖再打包到OSS上