作为调查 Lambda 层与 Lambda 函数和 Java 21 运行时的使用如何影响冷(启用和不启用 SnapStart)和热启动时间的准备,我想介绍一下如何创建,在 SAM 模板中发布和使用 Java 层(21)Lambda 函数。
Lambda 层是包含补充代码或数据的 .zip 文件存档。层通常包含库依赖项、自定义运行时或配置文件。
您考虑使用图层的原因有多种:
为了进行探索,我们将使用示例应用程序创建 Lambda 层,并使用 Java 21 运行时将以下依赖项打包到该层中:
要创建 Lambda 层,我们需要:
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上执行以下命令来实现:
要使用 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。
为了将图层附加到您的函数,我们可以执行以下操作:
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
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中文网其他相关文章!