Einführung in Serverless Computing und AWS Lambda
\n\nDie Serverless-Architektur ist zu einem der wichtigsten Trends in der modernen Cloud-Entwicklung geworden. Entgegen dem Namen gibt es noch Server, aber Entwickler müssen nicht mehr über sie nachdenken. AWS Lambda ist ein Amazon-Dienst, der es ermöglicht, Code ohne Serververwaltung auszuführen. Sie zahlen nur für die Rechenzeit, wenn Ihr Code tatsächlich ausgeführt wird.
\n\nIn diesem Artikel werden wir im Detail besprechen, wie man Serverless-Funktionen in Java mit AWS Lambda erstellt. Sie erfahren, wie Sie ein Projekt einrichten, Ihren ersten Handler schreiben, die Funktion bereitstellen und sie unter realen Bedingungen debuggen.
\n\nGrundlagen von AWS Lambda für Java-Entwickler
\n\nWas ist AWS Lambda?
\n\nAWS Lambda ist eine Function-as-a-Service (FaaS)-Plattform, die Ihren Code als Reaktion auf Ereignisse ausführt. Lambda unterstützt Java 8, 11, 17 und 21 (Corretto). Die Funktion wird in einem isolierten Container ausgeführt, erhält ein Ereignis (Event) und einen Kontext (Context) als Eingabe und gibt ein Ergebnis zurück.
\n\nWichtige Konzepte
\n\n- \n
- Handler — der Einstiegspunkt in Ihre Funktion. Normalerweise eine Methode, die das Interface
RequestHandleroderRequestStreamHandlerimplementiert. \n - Event — die Daten, die an die Funktion übergeben werden (JSON, String, Binärdaten). \n
- Context — ein Objekt mit Informationen über die Ausführungsumgebung (Anfrage-ID, Timeout, Funktionsname). \n
- Cold Start — die Verzögerung beim ersten Aufruf einer Funktion nach einer Inaktivitätsperiode. Für Java kann dies 1-5 Sekunden betragen. \n
- Layer — ein Archiv mit Bibliotheken, das mit mehreren Funktionen verbunden werden kann. \n
Erstes Beispiel: Einfachste Lambda in Java
\n\nErstellen wir ein Maven-Projekt und fügen die Abhängigkeit hinzu:
\n\n<dependency>\n <groupId>com.amazonaws</groupId>\n <artifactId>aws-lambda-java-core</artifactId>\n <version>1.2.2</version>\n</dependency>\n\nJetzt schreiben wir den Handler:
\n\nimport com.amazonaws.services.lambda.runtime.Context;\nimport com.amazonaws.services.lambda.runtime.RequestHandler;\n\npublic class HelloHandler implements RequestHandler<String, String> {\n\n @Override\n public String handleRequest(String input, Context context) {\n context.getLogger().log("Empfangen: " + input);\n return "Hallo, " + input + "!";\n }\n}\n\nDieser Handler nimmt einen String entgegen, protokolliert ihn und gibt eine Begrüßung zurück. Um die Funktion bereitzustellen, packen Sie das Projekt in ein JAR und laden Sie es in die AWS Console hoch oder verwenden Sie die AWS CLI.
\n\nFortgeschrittene Techniken für die Arbeit mit AWS Lambda in Java
\n\nArbeit mit JSON über Jackson
\n\nIn realen Projekten werden Sie JSON-Ereignisse verarbeiten. Fügen Sie Jackson zur pom.xml hinzu:
<dependency>\n <groupId>com.fasterxml.jackson.core</groupId>\n <artifactId>jackson-databind</artifactId>\n <version>2.15.2</version>\n</dependency>\n\nBeispiel eines Handlers für die Arbeit mit JSON:
\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.amazonaws.services.lambda.runtime.Context;\nimport com.amazonaws.services.lambda.runtime.RequestHandler;\nimport java.util.Map;\n\npublic class JsonHandler implements RequestHandler<Map<String, Object>, String> {\n\n private static final ObjectMapper mapper = new ObjectMapper();\n\n @Override\n public String handleRequest(Map<String, Object> event, Context context) {\n try {\n String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(event);\n context.getLogger().log("Ereignis: " + json);\n return "Erfolgreich verarbeitet";\n } catch (Exception e) {\n throw new RuntimeException("Fehler beim JSON-Parsing", e);\n }\n }\n}\n\n