Arbeiten mit Ebenen für Java Lambda-Funktionen
Verwenden Sie Lambda-Ebenen, um Code und Abhängigkeiten zu bündeln, die Sie für mehrere Funktionen wiederverwenden möchten. Ebenen enthalten üblicherweise Bibliotheksabhängigkeiten, eine benutzerdefinierte Laufzeit oder Konfigurationsdateien. Das Erstellen einer Ebene umfasst drei allgemeine Schritte:
-
Verpacken Ihres Ebeneninhalts. Dies bedeutet, dass Sie ein .zip-Dateiarchiv erstellen, das die Abhängigkeiten enthält, die Sie in Ihren Funktionen verwenden möchten.
-
Erstellen Sie die Ebene in Lambda.
-
Fügen Sie die Ebene zu Ihren Funktionen hinzu.
Themen
Verpacken Ihres Ebeneninhalts
Um eine Ebene zu erstellen, bündeln Sie Ihre Pakete in einem ZIP-Dateiarchiv, das die folgenden Anforderungen erfüllt:
-
Stellen Sie sicher, dass die Java-Version, auf die sich Maven oder Gradle bezieht, mit der Java-Version der Funktion übereinstimmt, die Sie bereitstellen möchten. Für eine Java-21-Funktion sollte der
mvn -v-Befehl beispielsweise die Java 21 in der Ausgabe auflisten. -
Ihre Abhängigkeiten müssen im Verzeichnis
java/libim Stammverzeichnis der ZIP-Datei gespeichert werden. Weitere Informationen finden Sie unter Ebenenpfade für jede Lambda-Laufzeit. -
Die Pakete in Ihrer Ebene müssen mit Linux kompatibel sein. Lambda-Funktionen werden auf Amazon Linux ausgeführt.
Sie können Ebenen erstellen, die entweder Java-Bibliotheken von Drittanbietern oder Ihre eigenen Java-Module und -Pakete enthalten. Im Folgenden wird Maven verwendet. Sie können auch Gradle verwenden, um den Inhalt Ihrer Ebenen zu verpacken.
Erstellen einer Ebene mit Maven-Abhängigkeiten
-
Erstellen Sie ein Apache-Maven-Projekt mit einer
pom.xml-Datei, die Ihre Abhängigkeiten definiert.Das folgende Beispiel enthält Jackson Databind
für die JSON-Verarbeitung. Der Abschnitt <build>verwendet das maven-dependency-plugin, um für jede Abhängigkeit separate JAR-Dateien zu erstellen, anstatt sie in einem einzigen Uber-JAR zu bündeln. Wenn Sie ein Uber-Jar erstellen möchten, verwenden Sie das maven-shade-plugin . Beispiel 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> -
Erstellen Sie das Projekt. Dieser Befehl erstellt alle JAR-Abhängigkeitsdateien im
target/lib/-Verzeichnis.mvn clean package -
Erstellen Sie die erforderliche Verzeichnisstruktur für Ihre Ebene:
mkdir -p java/lib -
Kopieren Sie die JAR-Abhängigkeitsdateien in das
java/lib-Verzeichnis:cp target/lib/*.jar java/lib/ -
Verpacken Sie den Ebeneninhalt:
Die Verzeichnisstruktur Ihrer ZIP-Datei sollte wie folgt aussehen:
java/ └── lib/ ├── jackson-databind-2.17.0.jar ├── jackson-core-2.17.0.jar └── jackson-annotations-2.17.0.jarAnmerkung
Stellen Sie sicher, dass Ihre ZIP-Datei das
java-Verzeichnis auf der Stammebene enthält und sichlibdarin befindet. Diese Struktur stellt sicher, dass Lambda Ihre Bibliotheken finden und importieren kann. Jede Abhängigkeit wird als separate JAR-Datei gespeichert und nicht in einem Uber-JAR gebündelt.
Erstellen Sie die Ebene in Lambda
Sie können Ihre Ebene entweder über die AWS CLI oder die Lambda-Konsole veröffentlichen.