ホームページ  >  記事  >  Java  >  Java Lambda 関数のレイヤーを作成、公開、使用する方法

Java Lambda 関数のレイヤーを作成、公開、使用する方法

WBOY
WBOYオリジナル
2024-07-18 13:59:57642ブラウズ

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

導入

Lambda 関数と Java 21 ランタイムによる Lambda レイヤーの使用が、コールド (SnapStart を有効にした場合と有効にしない) およびウォーム スタート時間にどのような影響を与えるかを調査するための準備として、作成方法について紹介したいと思います。 SAM テンプレートの Java (21) Lambda 関数のレイヤーを公開して使用します。

ラムダ層とは

Lambda レイヤーは、補足コードまたはデータを含む .zip ファイル アーカイブです。通常、レイヤーにはライブラリの依存関係、カスタム ランタイム、または構成ファイルが含まれます。

Lambda レイヤーを使用する利点

レイヤーの使用を検討する理由はいくつかあります。

  • 展開パッケージのサイズを削減します。すべての関数の依存関係を関数コードとともに展開パッケージに含める代わりに、それらをレイヤーに配置します。これにより、展開パッケージが小さく整理された状態に保たれます。
  • コア関数のロジックを依存関係から分離するため。レイヤーを使用すると、関数コードに関係なく関数の依存関係を更新したり、その逆を行うことができます。これにより、関心事の分離が促進され、関数のロジックに集中できるようになります。
  • 複数の関数間で依存関係を共有するため。レイヤーを作成したら、それをアカウント内の任意の数の関数に適用できます。レイヤーがない場合は、個々の展開パッケージに同じ依存関係を含める必要があります。
  • Lambda コンソールのコードエディタを使用するには。コード エディターは、マイナーな関数コードの更新を迅速にテストするのに便利なツールです。ただし、展開パッケージのサイズが大きすぎる場合、エディターは使用できません。レイヤーを使用すると、パッケージのサイズが小さくなり、コード エディターを使用できるようになります。

AWS CLI v2 と SAM テンプレートを使用して Java 21 Lambda 関数のレイヤーを作成、公開、使用する方法

調査のために、Java 21 ランタイムを使用して Lambda レイヤーを作成し、次の依存関係をレイヤーにパッケージ化するサンプル アプリケーションを使用します。

  • aws-lambda-java-core
  • aws-lambda-java-events
  • org-crac
  • slf4j-simple
  • ジャクソン-データフォーマット-xml

Lambda レイヤーを作成するには、次のものが必要です:

  • Java 21 ランタイム
  • Java 21 アプリケーションを構築およびパッケージ化できる Maven バージョン (3.8.6 以降)
  • AWS CLI v2

Lambda レイヤーでは、依存関係を単一の uber-jar に組み込む必要があります。この目的のために、pom.xml で 2 つのプラグインを使用します。 maven-compiler-plugin はソース コードをコンパイルします。 maven-shade-plugin は、アーティファクトを 1 つの 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

この Lambda レイヤーを Java 21 ランタイムで公開するには、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

追加パラメータ --compatibility-architectures "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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。