什么是 AWS Lambda Layer(层)

AWS Lambda 层(Layer) 是包含库、自定义运行时或其他依赖项的 ZIP 存档文件。通过层,可以在函数中使用库、其它依赖的数据文件,而无需将它们包含在项目代码的部署包中。

使用层,将依赖项独立出来管理。也可以通过此方法为函数提供支持更大体积的依赖文件。

我们在开发 Lambda 应用的时候,通常会有多个 Lambda 函数都共用的代码以及依赖的第三方包。 Lambda 函数要调用这些依赖包,

1)原来的做法是在每个 Lambda 函数打包的时候,连带依赖包一起打包。每个函数都这么做是不方便,也影响速度的。或者可以多个 Lambda 函数连同所有依赖包打包成一个大的包,但这样也不好管理。

2)现在 AWS Lambda 新增了“层( Layer )” 功能使得可以单独上传并集中管理 Lambda 的依赖包了,这样 Lambda 函数打包的时候就只需要打包该函数本身的代码,依赖包只需要引用即可。这样的好处是显而易见的:

这样,
1)开发者不用再关注依赖包,而可以更专注于业务逻辑的开发。
2)使得函数代码变小了,加快了部署的速度。
3)可以跨 AWS 账户共享代码和依赖包,可以通过 Policy 控制只共享给某个账户,或者共享给所有账户都能分享你的代码成果。

(以上内容引用自 AWS Blog

要在层中包含的库,需要将库文件放在与编程语言相对应的目录结构中。

Node.js – nodejs/node_modules
Python – python/your_files
Ruby – ruby/gems/2.5.0
Java – java/lib

然后将文件夹压缩打包成 zip 文件。
将 zip 文件上传添加到 Layer。参考 AWS 通过 Lambda Layer 的方式部署依赖项

在 Lambda 函数运行时,Layer 中文件将被释放到 /opt/ 路径中。
例如:

  • python:/opt/python/your_files
  • node.js:/opt/nodejs/node_modules

在函数中可以直接 importrequire 库。

参见 AWS Lambda 添加字体依赖项