top of page

用 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。

 
 
 

留言


© Copyright ROBIN planning LLC.

bottom of page