打包层内容 - AWS Lambda

打包层内容

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

本部分介绍如何正确打包层内容。有关层的更多概念性信息以及您可能会考虑使用层的原因,请参阅 使用层管理 Lambda 依赖项

创建层的第一步是将所有层内容捆绑到.zip 文件存档中。由于 Lambda 函数在 Amazon Linux 上运行,因此层内容必须能够在 Linux 环境中编译和构建。

为确保层内容在 Linux 环境中正常运行,建议使用 Docker 等工具创建层内容。

每个 Lambda 运行时的层路径

当您向函数添加层时,Lambda 会将层内容加载到该执行环境的 /opt 目录中。对于每个 Lambda 运行时系统,PATH 变量都包括 /opt 目录中的特定文件夹路径。为确保 Lambda 能够获取层内容,层 .zip 文件应在以下文件夹路径中具有依赖项:

运行时 路径

Node.js

nodejs/node_modules

nodejs/node16/node_modules (NODE_PATH)

nodejs/node18/node_modules (NODE_PATH)

nodejs/node20/node_modules (NODE_PATH)

Python

python

python/lib/python3.x/site-packages(站点目录)

Java

java/lib (CLASSPATH)

Ruby

ruby/gems/3.3.0 (GEM_PATH)

ruby/lib (RUBYLIB)

所有运行时

bin (PATH)

lib (LD_LIBRARY_PATH)

以下示例显示了如何构建层 .zip 存档中的文件夹架构。

Node.js
例 适用于 Node.js 的 AWS X-Ray 软件开发工具包的文件结构
xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk
Python
python/              # Required top-level directory
└── requests/
└── boto3/
└── numpy/
└── (dependencies of the other packages)
Ruby
例 JSON gem 的文件结构
json.zip └ ruby/gems/3.3.0/ | build_info | cache | doc | extensions | gems | └ json-2.1.0 └ specifications └ json-2.1.0.gemspec
Java
例 Jackson JAR 文件的文件结构
layer_content.zip └ java └ lib └ jackson-core-2.17.0.jar └ <other potential dependencies> └ ...
All
例 JQ 库的文件结构
jq.zip └ bin/jq

有关打包、创建和添加层的特定语言说明,请参阅以下页面:

建议使用层来管理用 Go 和 Rust 编写的 Lambda 函数的依赖项。这是因为用这些语言编写的 Lambda 函数编译成单个可执行文件,您在部署函数时将其提供给 Lambda。这个可执行文件包含您编译的函数代码及其所有依赖项。使用层不仅会使此过程复杂化,还会导致冷启动时间增加,因为函数需要在初始化阶段将额外的程序集手动加载到内存中。

要在 Go 和 Rust Lambda 函数中使用外部依赖项,请直接将其包含在部署包中。