首頁  >  文章  >  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