使用 Java Lambda 函數的層 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Java Lambda 函數的層

使用 Lambda 層封裝要在多個函式之間重複使用的程式碼與相依項。層通常具備程式庫相依性、自訂執行期或組態檔案。建立層包含三個一般步驟:

  1. 封裝層內容。這表示建立 .zip 封存檔,其中包含您要在函數中使用的相依項。

  2. 在 Lambda 中建立層。

  3. 將層新增至函數中。

封裝層內容

若要建立層,請將套件封裝成符合以下要求的 .zip 壓縮檔:

  • 確保 Maven 或 Gradle 引用的 Java 版本,與您打算部署的函式所使用的 Java 版本一致。例如,對於 Java 25 函數,mvn -v命令應在輸出中列出 Java 25。

  • 相依項必須儲存在 .zip 檔案根目錄下的 java/lib 目錄中。如需詳細資訊,請參閱每個 Lambda 執行時間的層路徑

  • 層中的套件必須與 Linux 相容。Lambda 函式會在 Amazon Linux 上執行。

您可以建立包含第三方 Java 程式庫的層,或您自訂的 Java 模組與套件的層。以下流程使用 Maven 實作。您也可以選用 Gradle 來封裝層內容。

使用 Maven 相依項建立層
  1. 建立一個包含 pom.xml 檔案的 Apache Maven 專案,並在該檔案中定義相依項目。

    下列範例包含用於 JSON 處理的 Jackson Databind<build> 區段透過 maven-dependency-plugin 為每個相依項建立獨立的 JAR 檔案,而非將其封裝成單一 uber-jar。若需建立 uber-jar,請改用 maven-shade-plugin

    範例 pom.xml
    <dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.17.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.13.0</version> <configuration> <source>21</source> <target>21</target> <release>21</release> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.1</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>
  2. 建置專案。此命令會在 target/lib/ 目錄中建立所有相依項 JAR 檔案。

    mvn clean package
  3. 建立層所需的目錄結構:

    mkdir -p java/lib
  4. 將相依項 JAR 檔案複製至 java/lib 目錄:

    cp target/lib/*.jar java/lib/
  5. 壓縮層內容:

    Linux/macOS
    zip -r layer.zip java/
    PowerShell
    Compress-Archive -Path .\java -DestinationPath .\layer.zip

    .zip 檔案的目錄結構應如下所示:

    java/              
    └── lib/
        ├── jackson-databind-2.17.0.jar
        ├── jackson-core-2.17.0.jar
        └── jackson-annotations-2.17.0.jar
    注意

    請確保 .zip 檔案在根層級包含 java 目錄,且該目錄內含 lib 子目錄。此結構可確保 Lambda 能順利找到並匯入程式庫。每個相依項都會作為獨立的 JAR 檔案保留,而非封裝成單一 uber-jar。

在 Lambda 中建立層

您可以使用 AWS CLI 或 Lambda 主控台發佈 layer。

AWS CLI

執行 publish-layer-version AWS CLI 命令來建立 Lambda layer:

aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes java25

相容的執行時期參數為選用參數。指定此參數後,Lambda 會據此在 Lambda 主控台中篩選層。

Console
建立圖層 (主控台)
  1. 開啟 Lambda 主控台中的 層頁面

  2. 選擇 建立圖層

  3. 選擇上傳 .zip 檔案,然後上傳先前建立的 .zip 壓縮檔。

  4. (選用) 在相容的執行時期欄位中,選擇與用於建置層的 Java 版本相對應的 Java 執行時期。

  5. 選擇建立

將層新增至函式

AWS CLI

若要將 layer 連接至函數,請執行 update-function-configuration AWS CLI 命令。對於 --layers 參數,請使用層 ARN。ARN 必須指定版本 (例如 arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1)。如需詳細資訊,請參閱層和層的版本

aws lambda update-function-configuration --function-name my-function --cli-binary-format raw-in-base64-out --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"

如果您使用的是第 2 AWS CLI 版,則需要 cli-binary-format選項。若要讓此成為預設的設定,請執行 aws configure set cli-binary-format raw-in-base64-out。若要取得更多資訊,請參閱《AWS Command Line Interface 使用者指南第 2 版》AWS CLI 支援的全域命令列選項

Console
將層新增至函式
  1. 開啟 Lambda 主控台中的函數頁面

  2. 選擇函式。

  3. 向下捲動至區段,然後選擇新增層

  4. 選擇層欄位中,選取自訂層,然後選擇要使用的層。

    注意

    如果未在建立層時新增相容的執行時期,此處不會列出層。您可以改為指定層 ARN。

  5. 選擇新增