来源:使用层功能管理依赖减少代码包体积并实现代码复用_函数计算(FC)-阿里云帮助中心 (aliyun.com)
层可以为您提供公共依赖库、运行时环境及函数扩展等发布与部署能力。您可以将函数依赖的公共库提炼到层或者使用函数计算官方公共层,以减少部署或更新函数时的代码包体积。
功能原理
-
构建层时,需要将所有内容打包到ZIP文件中。函数计算运行时会将层的内容解压并部署在/opt目录下。
-
当函数配置多个层时,这些层的内容将被合并至
/opt
目录,多个层按照层配置的逆序合并。如果某一文件与其他层中的文件同名,则先配置层中的该文件会覆盖后配置层中的该同名文件。例如,为某函数配置了第1层和第2层,函数实例启动时,会先加载第2层,后加载第1层,并将其解压至
/opt
目录。在/opt
目录中,第1层的内容在前,第2层的内容在后,如果第1层和第2层中存在同名文件,那么第1层中的该文件会覆盖第2层中的该文件内容。 -
如果层中的代码依赖二进制的库或可执行文件,则需要使用Linux系统编译构建层,推荐使用Debian 9。
-
函数计算运行时基于x86_64架构,如果层中的依赖库对指令集有依赖,则需要使用x86_64架构的机器,或者通过交叉编译的方式确保依赖库与函数计算运行时兼容。
各运行时使用层说明
如果运行时支持层功能,函数计算会将特定的目录添加到运行时语言的依赖包搜索路径中,如下表所示。建议您在层ZIP包中定义与下方列举的特定目录相同的文件夹结构,使得函数代码无需指定路径即可访问层。具体构建层的ZIP包的方法,请参见构建层的ZIP包。如您想自定义层的目录结构,需要在代码中显式添加依赖库搜索地址。具体操作,请参见如何在Custom Runtime中引用层中的依赖。
各运行时支持添加的特定目录
运行时 特定目录
python /opt/python
其它运行时请点击文章顶部的来源查看原文
Python运行时的层ZIP包文件结构
使用requests依赖打包后的文件结构 my-layer-code.zip └── python └── requests ZIP包解压部署后的路径 / └── opt └── python └── requests
构建层的ZIP包
创建层时,需要将所有内容打包到ZIP文件中。函数计算运行时会将层的内容解压并部署在/opt目录下。
构建层的ZIP包的方式和构建代码包的方式类似,为使函数在运行时能正确加载使用层发布的库,库的代码目录结构需遵从各个语言标准的目录规范,具体信息,请参见各运行时使用层说明。对于部署于层的函数依赖库,如果按照规范的方式打包,函数计算运行时会为您自动添加各语言的依赖库搜索路径,您无需指定全路径。如您想自定义层的目录结构,需要在代码中显式添加依赖库搜索地址。具体操作,请参见如何在Custom Runtime中引用层中的依赖。
各运行时构建层ZIP包的操作步骤如下所示:
说明
在本地构建层时,使用的编程语言版本需要和在函数计算选择的运行时的编程语言版本保持一致。
下面创建的工作目录my-layer-code仅为示例,您在实际操作过程中可以按需替换目录名称。
1、执行以下命令创建工作目录。
mkdir my-layer-code
2、进入已创建的工作目录。
cd my-layer-code
3、执行以下命令安装依赖库到my-layer-code/python。
pip install --target ./python ${PackageName}
${PackageName}是您要安装的依赖包的名称,pip install
命令的详细使用方法,请参见pip install。
代码示例如下:
pip install --target ./python numpy
安装完成后,目录结构如下:
my-layer-code └── python ├── bin ├── numpy ├── numpy-1.22.4.dist-info └── numpy.libs
4、在my-layer-code目录,执行以下命令打包依赖。
zip -r my-layer-code.zip python
在函数计算添加层
-
登录函数计算控制台,在左侧导航栏,选择高级功能 > 层管理。
-
在顶部菜单栏,选择地域,然后在层管理页面,单击创建层。
-
在创建层页面,设置相关参数,然后单击创建。
- 上传刚刚创建的zip文件并选择版本