使用 Java Lambda 函数的层
使用 Lambda 层来打包要在多个函数中重复使用的代码和依赖项。层通常包含库依赖项、自定义运行时系统或配置文件。创建层涉及三个常见步骤:
-
打包层内容。此步骤需要创建 .zip 文件存档,其中包含要在函数中使用的依赖项。
-
在 Lambda 中创建层。
-
将层添加到函数。
打包层内容
要创建层,请将您的包捆绑到满足以下要求的 .zip 文件存档中:
-
确保 Maven 或 Gradle 引用的 Java 版本与要部署的函数的 Java 版本相同。例如,若要部署 Java 21 函数,
mvn -v
命令应在输出中列出 Java 21。 -
您的依赖项必须存储在
java/lib
目录中,该目录位于.zip文件的根级别下。有关更多信息,请参阅 每个 Lambda 运行时的层路径。 -
您的层中的包必须与 Linux 兼容。Lambda 函数在 Amazon Linux 上运行。
-
如果您的层包含原生二进制文件或可执行文件,则它们必须与您的函数针对相同的架构(x86_64 或 arm64)。
您可以创建包含第三方 Java 库或您自己的 Java 模块和包的层。以下程序使用 Maven。您也可以使用 Gradle 来打包您的层内容。
要使用 Maven 依赖项来创建层
-
使用定义依赖项的
pom.xml
文件来创建一个 Apache Maven 项目。以下示例包括用于 JSON 处理的 Jackson Databind
。 <build>
部分使用 maven-dependency-plugin为每个依赖项生成独立的 JAR 文件,而非将它们捆绑到一个 uber-jar 中。如果您想创建一个 uber-jar,可以使用 maven-shade-plugin 。 例 pom.xml
<dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.17.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.13.0</version> <configuration> <source>21</source> <target>21</target> <release>21</release> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.1</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>
-
构建项目。此命令将在
target/lib/
目录中创建所有的依赖项 JAR 文件。mvn clean package
-
为您的层创建所需的目录结构:
mkdir -p java/lib
-
将依赖项 JAR 文件复制到
java/lib
目录:cp target/lib/*.jar java/lib/
-
压缩层内容:
您的 .zip 文件的目录结构应如下所示:
java/ └── lib/ ├── jackson-databind-2.17.0.jar ├── jackson-core-2.17.0.jar └── jackson-annotations-2.17.0.jar
注意
请确保您的 .zip 文件包含位于根级别下的
java
目录,且该目录内包含lib
。此结构旨在确保 Lambda 可以找到并导入您的库。每个依赖项都作为单独的 JAR 文件保存,而不是捆绑到一个 uber-jar 中。
在 Lambda 中创建层
您可以使用 AWS CLI 或 Lambda 控制台发布层。