使用层管理 Lambda 依赖项 - AWS Lambda

使用层管理 Lambda 依赖项

Lambda 层是包含补充代码或数据的 .zip 文件存档。层通常包含库依赖项、自定义运行时系统或配置文件。

您可能会基于很多原因考虑使用层:

  • 减小部署包的大小。与其将所有函数依赖项和函数代码都包含在部署包中,不如将其放在一个层中。这样可以减小部署包的大小并对其进行组织。

  • 分离核心函数逻辑与依赖项。借助层,您无需使用函数代码即可更新函数依赖项,反之亦然。这有助于将二者分离,并帮助您专注于函数逻辑。

  • 在多个函数之间共享依赖项。创建层后,您可以将其应用到账户中任意数量的函数。如果没有层,则需要在每个单独的部署包中包含相同的依赖项。

  • 使用 Lambda 控制台代码编辑器。代码编辑器是快速测试次要功能代码更新的得力工具。但是,如果部署包过大,则无法使用编辑器。使用层可以减小部署包的大小,并解锁代码编辑器的用法。

如果您在 Go 或 Rust 中使用 Lambda 函数,我们建议不要使用层。对于 Go 和 Rust 函数,您可以将函数代码作为可执行文件提供,其中包括编译后的函数代码及其所有依赖项。将依赖项放在层中会迫使函数在初始化阶段手动加载其他程序集,而这可能会增加冷启动时间。为了让 Go 和 Rust 函数获得最佳性能,请在部署包中加入依赖项。

下图说明了共享依赖项的两个函数之间的高级架构差异。一个使用 Lambda 层,另一个不使用。

两个不使用层的函数和两个共享层的函数比较。

当您向函数添加层时,Lambda 会将层内容提取到函数执行环境中的 /opt 目录中。所有原生支持的 Lambda 运行时系统都包含 /opt 目录中特定目录的路径。因而函数可以访问层内容。有关这些特定路径以及如何正确打包层的更多信息,请参阅 打包层内容

每个函数最多可以包含五个层。此外,您只能在将 Lambda 函数部署为 .zip 文件存档的情况下使用层。对于定义为容器映像的函数,您可以在创建容器映像时打包首选运行时系统和所有代码依赖项。有关更多信息,请参阅AWS计算博客上的在容器镜像中使用 Lambda 层和扩展

如何使用层

要创建层,请将依赖项打包到.zip 文件中,类似于创建常规部署包的方式。更具体地说,创建和使用层的一般过程包括以下三个步骤:

层和层版本

层版本是层的特定版本的不可变快照。当您创建新层时,Lambda 会创建一个版本号为 1 的新的层版本。每次向层发布更新时,Lambda 都会递增版本号并创建新的层版本。

每个层版本均由一个 Amazon 资源名称(ARN)进行唯一标识。向函数添加层时,必须指定要使用的确切的层版本。