打包层内容 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

打包层内容

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

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

创建层的第一步是将所有层内容捆绑到.zip 文件存档中。由于 Lambda 函数在 Amazon Linux 上运行,因此层内容必须能够在 Linux 环境中编译和构建。如果您在本地 Windows 或 Mac 计算机上构建程序包,则默认情况下,您将获得该操作系统的输出二进制文件。当您将这些二进制文件上传到 Lambda 时,它们可能无法正常运行。

为确保层内容在 Linux 环境中正常运行,推荐使用 Amazon Cloud9 创建层内容。Amazon Cloud9 是一个基于云的集成式开发环境(IDE),提供对 Linux 服务器的内置访问以运行和测试代码。有关更多信息,请参阅 Amazon 计算博客上的 Using Lambda layers to simplify your development process

每个 Lambda 运行时的层路径

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

每个 Lambda 运行时的层路径
运行时 路径

Node.js

nodejs/node_modules

nodejs/node14/node_modules (NODE_PATH)

nodejs/node16/node_modules (NODE_PATH)

nodejs/node18/node_modules (NODE_PATH)

Python

python

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

Java

java/lib (CLASSPATH)

Ruby

ruby/gems/3.2.0 (GEM_PATH)

ruby/lib (RUBYLIB)

所有运行时

bin (PATH)

lib (LD_LIBRARY_PATH)

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

Node.js
例 适用于 Node.js 的 Amazon X-Ray 软件开发工具包的文件结构
xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk
Python
例 Pillow 库的文件结构
pillow.zip │ python/PIL └ python/Pillow-5.3.0.dist-info
Ruby
例 JSON gem 的文件结构
json.zip └ ruby/gems/2.7.0/ | build_info | cache | doc | extensions | gems | └ json-2.1.0 └ specifications └ json-2.1.0.gemspec
Java
例 Jackson JAR 文件的文件结构
jackson.zip └ java/lib/jackson-core-2.2.3.jar
All
例 JQ 库的文件结构
jq.zip └ bin/jq