Fehlerverarbeitungs-Beispielanwendung für AWS 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.

Fehlerverarbeitungs-Beispielanwendung für AWS Lambda

Die Beispielanwendung Error Processor zeigt die Verwendung von AWS Lambda zum Verarbeiten von Ereignissen aus einem Amazon CloudWatch -Logs-Abonnement. CloudWatch Mit Logs können Sie eine Lambda-Funktion aufrufen, wenn ein Protokolleintrag einem Muster entspricht. Das Abonnement in dieser Anwendung überwacht die Protokollgruppe einer Funktion auf Einträge, die das Wort enthalte ERROR. Es ruft als Reaktion eine Verarbeitungs-Lambda-Funktion auf. Die Verarbeitungsfunktion ruft den vollständigen Protokoll-Stream und alle Nachverfolgungsdaten für die Anfrage ab, die den Fehler verursacht hat, und speichert sie für die spätere Verwendung.

Der Funktionscode steht in den folgenden Dateien zur Verfügung.

Mit der AWS CLI und AWS CloudFormation können Sie das Beispiel innerhalb weniger Minuten bereitstellen. Befolgen Sie zum Herunterladen, Konfigurieren und Bereitstellen in Ihrem Konto die Anweisungen in der README-Datei.

Architektur und Ereignisstruktur

Die Beispielanwendung verwendet die folgenden AWS-Services.

  • AWS Lambda – Führt Funktionscode aus, sendet Protokolle an CloudWatch Logs und sendet Ablaufverfolgungsdaten an X-Ray.

  • Amazon CloudWatch Logs – sammelt Protokolle und ruft eine Funktion auf, wenn ein Protokolleintrag einem Filtermuster entspricht.

  • AWS X-Ray – sammelt Nachverfolgungsdaten, indiziert Ablaufverfolgungen für die Suche und generiert eine Service-Übersicht.

  • Amazon Simple Storage Service (Amazon S3) — Speichert Bereitstellungsartefakte und Anwendungsausgaben.

Für jeden Service fallen Standardgebühren an.

Eine Lambda-Funktion in der Anwendung generiert nach dem Zufallsprinzip Fehler. Wenn CloudWatch Logs das Wort ERROR in den Protokollen der Funktion erkennt, sendet es ein Ereignis zur Verarbeitung an die Prozessorfunktion.

Beispiel CloudWatch Protokolliert Nachrichtenereignis
{ "awslogs": { "data": "H4sIAAAAAAAAAHWQT0/DMAzFv0vEkbLYcdJkt4qVXmCDteIAm1DbZKjS+kdpB0Jo350MhsQFyVLsZ+unl/fJWjeO5asrPgbH5..." } }

In ihrer entschlüsselten Form enthalten die Daten Details zum Protokollereignis. Die Funktion verwendet diese Details zum Identifizieren des Protokoll-Streams und analysiert die Protokollnachricht, um die ID der Anfrage herauszufinden, die den Fehler verursacht hat.

Beispiel dekodierte CloudWatch Protokollereignisdaten
{ "messageType": "DATA_MESSAGE", "owner": "123456789012", "logGroup": "/aws/lambda/lambda-error-processor-randomerror-1GD4SSDNACNP4", "logStream": "2019/04/04/[$LATEST]63311769a9d742f19cedf8d2e38995b9", "subscriptionFilters": [ "lambda-error-processor-subscription-15OPDVQ59CG07" ], "logEvents": [ { "id": "34664632210239891980253245280462376874059932423703429141", "timestamp": 1554415868243, "message": "2019-04-04T22:11:08.243Z\t1d2c1444-efd1-43ec-b16e-8fb2d37508b8\tERROR\n" } ] }

Die Prozessorfunktion verwendet Informationen aus dem CloudWatch Protokollereignis, um den vollständigen Protokollstream und die X-Ray-Ablaufverfolgung für eine Anforderung herunterzuladen, die einen Fehler verursacht hat. Sie speichert beide in einem Amazon-S3-Bucket. Um dem Protokoll-Stream und der Nachverfolgung die nötige Zeit zu gewähren, wartet die Funktion kurz, bevor sie auf die Daten zugreift.

Instrumentierung mit AWS X-Ray

Die Anwendung verwendet AWS X-Ray, um Funktionsaufrufe und die Aufrufe von Funktionen an AWS-Services zu verfolgen. X-Ray verwendet die Nachverfolgungsdaten, die es von Funktionen erhält, um eine Service-Übersicht zu erstellen, die Ihnen bei der Identifikation von Fehlern hilft.

Die beiden Node.js-Funktionen sind in der Vorlage für die aktive Nachverfolgung konfiguriert und sind im Code mit AWS X-Ray-SDK for Node.js instrumentiert. Bei aktiver Nachverfolgung fügt Lambda eingehenden Anfragen einen Nachverfolgungs-Header hinzu und sendet eine Nachverfolgung mit Details zum Zeitablauf an X-Ray. Außerdem nutzt die Zufallsfehlerfunktion das X-Ray-SDK, um die Anfrage-ID und Benutzerinformationen in Anmerkungen aufzuzeichnen. Die Anmerkungen werden der Nachverfolgung angefügt und dazu verwendet, die Nachverfolgung für eine bestimmte Anfrage zu lokalisieren.

Die Prozessorfunktion ruft die Anforderungs-ID aus dem CloudWatch Protokollereignis ab und verwendet die , AWS SDK for JavaScript um X-Ray nach dieser Anforderung zu durchsuchen. Sie verwendet AWS SDK-Clients, die mit dem X-Ray-SDK instrumentiert sind, zum Herunterladen der Nachverfolgung und des Protokoll-Streams. Sie speichert diese dann im Ausgabe-Bucket. Das X-Ray-SDK zeichnet diese Aufrufe auf. Sie erscheinen als Untersegmente in der Nachverfolgung.

AWS CloudFormation-Vorlage und zusätzliche Ressourcen

Die Anwendung wird in zwei Node.js-Modulen implementiert und mit einer AWS CloudFormation-Vorlage und unterstützende Shell-Skripts bereitgestellt. Die Vorlage erstellt die Verarbeitungsfunktion, die Zufallsfehlerfunktion und die folgenden unterstützenden Ressourcen.

  • Ausführungsrolle – Eine IAM-Rolle, die den Funktionen die Berechtigung erteilt, auf andere AWS-Services zuzugreifen.

  • Primer-Funktion – eine zusätzliche Funktion, die die Zufallsfehlerfunktion auslöst, um eine Protokollgruppe zu erstellen.

  • Benutzerdefinierte Ressource – Eine benutzerdefinierte AWS CloudFormation-Ressource ruft die Primer-Funktion während der Bereitstellung auf, um sicherzustellen, dass die Protokollgruppe vorhanden ist.

  • CloudWatch Protokollabonnement – Ein Abonnement für den Protokollstream, das die Prozessorfunktion auslöst, wenn das Wort ERROR protokolliert wird.

  • Ressourcenbasierte Richtlinie – Eine Berechtigungsanweisung für die Prozessorfunktion, die es CloudWatch Protokollen ermöglicht, sie aufzurufen.

  • Amazon-S3-Bucket – ein Speicherort für die Ausgabe aus der Verarbeitungsfunktion.

Zeigen Sie die Anwendungsvorlage auf an GitHub.

Um eine Einschränkung der Lambda-Integration in AWS CloudFormation zu umgehen, erstellt die Vorlage eine zusätzliche Funktion, die während der Bereitstellung ausgeführt wird. Alle Lambda-Funktionen verfügen über eine CloudWatch Logs-Protokollgruppe, die die Ausgabe von Funktionsausführungen speichert. Allerdings wird die Protokollgruppe erst erstellt, wenn die Funktion zum ersten Mal aufgerufen wird.

Zum Erstellen des Abonnements, was vom Vorhandensein der Protokollgruppe abhängt, nutzt die Anwendung eine dritte Lambda-Funktion, um die Zufallsfehlerfunktion aufzurufen. Die Vorlage enthält den Code für die Primer-Funktion inline. Eine benutzerdefinierte AWS CloudFormation-Ressource ruft sie während der Bereitstellung auf. DependsOn-Eigenschaften stellen sicher, dass Protokoll-Stream und ressourcenbasierte Richtlinien vor dem Abonnement erstellt werden.