AWS Lambda - Funktion in Java
In diesem Kapitel erfahren Sie im Detail, wie Sie eine einfache AWS Lambda-Funktion in Java im Detail erstellen.
JAR-Datei in Eclipse erstellen
Bevor Sie mit der Erstellung einer Lambda-Funktion in AWS beginnen, benötigen wir die Unterstützung des AWS-Toolkits für Eclipse. Anleitungen zur Installation derselben finden Sie in derEnvironment Setup Kapitel in diesem Tutorial.
Befolgen Sie nach Abschluss der Installation die hier angegebenen Schritte -
Schritt 1
Öffnen Sie die Eclipse-IDE und erstellen Sie ein neues Projekt mit AWS Lambda Java Project. Beachten Sie zum besseren Verständnis den folgenden Screenshot.
Schritt 2
Sobald Sie auswählen Nextwird der unten gezeigte Bildschirm umgeleitet -
Schritt 3
Jetzt wird ein Standardcode für den Eingabetyp erstellt Custom. Sobald Sie klickenFinish Schaltfläche Das Projekt wird wie unten gezeigt erstellt -
Schritt 4
Klicken Sie nun mit der rechten Maustaste auf Ihr Projekt und exportieren Sie es. WählenJava / JAR Datei aus dem Export Assistent und klicken Sie auf Next.
Schritt 5
Nun, wenn Sie klicken Nextwerden Sie aufgefordert, die Datei im Zielordner zu speichern, der beim Klicken auf Weiter gefragt wird.
Kehren Sie nach dem Speichern der Datei zur AWS-Konsole zurück und erstellen Sie die AWS Lambda-Funktion für Java.
Schritt 6
Laden Sie jetzt die .jar Datei, die wir mit dem erstellt haben Upload Schaltfläche wie im folgenden Screenshot gezeigt -
Handler-Details für Java
Handler ist package name und class name. Schauen Sie sich das folgende Beispiel an, um den Handler im Detail zu verstehen:
Beispiel
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
Beachten Sie, dass der Handler aus dem obigen Code hervorgeht com.amazonaws.lambda.demo.LambdaFunctionHandler
Lassen Sie uns nun die Änderungen testen und die Ausgabe sehen -
Kontextobjekt in Java
Die Interaktion mit der Ausführung von AWS Lambda erfolgt über den Kontext. Es bietet die folgenden Methoden, die in Java verwendet werden können:
Sr.Nr. | Kontextmethoden & Beschreibung |
---|---|
1 | getMemoryLimitInMB() Dies gibt das Speicherlimit an, das Sie beim Erstellen der Lambda-Funktion angegeben haben. |
2 | getFunctionName() Dies gibt den Namen der Lambda-Funktion. |
3 | getFunctionVersion() Dadurch wird die Version der Lambda-Funktion ausgeführt. |
4 | getInvokedFunctionArn() Dies gibt die ARN an, die zum Aufrufen der Funktion verwendet wird. |
5 | getAwsRequestId() Dies gibt die aws Anfrage ID. Diese ID wird für die Lambda-Funktion erstellt und ist eindeutig. Die ID kann mit aws-Unterstützung verwendet werden, falls Probleme auftreten. |
6 | getLogGroupName() Dadurch wird der Name der aws-Cloudwatch-Gruppe angegeben, der mit der erstellten aws-Lambda-Funktion verknüpft ist. Es ist null, wenn der iam-Benutzer keine Berechtigung zur Cloudwatch-Protokollierung hat. |
7 | getClientContext() Dies gibt Details über die App und das Gerät, wenn es mit aws mobile sdk verwendet wird. Es werden Details wie Versionsname und Code, Client-ID, Titel, Name des App-Pakets angegeben. Es kann null sein. |
8 | getIdentity() Dies gibt Details über die Amazon Cognito-Identität bei Verwendung mit aws mobile sdk. Es kann null sein. |
9 | getRemainingTimeInMillis() Dies gibt die verbleibende Zeitausführung in Millisekunden an, wenn die Funktion nach dem angegebenen Zeitlimit beendet wird. |
10 | getLogger() Dadurch wird der Lambda-Logger mit dem Kontextobjekt verknüpft. |
Lassen Sie uns nun den oben angegebenen Code aktualisieren und die Ausgabe für einige der oben aufgeführten Methoden beobachten. Beachten Sie zum besseren Verständnis den unten angegebenen Beispielcode -
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
System.out.println("AWS Lambda function name: " + context.getFunctionName());
System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
System.out.println("Cloudwatch group name " + context.getLogGroupName());
System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
// TODO: implement your handler
return "Hello from Lambda!";
}
}
Sobald Sie den oben angegebenen Code ausgeführt haben, finden Sie die Ausgabe wie folgt:
Protokolle für den Kontext
Sie können die folgende Ausgabe beobachten, wenn Sie Ihre Protokollausgabe anzeigen:
Der für die Lambda-Funktion zugewiesene Speicher beträgt 512 MB. Die zugewiesene Zeit beträgt 25 Sekunden. Die oben angezeigte verbleibende Zeit beträgt 24961, was in Millisekunden angegeben ist. Für die Ausführung der Lambda-Funktion werden also 25000 - 24961 verwendet, was 39 Millisekunden entspricht. Beachten Sie, dass der Name der Cloudwatch-Gruppe und die Anforderungs-ID ebenfalls wie oben gezeigt angezeigt werden.
Beachten Sie, dass wir den folgenden Befehl verwendet haben, um Protokolle in Java zu drucken:
System.out.println (“log message”)
Das gleiche ist in CloudWatch verfügbar. Gehen Sie dazu zu AWS-Services und wählen SieCloudWatchservices und klicken Sie auf Logs.
Wenn Sie nun die Lambda-Funktion auswählen, werden die Protokolle wie unten gezeigt datumsmäßig angezeigt.
Anmelden in Java
Sie können Lambdalogger auch in Java verwenden, um die Daten zu protokollieren. Beachten Sie das folgende Beispiel, das dasselbe zeigt -
Beispiel
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Input: " + input);
logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
// TODO: implement your handler
return "Hello from Lambda!";
}
}
Der oben gezeigte Code gibt Ihnen die folgende Ausgabe -
Die Ausgabe in CloudWatch erfolgt wie folgt:
Fehlerbehandlung in Java für Lambda-Funktion
In diesem Abschnitt wird erläutert, wie Fehler in Java für die Lambda-Funktion behandelt werden. Beachten Sie den folgenden Code, der dasselbe anzeigt -
package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
throw new RuntimeException("Error from aws lambda");
}
}
Beachten Sie, dass die Fehlerdetails in angezeigt werden json Format mit errorMessage Error from AWS Lambda. Auch derErrorType und stackTrace gibt weitere Details zum Fehler.
Die Ausgabe und die entsprechende Protokollausgabe des oben angegebenen Codes sind in den folgenden Screenshots dargestellt: