AWS Lambda mit DynamoDB mit Java

1. Einleitung

AWS Lambda ist ein serverloser Computerdienst, der von Amazon Web Services bereitgestellt wird, und WS DynamoDB ist ein NoSQL-Datenbankdienst, der ebenfalls von Amazon bereitgestellt wird.

Interessanterweise unterstützt DynamoDB sowohl den Dokumentenspeicher als auch den Schlüsselwertspeicher und wird vollständig von AWS verwaltet.

Beachten Sie, dass für dieses Lernprogramm ein gültiges AWS-Konto erforderlich ist (Sie können hier ein Konto erstellen). Es ist auch eine gute Idee, zuerst den Artikel AWS Lambda mit Java zu lesen.

2. Maven-Abhängigkeiten

Um Lambda zu aktivieren, benötigen wir die folgende Abhängigkeit, die von Maven Central gefunden werden kann:

 com.amazonaws aws-lambda-java-core 1.1.0  

Um verschiedene AWS-Ressourcen nutzen zu können, benötigen wir die folgende Abhängigkeit, die auch in Maven Central vorhanden ist:

 com.amazonaws aws-lambda-java-events 1.3.0  

Und um die Anwendung zu erstellen, verwenden wir das Maven Shade Plugin:

 org.apache.maven.plugins maven-shade-plugin 3.0.0  false    package  shade    

3. Lambda-Code

Es gibt verschiedene Möglichkeiten, Handler in einer Lambda-Anwendung zu erstellen:

  • MethodHandler
  • RequestHandler
  • RequestStreamHandler

Wir werden die RequestHandler- Schnittstelle in unserer Anwendung verwenden. Wir akzeptieren die PersonRequest im JSON-Format und die Antwort lautet PersonResponse auch im JSON- Format :

public class PersonRequest { private String firstName; private String lastName; // standard getters and setters } 
public class PersonResponse { private String message; // standard getters and setters }

Als nächstes folgt unsere Einstiegspunktklasse, die die RequestHandler- Schnittstelle wie folgt implementiert :

public class SavePersonHandler implements RequestHandler { private DynamoDB dynamoDb; private String DYNAMODB_TABLE_NAME = "Person"; private Regions REGION = Regions.US_WEST_2; public PersonResponse handleRequest( PersonRequest personRequest, Context context) { this.initDynamoDbClient(); persistData(personRequest); PersonResponse personResponse = new PersonResponse(); personResponse.setMessage("Saved Successfully!!!"); return personResponse; } private PutItemOutcome persistData(PersonRequest personRequest) throws ConditionalCheckFailedException { return this.dynamoDb.getTable(DYNAMODB_TABLE_NAME) .putItem( new PutItemSpec().withItem(new Item() .withString("firstName", personRequest.getFirstName()) .withString("lastName", personRequest.getLastName()); } private void initDynamoDbClient() { AmazonDynamoDBClient client = new AmazonDynamoDBClient(); client.setRegion(Region.getRegion(REGION)); this.dynamoDb = new DynamoDB(client); } } 

Wenn wir hier die RequestHandler- Schnittstelle implementieren , müssen wir handleRequest () für die eigentliche Verarbeitung der Anforderung implementieren . Was den Rest des Codes betrifft, haben wir:

  • PersonRequest- Objekt - enthält die im JSON-Format übergebenen Anforderungswerte
  • Kontextobjekt - wird verwendet, um Informationen aus der Lambda-Ausführungsumgebung abzurufen
  • PersonResponse - Dies ist das Antwortobjekt für die Lambda-Anforderung

Beim Erstellen eines DynamoDB- Objekts erstellen wir zuerst das AmazonDynamoDBClient- Objekt und erstellen daraus ein DynamoDB- Objekt. Beachten Sie, dass die Region obligatorisch ist.

Um Elemente in die DynamoDB-Tabelle einzufügen , verwenden wir ein PutItemSpec- Objekt, indem wir die Anzahl der Spalten und ihre Werte angeben .

Wir brauchen kein vordefiniertes Schema in der DynamoDB-Tabelle, wir müssen nur den Spaltennamen des Primärschlüssels definieren, der in unserem Fall "id" ist.

4. Erstellen der Bereitstellungsdatei

Um die Lambda-Anwendung zu erstellen, müssen Sie den folgenden Maven-Befehl ausführen:

mvn clean package shade:shade

Die Lambda-Anwendung wird kompiliert und in eine JAR- Datei unter dem Zielordner gepackt.

5. Erstellen der DynamoDB-Tabelle

Führen Sie die folgenden Schritte aus, um die DynamoDB-Tabelle zu erstellen:

  • Melden Sie sich bei AWS Account an
  • Klicken Sie auf "DynamoDB" , das sich unter "Alle Dienste" befindet.
  • Auf dieser Seite werden bereits erstellte DynamoDB-Tabellen angezeigt (falls vorhanden).
  • Klicken Sie auf die Schaltfläche "Tabelle erstellen"
  • Geben Sie "Tabellenname" und "Primärschlüssel" mit dem Datentyp "Nummer" an.
  • Klicken Sie auf die Schaltfläche "Erstellen"
  • Tabelle wird erstellt

6. Erstellen der Lambda-Funktion

Führen Sie die folgenden Schritte aus, um die Lambda-Funktion zu erstellen:

  • Melden Sie sich bei AWS Account an
  • Klicken Sie auf "Lambda" , das sich unter "Alle Dienste" befindet.
  • Auf dieser Seite wird die bereits erstellte Lambda-Funktion (falls vorhanden) angezeigt oder es werden keine Lambda-Funktionen erstellt. Klicken Sie auf "Erste Schritte".
  • "Blaupause auswählen" -> " Leere Funktion auswählen"
  • „Configure Trigger“ -> Klicken Sie auf „Weiter“ Schaltfläche
  • "Funktion konfigurieren"
    • "Name" : SavePerson
    • "Beschreibung" : Person in DDB speichern
    • "Laufzeit" : Wählen Sie "Java 8".
    • "Upload" : Klicken Sie auf die Schaltfläche "Upload" und wählen Sie die JAR-Datei der Lambda-Anwendung aus
  • "Handler" : com.baeldung.lambda.dynamodb.SavePersonHandler
  • "Rolle" : Wählen Sie "Benutzerdefinierte Rolle erstellen".
  • A new window will pop and will allow configuring IAM role for lambda execution and we need to add the DynamoDB grants in it. Once done, click “Allow” button
  • Click “Next” button
  • “Review”: Review the configuration
  • Click “Create function” button

7. Testing the Lambda Function

Next step is to test the lambda function:

  • Click the “Test” button
  • The “Input test event” window will be shown. Here, we'll provide the JSON input for our request:
{ "id": 1, "firstName": "John", "lastName": "Doe", "age": 30, "address": "United States" }
  • Click “Save and test” or “Save” button
  • The output can be seen on “Execution result” section:
{ "message": "Saved Successfully!!!" }
  • Wir müssen auch in DynamoDB überprüfen, ob der Datensatz beibehalten wird:
    • Zum „DynamoDB“ Management Console
    • Wählen Sie die Tabelle "Person"
    • Wählen Sie die Registerkarte "Elemente"
    • Hier sehen Sie die Details der Person, die auf Anfrage an die Lambda-Anwendung übergeben wurden
  • Die Anfrage wird also von unserer Lambda-Anwendung erfolgreich bearbeitet

8. Fazit

In diesem kurzen Artikel haben wir gelernt, wie Sie eine Lambda-Anwendung mit DynamoDB und Java 8 erstellen. Die detaillierten Anweisungen sollen Ihnen einen Vorsprung beim Einrichten aller Funktionen verschaffen.

Und wie immer finden Sie den vollständigen Quellcode für die Beispiel-App auf Github.