Bewährte Methoden zur Verwendung von DynamoDB Streams mit Lambda
Eine AWS Lambda-Funktion wird in einem Container ausgeführt. Dies ist eine Ausführungsumgebung, die von anderen Funktionen isoliert ist. Wenn Sie eine Funktion zum ersten Mal ausführen, erstellt AWS Lambda einen neuen Container und beginnt mit der Ausführung des Codes der Funktion.
Eine Lambda-Funktion hat einen Handler, der einmal pro Aufruf ausgeführt wird. Der Handler enthält die Hauptgeschäftslogik für die Funktion. Die Lambda-Funktion in Schritt 4: Erstellen und Testen einer Lambda-Funktion verfügt z. B. über einen Handler, der Datensätze in einem DynamoDB-Stream verarbeiten kann.
Sie können auch einen Initialisierungscode bereitstellen, der nur einmal ausgeführt wird, und zwar nachdem der Container erstellt wurde, aber bevor AWS Lambda den Handler zum ersten Mal ausführt. Die in Schritt 4: Erstellen und Testen einer Lambda-Funktion gezeigte Lambda-Funktion verfügt über Initialisierungscode, der das SDK für JavaScript in Node.js importiert und einen Client für Amazon SNS erstellt. Diese Objekte sollten nur einmal außerhalb des Handlers definiert werden.
Nach dem Ausführen der Funktion kann AWS Lambda den Container für nachfolgende Aufrufe der Funktion wiederverwenden. In diesem Fall kann Ihr Funktions-Handler die Ressourcen, die Sie in Ihrem Initialisierungscode definiert haben, erneut nutzen. (Sie können nicht steuern, wie lange AWS Lambda den Container beibehält oder ob der Container überhaupt wiederverwendet wird.)
Für DynamoDB-Auslöser, die AWS Lambda verwenden, empfehlen wir die folgenden Schritte:
-
AWS-Service-Clients sollten statt im Handler im Initialisierungscode instanziiert werden. So kann AWS Lambda vorhandene Verbindungen während der Containerlebensdauer wiederverwenden.
-
In der Regel müssen Sie Verbindungen nicht explizit verwalten oder Verbindungspools implementieren, da AWS Lambda diese Vorgänge übernimmt.
Ein Lambda-Verbraucher für einen DynamoDB-Stream garantiert nicht genau eine Lieferung und kann gelegentlich zu Duplikaten führen. Stellen Sie sicher, dass Ihr Lambda-Funktionscode idempotent ist, um zu verhindern, dass unerwartete Probleme aufgrund doppelter Verarbeitung auftreten.
Weitere Informationen finden Sie unter Bewährte Methoden für das Arbeiten mit AWS Lambda-Funktionen im AWS Lambda-Entwicklerhandbuch.