Wie mache ich meine Lambda-Funktion idempotent?

Lesedauer: 3 Minute
0

Ich möchte meinen AWS Lambda-Funktionscode idempotent machen, um Inkonsistenzen und Datenverlust in meiner Anwendung zu verhindern.

Kurzbeschreibung

In der Programmierung bezieht sich Idempotenz auf die Fähigkeit einer Anwendung oder Komponente, wiederholte Ereignisse zu erkennen und doppelte, inkonsistente oder verlorene Daten zu verhindern. Um Ihre AWS Lambda-Funktion idempotent zu machen, müssen Sie Ihre Funktionslogik so entwerfen, dass doppelte Ereignisse korrekt behandelt werden.

Eine idempotente Funktionslogik kann dazu beitragen, die folgenden Probleme zu reduzieren:

  • Unnötige API-Aufrufe
  • Verarbeitungszeit des Codes
  • Inkonsistenz der Daten
  • Drosselungen
  • Latenz

Behebung

Um Ihre Funktion idempotent zu machen, muss der Code der Funktion Eingabeereignisse ordnungsgemäß validieren und feststellen, ob die Ereignisse zuvor verarbeitet wurden. Die Funktionalität Ihrer Anwendung bestimmt, wie der Code am besten geschrieben wird.

Verwenden Sie das folgende Beispiel für eine Funktionslogik und bewährte Methoden zur Orientierung.

Beispiel für eine idempotente Lambda-Funktionslogik

Hinweis: Das folgende Beispiel für eine Lambda-Funktionslogik gilt für die meisten Anwendungsfälle.

1.    Extrahieren Sie den Wert eines eindeutigen Attributs des Eingabeereignisses. (Zum Beispiel eine Transaktions- oder Kauf-ID.)

2.    Prüfen Sie, ob der Attributwert in einer Kontrolldatenbank existiert. (Zum Beispiel eine Amazon DynamoDB-Tabelle.)

3.    Führen Sie je nach Ergebnis den folgenden Schritt aus:
Wenn ein eindeutiger Wert existiert, beenden Sie die Aktion, ohne einen Fehler zu erzeugen.

-oder-

Wenn kein eindeutiger Wert existiert, fahren Sie mit der Aktion fort, die Sie ursprünglich entworfen haben.

**Hinweis:**Das Hinzufügen von AWS-Services zu Ihrer Architektur kann zusätzliche Kosten verursachen. Weitere Informationen finden Sie unter Amazon DynamoDB-Preise und AWS-Preise.

4.    Wenn der eindeutige Wert nach Abschluss der Funktionsarbeit nicht existiert, nehmen Sie den Datensatz in die Kontrolldatenbank auf.

5.    Beenden Sie die Aktion.
Hinweis: Wenn Sie Java- oder Python-Laufzeiten für Ihre Funktion verwenden, überprüfen Sie die Python - und Java -Idempotenzmodule auf der GitHub-Seite von AWS Lambda Powertools.

Bewährte Methoden zur Idempotenz der Lambda-Funktion

  • Planen Sie Ihre Idempotenzfunktionen, bevor Sie Ihre Anwendung entwickeln.
  • Wenn Ihr Lambda-Code ein doppeltes Ereignis verarbeitet, stellen Sie sicher, dass es endet, ohne einen Fehler zu erzeugen.
    Hinweis: Das Auslösen von Fehlern kann zu weiteren Wiederholungsversuchen führen, entweder durch Lambda oder durch einen anderen Dienst, der Ihre Funktion aufruft.
  • Ändern Sie die Timeout-Einstellung für die Lambda-Funktion, sodass die gesamte Laufzeit korrekt verarbeitet wird.
    Hinweis: Wenn Sie einen separaten Dienst verwenden, um Daten zu speichern und doppelte Ereignisse zu kontrollieren, sind möglicherweise API-Aufrufe an HTTPS-Endpunkte erforderlich. API-Aufrufe an HTTPS-Endpunkte benötigen dann möglicherweise mehr Laufzeit als die standardmäßigen 3 Sekunden.
  • Testen und optimieren Sie Ihre Funktion so weit wie möglich. Simulieren Sie ein reales Szenario und die Anzahl der Anfragen.
    Hinweis: Es ist wichtig, die idempotente Funktionslogik zu testen und zu optimieren, um potenzielle Nebenwirkungen wie Timeouts, übermäßige Latenz oder Engpässe zu vermeiden.
  • Speichern Sie Sitzungsdaten mit einem Dienst, der leicht skalierbar ist und einen hohen Durchsatz bietet, wie DynamoDB.

Hinweis: Bei API-Aufrufen an Amazon Elastic Compute Cloud (Amazon EC2) bietet der Service den Parameter clientToken an. Dieser Parameter stellt sicher, dass eine mutierende API-Anfrage ihren Workflow nur einmal erfolgreich abschließt, auch wenn Sie mehrere Wiederholungen mit demselben clientToken initiieren.


Verwandte Informationen

Lambda-Programmiermodell

Erstellen einer Lambda-Funktion mit der Konsole

Sichere Wiederholungsversuche mit idempotenten APIs

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren