Warum wird meine Lambda-Funktion, die mit SQS als Ereignisquelle konfiguriert ist, nicht aufgerufen?

Lesedauer: 5 Minute
0

Ich habe meine AWS-Lambda-Funktion so konfiguriert, dass sie Nachrichten in einer Warteschlange von Amazon Simple Queue Service (Amazon SQS) verarbeitet. Meine Lambda-Funktion wird jedoch nicht aufgerufen und verarbeitet keine Nachrichten in der Warteschlange.

Lösung

Voraussetzungen

  • Vergewissern Sie sich, dass die Lambda-Funktion mit Amazon SQS als Ereignisquelle konfiguriert ist.
  • Vergewissern Sie sich, dass die AWS Identity and Access Management (IAM)-Rolle der Lambda-Funktion über die Berechtigungen verfügt, die sie zum Abrufen von Nachrichten aus der SQS-Warteschlange benötigt.
  • Überprüfen Sie die Amazon-CloudWatch-Metriken für Ihre Funktion auf Aufrufe und die SQS-Warteschlange, um sicherzustellen, dass Nachrichten in der Warteschlange verfügbar sind. Wenn Nachrichten nicht sichtbar sind oder nicht an die SQS-Warteschlange gesendet werden, stellen Sie sicher, dass der Producer über die erforderlichen Berechtigungen verfügt. Der Benutzer oder die Rolle muss über die folgenden Berechtigungen für Amazon SQS und AWS Key Management Service (AWS KMS) verfügen:
    sqs:SendMessage
    kms:GenerateDataKey
    kms:Decrypt

Hinweis: Wenn die Warteschlange nicht verschlüsselt ist, benötigen Sie keine AWS-KMS-Berechtigungen.

Überprüfen Sie, ob die URL der Lambda-Funktion und der SQS-Warteschlange korrekt sind

Vergewissern Sie sich, dass der Amazon-Ressourcenname (ARN) der Lambda-Funktion und die URL der SQS-Warteschlange der Ereignisquelle, die der Lambda-Funktion zugeordnet ist, korrekt sind. Aktivieren Sie außerdem die Zuordnung von Ereignisquellen.

  1. Öffnen Sie die Lambda-Konsole.
  2. Wählen Sie im Navigationsbereich Funktionen aus.
  3. Wählen Sie die Funktion aus, die Sie überprüfen möchten.
  4. Wählen Sie den SQS-Trigger und erweitern Sie ihn, um zu überprüfen, ob die URL der SQS-Warteschlange korrekt ist. Vergewissern Sie sich außerdem, dass der Trigger-Status aktiviert ist. Weitere Informationen finden Sie unter Warum wurde mein Lambda Amazon SQS Trigger deaktiviert?

Um diese Prüfungen durchzuführen, können Sie auch den Befehl list-event-source-mapping ausführen.

Beispiel:

aws lambda list-event-source-mappings --function-name <my-function> --region <region-name>

Hinweis: Ersetzen Sie <my-function> mit dem Namen Ihrer Lambda-Funktion und ersetzen Sie <region name> mit Ihrer AWS-Region.

Die Berechtigungen der Lambda-Funktion überprüfen

Wenn die Lambda-IAM-Rolle berechtigt ist, Nachrichten aus der SQS-Warteschlange abzurufen, überprüfen Sie die Zugriffsrichtlinie der SQS-Warteschlange. Suchen Sie nach Ablehnungsregeln, die die Lambda-Funktion einschränken könnten.

  1. Öffnen Sie die Amazon-SQS-Konsole.
  2. Wählen Sie im Navigationsbereich Warteschlangen aus.
  3. Wählen Sie die SQS-Warteschlange und dann die Registerkarte Zugriffsrichtlinie aus.
  4. Überprüfen Sie die Richtlinien auf Ablehnungsrichtlinien, die den Lambda-Verkehr blockieren könnten. Wenn es eine Richtlinie gibt, die den Verkehr blockiert, fügen Sie der Ablehnungsanweisung eine Bedingung hinzu, Anfragen von Lambda zu ignorieren.

Ihr Lambda-Funktions-IAM muss über die folgenden Berechtigungen verfügen:

  • DeleteMessage
  • GetQueueAttributes
  • ReceiveMessage

Die Verschlüsselungseinstellungen für die Warteschlange überprüfen

Wenn die Warteschlange verschlüsselt ist, benötigt die IAM-Rolle der Lambda-Funktion die entsprechenden Berechtigungen, um AWS-KMS-Aktionen auszuführen. Ohne diese Berechtigungen kann die Lambda-Funktion keine Nachrichten aus der SQS-Warteschlange verarbeiten. Wenn die Amazon-SQS-Warteschlange mit der AWS-KMS-Verschlüsselung konfiguriert ist, führen Sie die folgenden Aufgaben aus:

  • Stellen Sie sicher, dass der AWS-KMS-Schlüssel vorhanden ist.
  • Stellen Sie sicher, dass die Rolle der Lambda-Funktion über kms:Decrypt-Berechtigungen verfügt.
  • Stellen Sie sicher, dass die Berechtigungen der AWS-KMS-Schlüsselrichtlinie so konfiguriert sind, dass Aktionen von der Lambda-Rolle aus zulässig sind.

Hinweis: Amazon-SQS-Warteschlangen mit dem Standardschlüssel (AWS-KMS-Schlüssel für Amazon SQS) können keine Lambda-Funktion in einem anderen AWS-Konto aufrufen.

Prüfen, ob die spezifische Lambda-Funktion gedrosselt ist

Lambda hat ein regionales Nebenläufigkeitslimit. Wenn andere Funktionen in der AWS-Region diese Kapazität aktiv maximal nutzen, kann es zu Drosselungen der Funktion kommen. Dies kann auch dann passieren, wenn die Funktion selbst nicht die maximale Kapazität erreicht.

Wenn Sie für die Funktion eine reservierte Nebenläufigkeit auf 0 setzen, werden in der Funktion keine Aufrufe ausgeführt. Alle Nachrichten von Amazon SQS werden gedrosselt. Überprüfen Sie die regionale Metrik ConcurrentExecutions (maximal) und die Throttle (SUM)-Metriken der Funktion in Amazon CloudWatch. Prüfen Sie, ob die regionale Kapazität erreicht ist und ob die Funktion Drosselungen aufweist. Stellen Sie sicher, dass genügend Kapazität vorhanden ist, um die Funktion aufzurufen und SQS-Nachrichten zu verarbeiten.

Sicherstellen, dass sich keine anderen aktiven Verbraucher in derselben SQS-Warteschlange befinden

Wenn sich mehr als ein aktiver Kunde in der SQS-Warteschlange befindet, können diese Kunden Ihre Nachrichten nutzen. SQS-Nachrichten sind so konzipiert, dass jeweils nur ein Kunde die Nachrichten abrufen kann. Wenn also ein anderer Kunde die SQS-Warteschlange nutzt, empfängt Ihre Lambda-Funktion möglicherweise keine Nachrichten, wenn sie die SQS-Warteschlange abfragt. Verwenden Sie die Amazon-SQS-Konsole, um sicherzustellen, dass keine anderen Lambda-Aufrufe oder Amazon-SQS-Aufrufe vorhanden sind.

Hinweis: Andere Kunden rufen möglicherweise programmgesteuert Nachrichten aus der SQS-Warteschlange ab. Diese Abrufe werden in der Konsole nicht angezeigt.

Überprüfen, ob die SQS-Ereignisquelle mit Filtern konfiguriert ist

Überprüfen Sie, ob die SQS-Ereignisquelle mit irgendwelchen Filtern konfiguriert ist. Wenn Ihre SQS-Ereignisquelle mit Filtern konfiguriert ist, stellen Sie sicher, dass Sie keine Amazon-SQS-Nachrichten herausfiltern.

  1. Öffnen Sie die Lambda-Konsole.
  2. Wählen Sie im Navigationsbereich Funktionen aus.
  3. Wählen Sie die Funktion aus, die Sie überprüfen möchten.
  4. Wählen Sie den SQS-Trigger aus und überprüfen Sie dann die Filterkriterien. Wenn in der Trigger-Konfiguration der Schlüsselname nicht angezeigt wird, ist kein Filter konfiguriert. Wenn ein Filterkriterium konfiguriert ist, überprüfen Sie den Filter, um sicherzustellen, dass er Lambda die Verarbeitung gültiger Nachrichten ermöglicht. Um die Filterkriterien vorübergehend zu entfernen, wählen Sie Bearbeiten.
  5. Wenn die Funktion aufgerufen wird, nachdem Sie den Filter entfernt haben, ändern Sie die Filterkriterien so, dass sie Ihrem Anwendungsfall entsprechen.

Weitere Informationen finden Sie unter Filtern mit Amazon SQS und Bewährte Methoden für die Implementierung der Lambda-Ereignisfilterung.

Ähnliche Informationen

Verwendung von Lambda mit Amazon SQS

Warum skaliert meine Lambda-Funktion mit einer Amazon-SQS-Eventquelle nicht optimal?

Warum führt meine Lambda-Funktion erneute Versuche für gültige Amazon-SQS-Nachrichten durch und platziert sie in meiner Warteschlange für unzustellbare Nachrichten?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 6 Monaten