使用 Java Lambda 函数的层 - AWS Lambda

使用 Java Lambda 函数的层

使用 Lambda 层来打包要在多个函数中重复使用的代码和依赖项。层通常包含库依赖项、自定义运行时系统或配置文件。创建层涉及三个常见步骤:

  1. 打包层内容。此步骤需要创建 .zip 文件存档,其中包含要在函数中使用的依赖项。

  2. 在 Lambda 中创建层。

  3. 将层添加到函数。

打包层内容

要创建层,请将您的包捆绑到满足以下要求的 .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 依赖项来创建层
  1. 使用定义依赖项的 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>
  2. 构建项目。此命令将在 target/lib/ 目录中创建所有的依赖项 JAR 文件。

    mvn clean package
  3. 为您的层创建所需的目录结构:

    mkdir -p java/lib
  4. 将依赖项 JAR 文件复制到 java/lib目录:

    cp target/lib/*.jar java/lib/
  5. 压缩层内容:

    Linux/macOS
    zip -r layer.zip java/
    PowerShell
    Compress-Archive -Path .\java -DestinationPath .\layer.zip

    您的 .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 控制台发布层。

AWS CLI

运行 publish-layer-version AWS CLI 命令以创建 Lambda 层:

aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes java21

兼容的运行时参数是可选的。指定后,Lambda 将使用此参数在 Lambda 控制台中筛选层。

Console
创建层(控制台)
  1. 打开 Lambda 控制台的 Layers page(层页面)。

  2. 选择 Create layer(创建层)。

  3. 选择上传 .zip 文件,然后上传您之前创建的 .zip 存档。

  4. (可选)对于兼容的运行时,请选择与您用于构建层的 Java 版本相对应的 Java 运行时。

  5. 选择创建

将层添加到函数

AWS CLI

要将层附加到函数,请运行 update-function-configuration AWS CLI 命令。对于 --layers 参数,使用层 ARN。ARN 必须指定版本(例如 arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1)。有关更多信息,请参阅 层和层版本

aws lambda update-function-configuration --function-name my-function --cli-binary-format raw-in-base64-out --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"

如果使用 cli-binary-format 版本 2,则 AWS CLI 选项是必需的。要将其设为默认设置,请运行 aws configure set cli-binary-format raw-in-base64-out。有关更多信息,请参阅版本 2 的 AWS Command Line Interface 用户指南中的 AWS CLI 支持的全局命令行选项

Console
向函数添加层
  1. 打开 Lamba 控制台的函数页面

  2. 选择函数。

  3. 向下滚动到部分,然后选择添加层

  4. 选择层下,选择自定义层,然后选择您的层。

    注意

    如果您在创建层时没有添加兼容的运行时,则您的层将不会在此处列出。您可以改为指定层 ARN。

  5. 选择添加