本文介绍函数计算层(Layer)的基本原理和用法,层为您提供自定义的公共依赖库、运行时环境、函数扩展等发布与部署能力。您可以将函数依赖的公共库提炼到层,以减少部署、更新时的代码包体积,也可以将自定义的Runtime以层部署,在多个函数间共享。
使用方法
工作原理
层作为函数可额外附加的代码目录,部署在函数执行环境的/opt目录下,当函数配置多个层时,这些层的内容被合并至/opt目录。如果层的内容重合,会按照函数配置层的顺序依次挂载,以更靠后层的内容为准。对于部署于层的函数依赖库,如果按照规范的方式打包,函数计算运行时会为您自动附加上寻址地址,即您无需指定全路径。
层的构建
层的构建与代码包构建方式类似,为使函数计算运行时能正确加载以层发布的库,库的代码目录结构需要遵从各语言标准的目录规范,您也可以自由设计目录结构,但需要在函数里显式指名库的加载地址,即指定库的全路径。下面以Python和Node.js为例来说明层的构建方法。
- 以Python为例
#先创建待构建层目标目录。 mkdir -p target/python #使用pip指定目录下载依赖库,或将您自己的库拷贝至如下地址: #target/python #或者target/python/lib/python{major-version}.{minior-version}/site-packages/ pip install --target=target/python ${PACKAGE_NAME} #进入目标目录,对于该目录整体打包,输出名为${PACKAGE_NAME}压缩包,该压缩包即可作为层的代码包。 cd target/ && zip -r ${PACKAGE_NAME} ./*
- 以Node.js为例
#先创建待构建层目标目录。 mkdir -p target/nodejs #进入指定目录使用npm安装Node.js依赖库,或将您自己的库拷贝至如下地址: #target/nodejs/node_modules #或者target/nodejs/node{version}/node_modules cd target/nodejs npm init npm install --save ${PACKAGE_NAME} #进入目标目录,对于该目录整体打包,输出名为${PACKAGE_NAME}压缩包,该压缩包即可作为层的代码包。 cd ../ zip -r ${PACKAGE_NAME} ./*
层的管理
您可以通过控制台、SDK、HTTP Request等方式来管理层。控制台上管理层的具体操作,请参见层的相关操作。
在函数中使用层
函数层的配置
在创建函数与更新函数时,可以指定一组层的Arn地址,配置方式可参照API文档,您选择的层必须与函数的Runtime兼容。
函数层的应用
部署于层的库,如果以规范的方式构建,可以在函数代码中直接引用,下文以Node.js为例,创建或更新函数时引用包含moment库的层后,可以在函数代码中直接require moment库。
const moment = require('moment');
module.exports.handler = function(event, context, callback) {
console.log('Receive event:', event.toString());
let momentNow = moment.now();
callback(null, JSON.stringify({momentNow}));
};
使用限制
- 一个函数最多创建5个层。
- 层解压后须小于50 MB。