Verwenden der Ereignisfilterung mit einer SQS Amazon-Ereignisquelle - 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.

Verwenden der Ereignisfilterung mit einer SQS Amazon-Ereignisquelle

Sie können die Ereignisfilterung verwenden, um zu steuern, welche Datensätze aus einem Stream oder einer Warteschlange Lambda an Ihre Funktion sendet. Allgemeine Informationen zur Funktionsweise der Ereignisfilterung finden Sie unterSteuern Sie, welche Ereignisse Lambda an Ihre Funktion sendet.

Dieser Abschnitt konzentriert sich auf die Ereignisfilterung für MSK Amazon-Ereignisquellen.

Grundlagen der SQS Amazon-Ereignisfilterung

Angenommen, Ihre SQS Amazon-Warteschlange enthält Nachrichten im folgenden JSON Format.

{ "RecordNumber": 1234, "TimeStamp": "yyyy-mm-ddThh:mm:ss", "RequestCode": "AAAA" }

Ein Beispieldatensatz für diese Warteschlange würde wie folgt aussehen.

{ "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\n "RecordNumber": 1234,\n "TimeStamp": "yyyy-mm-ddThh:mm:ss",\n "RequestCode": "AAAA"\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue", "awsRegion": "us-west-2" }

Um nach dem Inhalt Ihrer SQS Amazon-Nachrichten zu filtern, verwenden Sie den body Schlüssel im SQS Amazon-Nachrichtendatensatz. Angenommen, Sie möchten nur die Datensätze verarbeiten, bei denen RequestCode in Ihrer SQS Amazon-Nachricht „“ stehtBBBB. Das FilterCriteria-Objekt würde wie folgt aussehen.

{ "Filters": [ { "Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }" } ] }

Der besseren Übersichtlichkeit halber ist der Wert des Filters im Pattern Klartext dargestelltJSON.

{ "body": { "RequestCode": [ "BBBB" ] } }

Sie können Ihren Filter über die Konsole AWS CLI oder eine AWS SAM Vorlage hinzufügen.

Console

Um diesen Filter mithilfe der Konsole hinzuzufügen, folgen Sie den Anweisungen unter Anhängen von Filterkriterien an eine Ereignisquellenzuordnung (Konsole) und geben Sie die folgende Zeichenfolge für die Filterkriterien ein.

{ "body" : { "RequestCode" : [ "BBBB" ] } }
AWS CLI

Führen Sie den folgenden Befehl aus, um mithilfe von AWS Command Line Interface (AWS CLI) eine neue Ereignisquellenzuordnung mit diesen Filterkriterien zu erstellen.

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'

Führen Sie den folgenden Befehl aus, um diese Filterkriterien zu einer vorhandenen Zuordnung von Ereignisquellen hinzuzufügen.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'
AWS SAM

Um diesen Filter mithilfe hinzuzufügen AWS SAM, fügen Sie der YAML Vorlage für Ihre Ereignisquelle den folgenden Ausschnitt hinzu.

FilterCriteria: Filters: - Pattern: '{ "body" : { "RequestCode" : [ "BBBB" ] } }'

Angenommen, Sie möchten, dass Ihre Funktion nur die Datensätze verarbeitet, bei denen RecordNumber größer als 9999 ist. Das FilterCriteria-Objekt würde wie folgt aussehen.

{ "Filters": [ { "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }" } ] }

Der besseren Übersichtlichkeit halber ist der Wert des Filters im Klartext Pattern dargestellt. JSON

{ "body": { "RecordNumber": [ { "numeric": [ ">", 9999 ] } ] } }

Sie können Ihren Filter über die Konsole AWS CLI oder eine AWS SAM Vorlage hinzufügen.

Console

Um diesen Filter mithilfe der Konsole hinzuzufügen, folgen Sie den Anweisungen unter Anhängen von Filterkriterien an eine Ereignisquellenzuordnung (Konsole) und geben Sie die folgende Zeichenfolge für die Filterkriterien ein.

{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }
AWS CLI

Führen Sie den folgenden Befehl aus, um mithilfe von AWS Command Line Interface (AWS CLI) eine neue Ereignisquellenzuordnung mit diesen Filterkriterien zu erstellen.

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'

Führen Sie den folgenden Befehl aus, um diese Filterkriterien zu einer vorhandenen Zuordnung von Ereignisquellen hinzuzufügen.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'
AWS SAM

Um diesen Filter mithilfe hinzuzufügen AWS SAM, fügen Sie der YAML Vorlage für Ihre Ereignisquelle den folgenden Ausschnitt hinzu.

FilterCriteria: Filters: - Pattern: '{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }'

Für Amazon SQS kann der Nachrichtentext eine beliebige Zeichenfolge sein. Dies kann jedoch problematisch sein, wenn Sie FilterCriteria erwartenbody, dass es sich um ein gültiges JSON Format handelt. Das umgekehrte Szenario ist ebenfalls der Fall: Wenn der Hauptteil der eingehenden Nachricht zwar JSON formatiert ist, Ihre Filterkriterien jedoch eine einfache Zeichenfolge erwarten, kann dies body zu unbeabsichtigtem Verhalten führen.

Um dieses Problem zu vermeiden, stellen Sie sicher, dass das Körperformat in Ihren FilterCriteria mit dem erwarteten Format von body in den Nachrichten übereinstimmt, die Sie von Ihrer Warteschlange erhalten. Bevor Sie Ihre Nachrichten filtern, wertet Lambda automatisch das Format des Körpers der eingehenden Nachricht und Ihres Filtermusters für body aus. Wenn es keine Übereinstimmung gibt, verwirft Lambda die Nachricht. In der folgenden Tabelle ist diese Auswertung zusammengefasst:

body-Format der eingehenden Nachricht body-Format des Filtermusters Resultierende Aktion

Einfache Zeichenfolge

Einfache Zeichenfolge

Lambda filtert basierend auf Ihren Filterkriterien.

Einfache Zeichenfolge

Kein Filtermuster für Dateneigenschaften

Lambda filtert (nur für die anderen Metadateneigenschaften) basierend auf Ihren Filterkriterien.

Einfache Zeichenfolge

Gültig JSON

Lambda verwirft die Nachricht.

Gültig JSON

Einfache Zeichenfolge

Lambda verwirft die Nachricht.

Gültig JSON

Kein Filtermuster für Dateneigenschaften

Lambda filtert (nur für die anderen Metadateneigenschaften) basierend auf Ihren Filterkriterien.

Gültig JSON

Gültig JSON

Lambda filtert basierend auf Ihren Filterkriterien.