New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Warum kann mein Kinesis Data Streams-Trigger meine Lambda-Funktion nicht aufrufen?
Ich habe AWS Lambda in Amazon Kinesis Data Streams als Ereignisquelle integriert, um meinen Amazon Kinesis-Datenstrom zu verarbeiten, aber die Funktion wird nicht aufgerufen.
Kurzbeschreibung
Die folgenden Ursachen sind häufig für Lambda-Funktionsfehler aufgeführt:
- Unzureichende Berechtigungen in der Ausführungsrolle der Lambda-Funktion.
- Keine eingehenden Daten in den Kinesis-Datenstrom.
- Inaktive Ereignisquellenzuordnung, die durch die Neuerstellung eines Kinesis-Datenstroms, einer Lambda-Funktion oder einer Lambda-Ausführungsrolle verursacht wurde.
- Eine Lambda-Funktion, die die maximale Ausführungszeit überschreitet und einen Timeout-Fehler in der Lambda-Funktion verursacht.
- Lambda überschreitet seine Grenzen für gleichzeitige Ausführungen .
Wenn ein Lambda-Funktionsfehler auftritt, wird Ihre Funktion nicht aufgerufen. Die Funktion verarbeitet auch keine Datensätze aus dem Stapel. Ein Fehler kann dazu führen, dass Lambda den Stapel von Datensätzen erneut versucht, bis der Vorgang erfolgreich ist oder der Batch abläuft. Weitere Informationen zur Lambda-Funktion und zu Kinesis-Fehlern finden Sie unter Verwenden von AWS Lambda mit Amazon Kinesis.
Behebung
Beheben Sie Probleme mit Ihrer Lambda-Funktion.
Gehen Sie wie folgt vor, um herauszufinden, warum Ihre Lambda-Funktion nicht aufgerufen wird:
-
Überprüfen Sie die Metrik Aufrufe in Amazon CloudWatch, wobei die Statistik für die Lambda-Funktion auf Summe gesetzt ist. Mit der Metrik Aufrufe können Sie überprüfen, ob die Lambda-Funktion aufgerufen wurde.
-
Überprüfen Sie die IteratorAge-Metrik, um zu sehen, wie alt der letzte Datensatz im Batch war oder wann der Prozess abgeschlossen wurde. Wenn Ihr Lambda-Consumer keinen Aufruf durchführen kann, steigt das Iterator-Alter Ihres Streams.
-
Überprüfen Sie die CloudWatch-Protokolle der Lambda-Funktion. Die Protokolle verwenden die**... /aws/lambda/function\ _name**-Format für ihre Namen. Suchen Sie nach entsprechenden Einträgen für den Funktionsfehler. Wenn der Fehler beispielsweise aufgrund der AWS Identity and Access Management (IAM) -Rollenberechtigungen von Lambda auftritt, ändern Sie die IAM-Rollenrichtlinie.
-
Vergewissern Sie sich, dass Ihre IAM-Rolle über die richtigen Berechtigungen für den Zugriff auf CloudWatch verfügt:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
-
(Optional) Wenn ein Berechtigungsfehler auftritt, aktualisieren Sie Ihre Lambda-Funktionsrichtlinie und gewähren Sie ihr Zugriff auf Kinesis Data Streams:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:DescribeStreamSummary", "kinesis:GetRecords", "kinesis:GetShardIterator", "kinesis:ListShards", "kinesis:ListStreams", "kinesis:SubscribeToShard", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
Hinweis: Die AWSLambDakinesisExecutionRole-Richtlinie beinhaltet diese Berechtigungen.
Zusätzliche Problembehebung
Führen Sie die folgenden Aufgaben aus, um weitere Problembehebungen durchzuführen:
Timeout der Lambda-Ausführungsfunktion.
Wenn der Fehler mit einem Timeout der Lambda-Ausführungsfunktion zusammenhängt, erhöhen Sie den Timeout-Wert, um eine schnellere Verarbeitung zu ermöglichen.
Mit AWS KMS verschlüsselter Datenstrom.
Wenn Sie den AWS Key Management Service (AWS KMS) verwenden, um Ihren Kinesis-Datenstrom zu verschlüsseln, müssen der Verbraucher und der Producer über den richtigen Zugriff verfügen. Der Kinesis-Datenstream muss auf die AWS KMS-Schlüssel zugreifen können, die für die Verschlüsselung und Entschlüsselung verwendet werden. Die Ausführungsrolle der Lambda-Funktion muss außerdem Lesezugriff auf den KMS-Schlüssel haben, um Daten aus dem Kinesis-Datenstream erfolgreich lesen zu können.
**Interner Lambda-Funktionsfehler **
Wenn der Fehler durch einen internen Lambda-Funktionsfehler verursacht wird, liegt ein Problem mit der Stream-Verarbeitung vor. Um eine API-Drosselung auf der Steuerungsebene zu vermeiden, beschränken Sie jeden Stream auf 4 bis 5 Eventquellenzuordnungen. Diese Einschränkungen tragen dazu bei, zu viele Zuordnungen von Ereignisquellen mit demselben Datenstrom zu vermeiden. Zuordnungen mehrerer Ereignisquellen mit demselben Stream können zu einer Verletzung der Grenzwerte der Kinesis- und Amazon DynamoDB-Steuerungsebene führen.
Fehler beim Verbindungs-Timeout
Wenn Sie einen Verbindungs-Timeout-Fehler erhalten, fügen Sie vor und nach den API-Aufrufen in Ihrem Code Protokollierungsanweisungen hinzu. Identifizieren Sie dann die genaue Codezeile, an der die Funktion zu versagen beginnt.
Langsame oder ins Stocken geratene Shards
Wenn Sie langsame oder ins Stocken geratene Shards haben, konfigurieren Sie das Eventquellen-Mapping so, dass es erneut mit einer kleineren Batchgröße versucht wird. Sie können auch die Anzahl der Wiederholungsversuche einschränken oder ältere Datensätze verwerfen.
Fehler „Speicher belegt“
Wenn Sie in Ihren CloudWatch-Protokollen die Fehlermeldung „Speicher belegt“ sehen, erhöhen Sie den Speicher Ihrer Lambda-Funktion.
Maximaler Timeout überschritten
Wenn Sie das maximale Timeout für Ihre Lambda-Funktion überschritten haben, ändern Sie die Client-Bibliothek und die Client-Timeouts. Verwenden Sie die Funktion context.getRemainingTimeInMillis, um die Timeout-Sitzung auf der Grundlage der verbleibenden Zeit im Lambda-Container zu ändern. Die Funktion context.getRemainingTimeInMillis gibt die verbleibende Zeit im Lambda-Container zurück, bevor ein Timeout eintritt.
**Fehler im Lambda-Funktionscode **
Wenn der Code der Lambda-Funktion Fehler enthält, kann es sein, dass Ihre Lambda-Funktion beim Versuch desselben Datensatzes hängen bleibt. Verwenden Sie einen Try-Catch-Block, um die fehlgeschlagenen Daten abzufangen. Verwenden Sie dann eine Amazon Simple Queue Service (Amazon SQS) -Warteschlange oder ein Amazon Simple Notification Service (Amazon SNS) -Thema, um es aufzuzeichnen. Sie können der Amazon SQS-Warteschlange auch einen Lambda-Trigger mit der Verarbeitungslogik hinzufügen, um die fehlgeschlagenen Anfragen separat zu wiederholen.
SQS DLQ
Richten Sie eine Amazon SQS-Dead-Letter-Queue (DLQ) ein, um die Lambda-Funktion manuell aufzurufen. Konfigurieren Sie die Eigenschaft DeadletterConfig, wenn Sie Ihre Lambda-Funktion erstellen oder aktualisieren. Sie können eine Amazon SQS-Warteschlange oder ein Amazon SNS-Thema als TargetArn für Ihren DLQ angeben. Lambda schreibt dann das Ereignisobjekt und ruft die Lambda-Funktion für den angegebenen Endpunkt auf, nachdem die standardmäßige Wiederholungsrichtlinie erschöpft ist.
Lambda mit X-Ray
Verwenden Sie Lambda mit AWS X-Ray, um Leistungsprobleme mit Lambda-Anwendungen zu erkennen, zu analysieren und zu optimieren. X-Ray sammelt Metadaten aus dem Lambda-Service und generiert Grafiken, die Probleme darstellen, die sich auf die Leistung der Lambda-Anwendung auswirken. Wenn es beispielsweise einen Anruf gibt, dessen Ausführung lange dauert, können Sie AWS X-Ray verwenden, um das Problem zu bestätigen.

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr