首页  >  文章  >  Java  >  如何为 Java Lambda 函数创建、发布和使用层

如何为 Java Lambda 函数创建、发布和使用层

WBOY
WBOY原创
2024-07-18 13:59:57636浏览

How to create, publish and use layers for Java Lambda functions

介绍

作为调查 Lambda 层与 Lambda 函数和 Java 21 运行时的使用如何影响冷(启用和不启用 SnapStart)和热启动时间的准备,我想介绍一下如何创建,在 SAM 模板中发布和使用 Java 层(21)Lambda 函数。

什么是 Lambda 层

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

使用 Lambda 层的好处

您考虑使用图层的原因有多种:

  • 减少部署包的大小。不要将所有函数依赖项与函数代码一起包含在部署包中,而是将它们放在一个层中。这使得部署包变得小而有条理。
  • 将核心功能逻辑与依赖项分离。通过层,您可以独立于函数代码更新函数依赖项,反之亦然。这促进了关注点分离并帮助您专注于函数逻辑。
  • 跨多个函数共享依赖关系。创建图层后,您可以将其应用到帐户中任意数量的函数。如果没有层,您需要在每个单独的部署包中包含相同的依赖项。
  • 使用 Lambda 控制台代码编辑器。代码编辑器是快速测试次要功能代码更新的有用工具。但是,如果您的部署包太大,则无法使用编辑器。使用层可以减少包大小并解锁代码编辑器的使用。

如何通过 AWS CLI v2 和 SAM 模板创建、发布和使用 Java 21 Lambda 函数的层

为了进行探索,我们将使用示例应用程序创建 Lambda 层,并使用 Java 21 运行时将以下依赖项打包到该层中:

  • aws-lambda-java-core
  • aws-lambda-java-events
  • org-crac
  • slf4j-简单
  • 杰克逊数据格式-xml

要创建 Lambda 层,我们需要:

  • Java 21 运行时
  • 能够构建和打包 Java 21 应用程序的 Maven 版本(3.8.6 或更高版本)
  • AWS CLI v2

Lambda 层需要将依赖项构建到单个 uber-jar 中。为此,我们在 pom.xml 中使用两个插件。 maven-compiler-plugin 编译源代码。 maven-shade-plugin 将我们的工件打包到一个 uber-jar 中。然后我们需要执行

mvn clean package

构建我们的应用程序。

当我们使用 Java 运行时向 Lambda 函数添​​加图层时,Lambda 会将图层内容加载到该执行环境的 /opt 目录中。对于每个 Lambda 运行时,PATH 变量已包含 /opt 目录中的特定文件夹路径。为了确保 PATH 变量获取我们的图层内容,我们的图层 .zip 文件应该在以下文件夹路径中具有其依赖项: java/lib

例如,我们使用示例应用程序创建的结果层 .zip 文件具有以下目录结构:

aws-pure-java-21-common-lambda-layer-content.zip
└ java
    └ lib
        └ aws-pure-java-21-common-lambda-layer-1.0.0-SNAPSHOT.jar

可以通过在Linux上执行以下命令来实现:

  • mkdir java
  • mkdir java/lib
  • cp -r target/aws-pure-java-21-common-lambda-layer-1.0.0-SNAPSHOT.jar java/lib/
  • zip -r aws-pure-java-21-common-lambda-layer-content.zip java

要使用 Java 21 运行时发布此 Lambda 层,我们需要使用 AWS CLI v2 执行以下命令:

aws lambda publish-layer-version --layer-name aws-pure-java-21-common-lambda-layer --zip-file fileb://aws-pure-java-21-common-lambda-layer-content.zip --compatible-runtimes java21

通过附加参数 --兼容架构“x86”,我们可以定义兼容的硬件架构,例如 x86(默认)或 arm64。

作为响应,AWS 将提供我们稍后需要引用的 Lambda 层 ARN,它看起来与此类似:

arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:aws-pure-java-21-common-lambda-layer:1

请注意,最后一个参数是 Lambda 层版本,当我们首次发布该层时,该版本始终为 1,并且随着现有 Lambda 层的后续更新,该版本将增加 1。

为了将图层附加到您的函数,我们可以执行以下操作:

  • when using AWS CLI v2 and invoking aws lambda create-function command add --layers paramater with layer ARN like arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:aws-pure-java-21-common-lambda-layer:1
  • when using AWS SAM template like we'll explore in our next article (here is the concrete example) add Layers parameter to the Lambda function like this:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: GetProductByIdWithPureJava21LambdaWithCommonLayer
      AutoPublishAlias: liveVersion
      Layers:
        - !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:aws-pure-java-21-common-lambda-layer:1
      Handler: software.amazonaws.example.product.handler.GetProductByIdHandler::handleRequest

Conclusion

In this article I gave an introduction about how to create, publish and use layers for Java 21 Lambda functions AWS CLI v2 and the SAM template. In the next article published under the AWS Lambda SnapStart series I'll explore how the usage of the (different) Lambda layers with function having Java 21 runtime affects the cold (with and without enabling SnapStart) and warm start times.

以上是如何为 Java Lambda 函数创建、发布和使用层的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn