View a markdown version of this page

Erfassung von Datensätzen asynchroner Lambda-Aufrufe - 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.

Erfassung von Datensätzen asynchroner Lambda-Aufrufe

Lambda kann Aufzeichnungen von asynchronen Aufrufen an einen der folgenden Server senden. AWS-Services

  • Amazon SQS – Eine standardmäßige SQS-Warteschlange

  • Amazon SNS – Ein SNS-Standardthema

  • Amazon S3 – Ein Amazon S3-Bucket (nur bei einem Fehler)

  • AWS Lambda – Eine Lambda-Funktion

  • Amazon EventBridge — Ein EventBridge Eventbus

Der Aufrufdatensatz enthält Details zur Anforderung und Antwort im JSON-Format. Sie können separate Ziele für Ereignisse konfigurieren, die erfolgreich verarbeitet werden, und für Ereignisse, bei denen alle Verarbeitungsversuche fehlschlagen. Alternativ können Sie eine Amazon-SQS-Standardwarteschlange oder ein Amazon-SNS-Standardthema als Warteschlange für unzustellbare Nachrichten für verworfene Ereignisse konfigurieren. Für Warteschlangen für unzustellbare Nachrichten sendet Lambda nur den Inhalt des Ereignisses ohne Details zur Antwort.

Wenn Lambda einen Datensatz nicht an ein von Ihnen konfiguriertes Ziel senden kann, sendet es eine DestinationDeliveryFailures Metrik an Amazon CloudWatch. Dies kann passieren, wenn Ihre Konfiguration einen nicht unterstützten Zieltyp enthält, z. B. eine Amazon-SQS-FIFO-Warteschlange oder ein Amazon-SNS-FIFO-Thema. Zustellungsfehler können auch aufgrund von Berechtigungsfehlern und Größenbeschränkungen auftreten. Weitere Informationen zu Lambda-Aufrufmetriken finden Sie unter Aufrufmetriken.

Anmerkung

Um zu verhindern, dass eine Event-Funktion ausgelöst wird, können Sie die reservierte Parallelität der Funktion auf Null setzen. Wenn Sie die reservierte Parallelität für eine asynchron aufgerufene Funktion auf Null setzen, sendet Lambda sofort und ohne Wiederholungsversuche alle Ereignisse ohne erneute Versuche an die konfigurierte Warteschlange für unzustellbare Nachrichten oder an das Ereignisziel bei Fehlern. Um Ereignisse zu verarbeiten, die gesendet wurden, während die reservierte Parallelität auf Null gesetzt war, müssen Sie die Ereignisse aus der Warteschlange für unzustellbare Nachrichten oder dem Ereignisziel bei Fehlern verarbeiten.

Hinzufügen eines Ziels

Um Aufzeichnungen über asynchrone Aufrufe beizubehalten, fügen Sie Ihrer Event-Funktion ein Ziel hinzu. Sie können wählen, ob erfolgreiche Aufrufe oder fehlgeschlagene Aufrufe an ein Ziel gesendet werden sollen. Jede Funktion kann mehrere Ziele haben, sodass Sie separate Ziele für erfolgreiche und fehlgeschlagene Ereignisse konfigurieren können. Jeder Datensatz, der an das Ziel gesendet wird, ist ein JSON-Dokument mit Details zum Aufruf. Wie bei den Einstellungen für die Fehlerbehandlung können Sie Ziele für eine Ereignisfunktion, eine Funktionsversion oder einen Alias konfigurieren.

Tipp

Sie können auch Aufzeichnungen über fehlgeschlagene Aufrufe für die folgenden Typen von Ereignisquellenzuordnungen speichern: Amazon Kinesis, Amazon DynamoDB und Apache Kafka (Amazon MSK und selbstverwalteter Apache Kafka).

In der folgenden Tabelle werden die unterstützten Ziele für Datensätze der asynchronen Aufrufen aufgelistet. Damit Lambda erfolgreich Datensätze an das von Ihnen gewählte Ziel senden kann, stellen Sie sicher, dass die Ausführungsrolle Ihrer Event-Funktion auch die entsprechenden Berechtigungen enthält. In der Tabelle wird auch beschrieben, wie jeder Zieltyp den JSON-Aufrufdatensatz empfängt.

Zieltyp Erforderliche Berechtigung Destination-specific JSON-Format

Amazon-SQS-Warteschlange

sqs: SendMessage

Lambda übergibt den Aufrufdatensatz als Message an das Ziel.

Amazon-SNS-Thema

sns:Publish

Lambda übergibt den Aufrufdatensatz als Message an das Ziel.

Ein Amazon S3-Bucket (nur bei einem Fehler)

s3: PutObject

s3: ListBucket

  • Lambda speichert den Aufrufdatensatz als JSON-Objekt im Ziel-Bucket.

  • Der Name des S3-Objekts wird nach folgender Konvention benannt:

    aws/lambda/async/<function-name>/YYYY/MM/DD/YYYY-MM-DDTHH.MM.SS-<Random UUID>

Lambda-Ereignisfunktion

Lambda: InvokeFunction

Lambda übergibt den Aufrufdatensatz als Nutzlast in der Funktion.

EventBridge

Ereignisse: PutEvents

  • Lambda übergibt den Aufrufdatensatz wie detail im PutEvents Aufruf.

  • Der Wert für das source-Ereignisfeld ist lambda.

  • Der Wert für das detail-type-Ereignisfeld ist entweder „Lambda Function Invocation Result – Success“ (Ergebnis des Lambda-Funktionsaufrufs: Erfolgreich) oder „Lambda Function Invocation Result – Failure“ (Ergebnis des Lambda-Funktionsaufrufs: Fehler).

  • Das resource-Ereignisfeld enthält die Amazon Resource Names (ARNs) für Funktion und Ziel.

  • Weitere Veranstaltungsbereiche finden Sie unter EventBridge Amazon-Veranstaltungen.

Anmerkung

Wenn Sie für Amazon S3 S3-Ziele die Verschlüsselung für den Bucket mithilfe eines KMS-Schlüssels aktiviert haben, benötigt Ihre Event Function auch die kms: GenerateDataKey -Berechtigung.

Wichtig

Wenn Sie Amazon SNS als Ziel verwenden, beachten Sie, dass Amazon SNS eine maximale Nachrichtengröße von 256 KB hat. Wenn sich Ihre Nutzlast für asynchrone Aufrufe 1 MB nähert, kann der Aufrufdatensatz (der die ursprüngliche Nutzlast plus zusätzliche Metadaten enthält) das Amazon SNS SNS-Limit überschreiten und zu Zustellungsfehlern führen. Erwägen Sie die Verwendung von Amazon-SQS- oder Amazon-S3-Zielen für größere Nutzdaten.

In den folgenden Schritten wird beschrieben, wie Sie mit der Lambda-Konsole und der AWS CLI ein Ziel für eine Funktion konfigurieren.

Console
  1. Öffnen Sie die Seite Event Functions der Lambda-Konsole.

  2. Wählen Sie eine Event-Funktion aus.

  3. Wählen Sie unter Function overview (Funktionsübersicht) die Option Add destination (Ziel hinzufügen).

  4. Wählen Sie unter Source (Quelle) die Option Asynchronous invocation (Asynchroner Aufruf).

  5. Wählen Sie unter Condition (Bedingung) eine der folgenden Optionen aus:

    • Bei Fehler – Es wird ein Datensatz gesendet, wenn das Ereignis alle Verarbeitungsversuche ausschöpft oder das maximale Alter überschreitet.

    • Bei Erfolg – Es wird ein Datensatz gesendet, wenn die Funktion einen asynchronen Aufruf erfolgreich verarbeitet.

  6. Wählen Sie unter Destination type (Zieltyp) den Ressourcentyp aus, der den Aufrufdatensatz empfängt.

  7. Wählen Sie unter Destination (Ziel) eine Ressource aus.

  8. Wählen Sie Speichern.

AWS CLI

Um ein Ziel mit dem zu konfigurieren AWS CLI, führen Sie den Befehl update-function-event-invoke-config aus. Im folgenden Beispiel wird Lambda so konfiguriert, dass ein Datensatz an eine SQS-Standardwarteschlange namens destination gesendet wird, wenn ein Ereignis nicht verarbeitet werden kann.

aws lambda update-function-event-invoke-config \ --function-name my-function \ --destination-config '{"OnFailure":{"Destination": "arn:aws:sqs:us-east-1:123456789012:destination"}}'

Bewährte Methoden für die Sicherheit in Amazon-S3-Zielen

Das Löschen eines S3-Buckets, der als Ziel konfiguriert ist, ohne das Ziel aus der Konfiguration Ihrer Funktion zu entfernen, kann ein Sicherheitsrisiko darstellen. Wenn ein anderer Benutzer den Namen Ihres Ziel-Buckets kennt, kann er den Bucket in seinem AWS-Konto neu erstellen. Aufzeichnungen über fehlgeschlagene Aufrufe werden an den entsprechenden Bucket gesendet, wodurch möglicherweise Daten aus Ihrer Funktion verfügbar gemacht werden.

Warnung

Um sicherzustellen, dass Aufrufdatensätze aus Ihrer Event-Funktion nicht an einen S3-Bucket in einem anderen gesendet werden können AWS-Konto, fügen Sie der Ausführungsrolle Ihrer Funktion eine Bedingung hinzu, die die Berechtigungen auf Buckets in Ihrem Konto beschränkt. s3:PutObject

-Das folgende Beispiel zeigt eine IAM-Richtlinie, die die s3:PutObject-Berechtigungen Ihrer Funktion auf Buckets in Ihrem Konto beschränkt. Diese Richtlinie gibt Lambda auch die s3:ListBucket-Erlaubnis, einen S3-Bucket als Ziel zu verwenden.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3BucketResourceAccountWrite", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*/*", "arn:aws:s3:::*" ], "Condition": { "StringEquals": { "s3:ResourceAccount": "111122223333" } } } ] }

Um der Ausführungsrolle Ihrer Funktion mithilfe von AWS-Managementkonsole oder eine Berechtigungsrichtlinie hinzuzufügen AWS CLI, lesen Sie die Anweisungen in den folgenden Verfahren:

Console
So fügen Sie der Ausführungsrolle einer Funktion (Konsole) eine Berechtigungsrichtlinie hinzu
  1. Öffnen Sie die Seite Event Functions der Lambda-Konsole.

  2. Wählen Sie die Lambda-Ereignisfunktion aus, deren Ausführungsrolle Sie ändern möchten.

  3. Klicken Sie in der Registerkarte Konfiguration auf die Option Berechtigungen.

  4. Wählen Sie auf der Registerkarte Ausführungsrolle den Rollennamen Ihrer Funktion aus, um die IAM-Konsolenseite der Rolle zu öffnen.

  5. Fügen Sie der Rolle wie folgt eine Richtlinie mit Berechtigungen hinzu:

    1. Wählen Sie im Bereich Berechtigungsrichtlinien die Optionen Berechtigungen hinzufügen und dann Inline-Richtlinie erstellen aus.

    2. Wählen Sie im Richtlinien-Editor JSON aus.

    3. Fügen Sie die Richtlinie, die Sie hinzufügen möchten, in den Editor ein (indem Sie die vorhandene JSON-Datei ersetzt) und wählen Sie dann Weiter aus.

    4. Geben Sie unter Richtliniendetails für den Richtliniennamen ein.

    5. Wählen Sie Richtlinie erstellen aus.

AWS CLI
So fügen Sie der Ausführungsrolle (CLI) einer Event-Funktion eine Berechtigungsrichtlinie hinzu
  1. Erstellen Sie ein JSON-Richtliniendokument mit den erforderlichen Berechtigungen und speichern Sie es in einem lokalen Verzeichnis.

  2. Verwenden Sie den put-role-policy IAM-CLI-Befehl, um die Berechtigungen zur Ausführungsrolle Ihrer Funktion hinzuzufügen. Führen Sie den folgenden Befehl in dem Verzeichnis aus, in dem Sie Ihr JSON-Richtliniendokument gespeichert haben und ersetzen Sie den Rollennamen, den Richtliniennamen und das Richtliniendokument durch Ihre eigenen Werte.

    aws iam put-role-policy \ --role-name my_lambda_role \ --policy-name LambdaS3DestinationPolicy \ --policy-document file://my_policy.json

Beispiel für Aufrufdatensatz

Wenn ein Aufruf mit der Bedingung übereinstimmt, sendet Lambda ein JSON-Dokument mit Details zum Aufruf an das Ziel. Das folgende Beispiel zeigt einen Aufrufdatensatz für ein Ereignis, bei dem drei Verarbeitungsversuche aufgrund eines Fehlers in der Ereignisfunktion fehlgeschlagen sind.

Beispiel
{ "version": "1.0", "timestamp": "2019-11-14T18:16:05.568Z", "requestContext": { "requestId": "e4b46cbf-b738-xmpl-8880-a18cdf61200e", "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function:$LATEST", "condition": "RetriesExhausted", "approximateInvokeCount": 3 }, "requestPayload": { "ORDER_IDS": [ "9e07af03-ce31-4ff3-xmpl-36dce652cb4f", "637de236-e7b2-464e-xmpl-baf57f86bb53", "a81ddca6-2c35-45c7-xmpl-c3a03a31ed15" ] }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "responsePayload": { "errorMessage": "RequestId: e4b46cbf-b738-xmpl-8880-a18cdf61200e Process exited before completing request" } }

Der Aufrufdatensatz enthält Details zum Ereignis, zur Antwort und zu dem Grund, warum der Datensatz gesendet wurde.

Zurückverfolgen von Anforderungen zu Zielen

Sie können AWS X-Ray damit eine verbundene Ansicht jeder Anfrage anzeigen, während sie sich in der Warteschlange befindet, von einer Lambda-Ereignisfunktion verarbeitet und an den Zieldienst übergeben wird. Wenn Sie die X-Ray Ablaufverfolgung für eine Funktion oder einen Dienst aktivieren, der eine Funktion aufruft, fügt Lambda der Anfrage einen X-Ray Header hinzu und übergibt den Header an den Zieldienst. Traces von Upstream-Diensten werden automatisch mit Traces von Downstream-Lambda-Ereignisfunktionen und Zieldiensten verknüpft, wodurch eine umfassende Ansicht der gesamten Anwendung entsteht. Weitere Informationen zum Tracing finden Sie unter Visualisieren Sie Aufrufe von Lambda-Ereignisfunktionen mit AWS X-Ray.

Hinzufügen einer Warteschlange für unzustellbare Nachrichten

Als Alternative zu einem Ziel für den Fall eines Fehlers können Sie Ihre Event-Funktion mit einer Warteschlange für unveröffentlichte Nachrichten konfigurieren, um verworfene Ereignisse für die weitere Verarbeitung zu speichern. Eine Warteschlange für unzustellbare Nachrichten fungiert genauso wie ein Ziel bei Ausfall, da sie verwendet wird, wenn alle Verarbeitungsversuche eines Ereignisses fehlschlagen oder ein Ereignis abläuft, ohne verarbeitet zu werden. Sie können jedoch nur auf Funktionsebene eine Warteschlange für unzustellbare Nachrichten hinzufügen oder entfernen. Versionen von Event-Funktionen verwenden dieselben Einstellungen für Warteschlangen mit unveröffentlichten Nachrichten ($LATEST). On-failure Ziele unterstützen auch zusätzliche Ziele und enthalten Details zur Antwort der Funktion im Aufrufdatensatz.

Um Ereignisse in einer Warteschlange mit toten Buchstaben erneut zu verarbeiten, können Sie sie als Ereignisquelle für Ihre Lambda-Ereignisfunktion festlegen. Alternativ können Sie die Ereignisse manuell abrufen.

Sie können eine Amazon-SQS-Standardwarteschlange oder ein Amazon-SNS-Standardthema für Ihre Warteschlange für unzustellbare Nachrichten auswählen. FIFO-Warteschlangen und Amazon-SNS-FIFO-Themen werden nicht unterstützt.

  • Amazon-SQS-Warteschlange – Eine Warteschlange nimmt fehlgeschlagene Ereignisse auf, bis sie abgerufen werden. Wählen Sie eine Amazon SQS SQS-Standardwarteschlange, wenn Sie erwarten, dass eine einzelne Entität, z. B. eine Lambda-Ereignisfunktion oder ein CloudWatch Alarm, das fehlgeschlagene Ereignis verarbeitet. Weitere Informationen finden Sie unter Verwenden von Lambda mit Amazon SQS.

  • Amazon-SNS-Thema – Ein Thema leitet fehlgeschlagene Ereignisse an eine oder mehrere Ziele. Wählen Sie ein Amazon-SNS-Standardthema aus, wenn Sie erwarten, dass mehrere Entitäten auf ein fehlgeschlagenes Ereignis reagieren. Sie können beispielsweise ein Thema so konfigurieren, dass Ereignisse an eine E-Mail-Adresse, eine Lambda-Ereignisfunktion oder and/or einen HTTP-Endpunkt gesendet werden. Weitere Informationen finden Sie unter Aufrufen von Lambda-Ereignisfunktionen mit Amazon SNS SNS-Benachrichtigungen.

Um Ereignisse an eine Warteschlange oder ein Thema zu senden, benötigt Ihre Event-Funktion zusätzliche Berechtigungen. Fügen Sie eine Richtlinie mit den erforderlichen Berechtigungen zur Ausführungsrolle Ihrer Funktion hinzu. Wenn die Zielwarteschlange oder das Zielthema mit einem vom Kunden verwalteten AWS KMS Schlüssel verschlüsselt ist, stellen Sie sicher, dass sowohl die Ausführungsrolle Ihrer Funktion als auch die ressourcenbasierte Richtlinie des Schlüssels die entsprechenden Berechtigungen enthalten.

Nachdem Sie das Ziel erstellt und die Ausführungsrolle Ihrer Event-Funktion aktualisiert haben, fügen Sie Ihrer Funktion die Warteschlange mit unerlaubten Briefen hinzu. Sie können mehrere Funktionen zum Senden von Ereignissen an dasselbe Ziel konfigurieren.

Console
  1. Öffnen Sie die Seite Event Functions der Lambda-Konsole.

  2. Wählen Sie eine Event-Funktion aus.

  3. Wählen Sie „Konfiguration“ und dann „Asynchroner Aufruf“ aus.

  4. Wählen Sie unter Asynchronous invocation (Asynchroner Aufruf) die Option Edit (Bearbeiten).

  5. Stellen Sie den Dead-letter Warteschlangenservice auf Amazon SQS oder Amazon SNS ein.

  6. Wählen Sie die Ziel-Warteschlange oder das Ziel-Thema aus.

  7. Wählen Sie Speichern.

AWS CLI

Verwenden Sie den Befehl update-function-configuration, um eine Warteschlange mit unerlaubten AWS CLI Briefen zu konfigurieren.

aws lambda update-function-configuration \ --function-name my-function \ --dead-letter-config TargetArn=arn:aws:sns:us-east-1:123456789012:my-topic

Lambda sendet das Ereignis mit zusätzlichen Informationen in den Attributen an die Warteschlange für unzustellbare Nachrichten. Sie können anhand dieser Informationen den von der Funktion zurückgegebenen Fehler erkennen oder das Ereignis mit Protokollen oder einer AWS X-Ray -Ablaufverfolgung korrelieren.

Dead-letter Nachrichtenattribute in die Warteschlange
  • RequestID (Zeichenfolge) – Die ID der Aufrufanforderung. Anforderungs-IDs erscheinen in Funktionsprotokollen. Sie können das X-Ray SDK auch verwenden, um die Anforderungs-ID für ein Attribut im Trace aufzuzeichnen. Sie können dann anhand der Anforderungs-ID in der X-Ray Konsole nach Traces suchen.

  • ErrorCode(Nummer) — Der HTTP-Statuscode.

  • ErrorMessage(String) — Die ersten 1 KB der Fehlermeldung.

Wenn Lambda keine Nachricht an die Warteschlange für unzustellbare Briefe senden kann, löscht es das Ereignis und gibt die Metrik aus. DeadLetterErrors Dies kann bei mangelnden Berechtigungen passieren oder wenn die Gesamtgröße der Nachricht den Grenzwert der Zielwarteschlange oder des Ziel-Themas überschreitet. Nehmen wir zum Beispiel an, dass eine Amazon-SNS-Benachrichtigung mit einem Text von fast 1 MB eine Funktion auslöst, die zu einem Fehler führt. In diesem Fall können die Ereignisdaten, die Amazon SNS hinzufügt, in Kombination mit den Attributen, die Lambda hinzufügt, dazu führen, dass die Nachricht die maximale Größe überschreitet, die in der Warteschlange für unzustellbare Nachrichten zulässig ist.

Wenn Sie Amazon SQS als Ereignisquelle verwenden, konfigurieren Sie eine Warteschlange für unzustellbare Briefe in der Amazon SQS SQS-Warteschlange selbst und nicht in der Lambda Event Function. Weitere Informationen finden Sie unter Verwenden von Lambda mit Amazon SQS.