用 AWS Lambda Layers 使用外部库
- 7月19日
- 讀畢需時 2 分鐘
Lambda层是一种可以把从Lambda函数代码中调用的库加以公用化的机制。可以把单独打包的库,供不同的Lambda函数共同使用。Lambda在被调用时,会连同函数一起加载Lambda层。
Lambda层的便利之处
跨多个函数复用代码
把公共功能分离到层中,多个Lambda函数之间就更容易共享同一个库。这样一来,就不会再有把相同代码到处复制、以及必须逐个进行更新与调试的问题。
此前,为避免代码复制的解决办法,是把公共功能实现为独立的Lambda函数。在某些情况下,那也可能是理想的解决方案。但那种实现方式的问题在于,需要从函数到函数的额外调用。某些情况下还需要并行执行函数,从而增加了函数的执行成本与调试工作量。
使用层,就能在不进行额外函数调用的情况下共享公共库。
让函数的打包代码保持小巧
若为每个函数编写大量代码,应用的维护与测试可能变得更困难。部署也可能变慢。
为让应用的包保持小巧而使用层,可以把两个以上函数共同使用的功能分离出来。不必多次部署相同代码,层只需部署一次。
简化主功能的管理与部署
让函数的包保持小巧,可缩短部署时间。使用大型依赖时,主函数的代码可能只有数兆字节,而整个包最多可达50MB。
这些较大的依赖很少变更,因此把它们打包为层并只部署一次,主函数每次变更时就不必再部署它们。
Lambda Layer 的实现方法
官方信息记载在以下页面。
在此基础上,仅把我实际操作的内容简洁地整理如下。
Layer的代码会展开到 /opt 之下,/opt 之下的若干目录已经配置了PATH。
为了把Python库做成Layer,让其展开到 /opt/python。这样就会被自动加载。
编写要做成Layer的代码并打包为zip
把要做成Layer的代码写成如下形式。
python/layer.py
def test():
return 'Layer 调用成功!'把这段代码打包成zip
$ zip -r layer.zip ./python
创建层,上传ZIP
在Lambda控制台中,从菜单选择层,点击右侧的「创建层」按钮。

・名称:层的名称。这里设为「sample-layer」
・说明:为可选项,不填也可以
・Zip文件:上传刚才创建的ZIP文件
・兼容的架构:这次使用「x86_64」
・兼容的运行时:要执行的运行时。这次选择「Python3.10」「Python3.9」
・许可证选项:这次不需要,故不填写
点击[创建]按钮,层即创建完成
为 Lambda 函数添加 Layer

从想使用层的Lambda函数中选择Layer,点击「添加层」。

这次是把自己创建的层添加到函数,因此层来源选择「自定义层」,并从自定义层中选择要添加的层。
根据要添加层的目标Lambda函数的运行时不同,可选择的层也会变化。
若有版本,选择版本后点击「添加」按钮。
从 Lambda 函数调用 Layer
创建好的层可以用Python的import来调用。
sample-layer.py
import layer
def lambda_handler(event,context):
print('Lambda 执行!')
return layer.test()
执行 sample-layer.py 后
Lambda 执行!
执行结果:
Layer 调用成功!
整理了试用Lambda Layer的流程。为了避免做出一堆相似的函数,希望能好好活用Layer。



留言