作為調查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中文網其他相關文章!