使用 Java Lambda 函數的層 - AWS Lambda

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

使用 Java Lambda 函數的層

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

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

  2. 在 Lambda 中建立層。

  3. 將層新增至函數中。

封裝層內容

若要建立 layer,請將套件綁定到符合下列要求的 .zip 檔案封存中:

  • 確保 Maven 或 Gradle 參考的 Java 版本與您打算部署的函數的 Java 版本相同。例如,對於 Java 21 函數,mvn -v命令應在輸出中列出 Java 21。

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

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

  • 如果您的 layer 包含原生二進位檔或可執行檔,則它們必須以與函數相同的架構 (x86_64 或 arm64) 為目標。

您可以建立包含第三方 Java 程式庫或您自己的 Java 模組和套件的層。下列程序使用 Maven。您也可以使用 Gradle 封裝層內容。

使用 Maven 相依性建立 layer
  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. 為您的 layer 建立所需的目錄結構:

    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 中建立 layer

您可以使用 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 java21

相容的執行時間參數是選用的。指定時,Lambda 會使用此參數來篩選 Lambda 主控台中的圖層。

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

  2. 選擇 建立圖層

  3. 選擇上傳 .zip 檔案,然後上傳您先前建立的 .zip 封存檔。

  4. (選用) 對於相容的執行時間,選擇與您用來建置 layer 的 Java 版本對應的 Java 執行時間。

  5. 選擇建立

將 layer 新增至函數

AWS CLI

若要將 layer 連接至函數,請執行 update-function-configuration AWS CLI 命令。對於 --layers 參數,請使用 layer 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. 選擇圖層下,選取自訂圖層,然後選擇您的圖層。

    注意

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

  5. 選擇新增