本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Java Lambda 函數的層
使用 Lambda 層來封裝您要在多個函數之間重複使用的程式碼和相依性。層通常具備程式庫相依性、自訂執行期或組態檔案。建立層包含三個一般步驟:
-
封裝層內容。這表示建立 .zip 封存檔,其中包含您要在函數中使用的相依項。
-
在 Lambda 中建立層。
-
將層新增至函數中。
封裝層內容
若要建立 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
-
使用定義相依性
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>
-
建置專案。此命令會在
target/lib/
目錄中建立所有相依性 JAR 檔案。mvn clean package
-
為您的 layer 建立所需的目錄結構:
mkdir -p java/lib
-
將相依性 JAR 檔案複製到
java/lib
目錄:cp target/lib/*.jar java/lib/
-
壓縮圖層內容:
.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。