View a markdown version of this page

Behebung von Problemen mit der Zuordnung von Ereignisquellen in Lambda - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Behebung von Problemen mit der Zuordnung von Ereignisquellen in Lambda

Probleme in Lambda, die sich auf die Zuordnung von Ereignisquellen beziehen, können komplexer sein, da sie das Debuggen mehrerer Services beinhalten. Darüber hinaus kann das Verhalten der Ereignisquelle je nach der verwendeten Ereignisquelle unterschiedlich sein. In diesem Abschnitt werden häufig auftretende Probleme im Zusammenhang mit der Zuordnung von Ereignisquellen aufgeführt und Hinweise zu deren Identifizierung und Behebung gegeben.

Anmerkung

In diesem Abschnitt wird zur Veranschaulichung eine Amazon-SQS-Ereignisquelle verwendet, aber die Prinzipien gelten auch für andere Zuordnungen von Ereignisquellen, die Nachrichten für Lambda-Funktionen in die Warteschlange stellen.

Drosselung erkennen und verwalten

In Lambda erfolgt die Drosselung, wenn das Gleichzeitigkeitslimit Ihrer Funktion oder Ihres Kontos erreicht ist. Betrachten Sie das folgende Beispiel, in dem es eine Lambda-Funktion gibt, um Nachrichten aus einer Amazon-SQS-Warteschlange zu lesen. Diese Lambda-Funktion simuliert 30-Sekunden-Aufrufe und hat eine Batchgröße von 1. Das bedeutet, dass die Funktion alle 30 Sekunden nur eine Nachricht verarbeitet:

const doWork = (ms) => new Promise(resolve => setTimeout(resolve, ms))

exports.handler = async (event) => {
    await doWork(30000)

}

Bei einer so langen Aufrufzeit kommen Nachrichten schneller in der Warteschlange an als sie verarbeitet werden. Wenn die nicht reservierte Gleichzeitigkeit Ihres Kontos 100 beträgt, skaliert Lambda auf 100 gleichzeitige Ausführungen hoch, und dann erfolgt eine Drosselung. Sie können dieses Muster in den CloudWatch Metriken für die Funktion sehen:

CloudWatch Metriken, die zeigen, dass die Anzahl gleichzeitiger Ausführungen 100 erreicht und die Drosselung zunimmt, wenn die Funktion ihr Limit erreicht.

CloudWatch Die Metriken für die Funktion zeigen keine Fehler, aber das Diagramm „Gleichzeitige Ausführungen“ zeigt, dass die maximale Parallelität von 100 erreicht ist. Aus diesem Grund zeigt das Diagramm Drosselungen, dass die Drosselung bereits besteht.

Sie können Drosselung anhand von CloudWatch Alarmen erkennen und immer dann einen Alarm auslösen, wenn die Drosselungsmetrik für eine Funktion größer als 0 ist. Nachdem Sie das Drosselungsproblem identifiziert haben, stehen Ihnen einige Lösungsmöglichkeiten zur Verfügung:

  • Fordern Sie beim Support in dieser Region eine Erhöhung der Parallelität an AWS .

  • Identifizieren Sie Leistungsprobleme in der Funktion, um die Verarbeitungsgeschwindigkeit und damit den Durchsatz zu verbessern.

  • Erhöhen Sie die Batchgröße der Funktion, sodass bei jedem Aufruf mehr Nachrichten verarbeitet werden.

Fehler in der Verarbeitungsfunktion

Wenn die Verarbeitungsfunktion Fehler ausgibt, gibt Lambda die Nachrichten an die SQS-Warteschlange zurück. Lambda verhindert, dass Ihre Funktion skaliert wird, um Skalierungsfehler zu vermeiden. Die folgenden SQS-Metriken CloudWatch weisen auf ein Problem bei der Warteschlangenverarbeitung hin:

CloudWatch SQS-Metriken zeigen, dass das Alter der ältesten Nachricht und die Anzahl sichtbarer Nachrichten zunimmt, während keine Nachrichten gelöscht werden.

Insbesondere nehmen sowohl das Alter der ältesten Nachricht als auch die Anzahl der sichtbaren Nachrichten zu, während keine Nachrichten gelöscht werden. Die Warteschlange wächst weiter, aber Nachrichten werden nicht verarbeitet. Die CloudWatch Metriken für die Lambda-Funktion zur Verarbeitung weisen ebenfalls auf ein Problem hin:

CloudWatch Lambda-Metriken zeigen eine steigende Anzahl von Fehlern bei geringerer Parallelität und ohne Drosselung, was darauf hindeutet, dass die Skalierung gestoppt wurde.

Die Metrik für die Anzahl der Fehler ist ungleich Null und nimmt weiter zu, während die Anzahl der gleichzeitigen Ausführungen zurückgegangen ist und die Drosselung eingestellt wurde. Dies deutet darauf hin, dass Lambda die Hochskalierung Ihrer Funktion aufgrund von Fehlern eingestellt hat. Die CloudWatch Protokolle für die Funktion enthalten Details zur Art des Fehlers.

Sie können dieses Problem lösen, indem Sie die Funktion identifizieren, die den Fehler verursacht hat und dann den Fehler finden und beheben. Nachdem Sie den Fehler behoben und den neuen Funktionscode bereitgestellt haben, sollten die CloudWatch Metriken die Verarbeitungswiederherstellung anzeigen:

CloudWatch Lambda-Metriken zeigen, dass die Fehleranzahl auf Null sinkt und die Erfolgsrate nach der Bereitstellung des Fixes wieder auf 100% zurückkehrt.

Hier sinkt die Metrik Anzahl der Fehler auf Null und die Metrik Erfolgsquote kehrt auf 100 % zurück. Lambda beginnt erneut mit der Hochskalierung der Funktion, wie im Diagramm Gleichzeitige Ausführungen dargestellt.

Identifizierung und Behandlung von Gegendruck

Wenn ein Ereignisproduzent konsistent Nachrichten für eine SQS-Warteschlange schneller generiert, als eine Lambda-Funktion diese verarbeiten kann, entsteht Gegendruck. In diesem Fall sollte die SQS-Überwachung das Alter der ältesten Nachricht linear ansteigen lassen, zusammen mit der ungefähren Anzahl der sichtbaren Nachrichten. Mithilfe von Alarmen können Sie den Gegendruck in Warteschlangen erkennen. CloudWatch

Die Schritte zur Behebung von Gegendruck hängen von Ihrem Workload ab. Wenn das Hauptziel darin besteht, die Verarbeitungskapazität und den Durchsatz durch die Lambda-Funktion zu erhöhen, haben Sie einige Möglichkeiten:

  • Fordern Sie beim Support eine Erhöhung der Parallelität in der jeweiligen Region an. AWS

  • Erhöhen Sie die Batchgröße der Funktion, sodass bei jedem Aufruf mehr Nachrichten verarbeitet werden.