Filterung von Ereignissen in Amazon EventBridge Pipes - Amazon EventBridge

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.

Filterung von Ereignissen in Amazon EventBridge Pipes

Mit EventBridge Pipes können Sie die Ereignisse einer bestimmten Quelle filtern und nur eine Teilmenge davon verarbeiten. Diese Filterung funktioniert genauso wie die Filterung auf einer EventBridge Eventbus- oder Lambda-Ereignisquellenzuordnung, indem sie Ereignismuster verwendet. Weitere Informationen zu Ereignismustern finden Sie unter EventBridge Amazon-Event-Muster erstellen.

Ein Filterkriterienobjekt FilterCriteria ist eine Struktur, die aus einer Liste von Filtern (Filters) besteht. Jeder Filter ist eine Struktur, die ein Filtermuster definiert (Pattern). Ein Pattern ist eine Zeichenfolgendarstellung einer JSON-Filterregel. Ein FilterCriteria-Objekt sieht z. B. folgendermaßen aus:

{ "Filters": [ {"Pattern": "{ \"Metadata1\": [ pattern1 ], \"data\": { \"Data1\": [ pattern2 ] }}" } ] }

Zur Verdeutlichung sehen Sie hier den Wert des Filter-Pattern in reinem JSON:

{ "Metadata1": [ pattern1 ], "data": {"Data1": [ pattern2 ]} }

Amazon Kinesis, Amazon MQ, Amazon MSK und der selbstverwaltete Apache Kafka wenden die Base64-Kodierung auf die Nutzlast an, nicht jedoch auf die Metadatenfelder. Nehmen wir zum Beispiel an, Ihr Kinesis-Stream enthält ein Ereignis wie dieses:

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": {"City": "Seattle", "State": "WA", "Temperature": "46", "Month": "December" }, "approximateArrivalTimestamp": 1545084650.987 }

Wenn das Ereignis durch Ihre Pipe fließt, sieht es wie folgt aus, wobei das data-Feld base64-kodiert ist:

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "approximateArrivalTimestamp": 1545084650.987, "eventSource": "aws:kinesis", "eventVersion": "1.0", "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", "eventName": "aws:kinesis:record", "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", "awsRegion": "us-east-2", "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" }

Wenn Sie Ereignisfilter erstellen, können EventBridge Pipes auf Ereignisinhalte zugreifen. Dieser Inhalt ist entweder JSON-maskiert, wie das Amazon-SQS-Feld body, oder base64-kodiert, wie das Kinesis-Feld data. Wenn es sich bei Ihren Daten um gültiges JSON handelt, können Ihre Eingabevorlagen oder JSON-Pfade für Zielparameter direkt auf den Inhalt verweisen, da EventBridge Pipes ihn automatisch dekodiert. Wenn es sich bei einer Kinesis-Ereignisquelle beispielsweise um ein gültiges JSON handelt, können Sie mithilfe von <$.data.someKey> auf eine Variable verweisen.

In Fortsetzung unseres Beispiels würden Sie den folgenden Filter verwenden, um nach den nicht kodierten partitionKey Metadaten außerhalb des data Objekts und der base64-codierten City Eigenschaft innerhalb des data Objekts zu filtern:

{ "partitionKey": [ "1" ], "data": { "City": [ "Seattle" ] } }

Bei der Erstellung von Ereignismustern können Sie nach den von der Quell-API gesendeten Feldern filtern und nicht nach Feldern, die durch die Abfrageoperation hinzugefügt wurden. Die folgenden Felder können nicht in Ereignismustern verwendet werden:

  • awsRegion

  • eventSource

  • eventSourceARN

  • eventVersion

  • eventID

  • eventName

  • invokeIdentityArn

  • eventSourceKey

In den folgenden Abschnitten wird das Filterverhalten für jeden unterstützten Ereignisquellentyp erklärt.

Amazon SQS SQS-Nachrichten filtern

Wenn eine Amazon SQS SQS-Nachricht Ihre Filterkriterien nicht erfüllt, EventBridge wird die Nachricht automatisch aus der Warteschlange entfernt. Sie müssen diese Nachrichten in Amazon SQS nicht manuell löschen. Es ist unwahrscheinlich, dass das Verbinden mehrerer Pipes mit einer SQS-Warteschlange sinnvoll ist. Die Pipes würden um Nachrichten konkurrieren, die gelöscht werden, wenn keine Übereinstimmung gefunden wird.

Ein Amazon SQS SQS-Nachrichtentext kann eine beliebige Zeichenfolge enthalten, nicht nur JSON. EventBridge Pipes erwartet, dass Ihr FilterCriteria Format dem Format der eingehenden Nachrichten entspricht, entweder gültiges JSON oder eine einfache Zeichenfolge. Wenn es eine Nichtübereinstimmung gibt, löscht EventBridge Pipes die Nachricht. Wenn Sie FilterCriteria nicht einschließenbody, also nur nach Metadaten filtern, überspringt EventBridge Pipes diese Prüfung. Die folgende Tabelle fasst die Bewertung zusammen:

-Format des Filtermusters Eingehendes Format Ergebnis

Einfache Zeichenfolge

Einfache Zeichenfolge

EventBridge filtert basierend auf Ihren Filterkriterien.

Einfache Zeichenfolge

Gültiges JSON

EventBridge löscht die Nachricht.

Gültiges JSON

Einfache Zeichenfolge

EventBridge löscht die Nachricht.

Gültiges JSON

Gültiges JSON

EventBridge filtert auf der Grundlage Ihrer Filterkriterien.

Kein Filtermuster für body

Einfache Zeichenfolge

EventBridge Filter, die auf Ihren Filterkriterien basieren.

Kein Filtermuster für body

Gültiges JSON

EventBridge Filter, die auf Ihren Filterkriterien basieren.

Kinesis- und DynamoDB-Nachrichten filtern

Nachdem Ihre Filterkriterien einen Kinesis- oder DynamoDB-Datensatz verarbeitet haben, geht der Streams-Iterator über diesen Datensatz hinaus. Wenn der Datensatz Ihre Filterkriterien nicht erfüllt, müssen Sie den Datensatz nicht manuell aus Ihrer Ereignisquelle löschen. Nach Ablauf der Aufbewahrungsfrist löschen Kinesis und DynamoDB diese alten Datensätze automatisch. Wenn Sie möchten, dass Datensätze früher gelöscht werden, lesen Sie Ändern des Zeitraums der Datenaufbewahrung.

Um Ereignisse aus Stream-Ereignisquellen ordnungsgemäß zu filtern, müssen sowohl das Datenfeld als auch Ihre Filterkriterien für das Datenfeld ein gültiges JSON-Format haben. (Bei Kinesis ist das Datenfeld data. Bei DynamoDB ist das Datenfeld dynamodb.) Wenn eines der Felder kein gültiges JSON-Format hat, wird die EventBridge Nachricht gelöscht oder eine Ausnahme ausgelöst. In der folgenden Tabelle ist das Verhalten zusammengefasst:

-Format des Filtermusters Eingehendes Format Ergebnis

Gültiges JSON

Gültiges JSON

EventBridge filtert basierend auf Ihren Filterkriterien.

Gültiges JSON

Kein JSON

EventBridge löscht die Nachricht.

Kein Filtermuster für data (Kinesis) oder dynamodb (DynamoDB)

Gültiges JSON

EventBridge Filter, die auf Ihren Filterkriterien basieren.

Kein Filtermuster für data (Kinesis) oder dynamodb (DynamoDB)

Kein JSON

EventBridge Filter, die auf Ihren Filterkriterien basieren.

Kein JSON

Beliebig

EventBridge löst bei der Erstellung oder Aktualisierung der Pipe eine Ausnahme aus. Das Filtermuster muss ein gültiges JSON-Format haben.

Filtern von Amazon Managed Streaming for Apache Kafka-, selbstverwalteten Apache Kafka- und Amazon MQ MQ-Nachrichten

Anmerkung

Nachdem Sie Filterkriterien an eine Pipe mit einer Apache-Kafka- oder Amazon-MQ-Ereignisquelle angehängt haben, kann es bis zu 15 Minuten dauern, bis die Filterregeln auf Ereignisse angewendet werden.

Für Amazon-MQ-Quellen lautet das Nachrichtenfeld data. Für Apache-Kafka-Quellen (Amazon MSK und selbstverwaltetes Apache Kafka) gibt es zwei Nachrichtenfelder: key und value.

EventBridge löscht Nachrichten, die nicht allen im Filter enthaltenen Feldern entsprechen. Bei Apache Kafka werden nach dem erfolgreichen EventBridge Aufruf des Ziels Offsets für übereinstimmende und nicht übereinstimmende Nachrichten festgeschrieben. EventBridge Bestätigt für Amazon MQ übereinstimmende Nachrichten nach erfolgreichem Aufruf der Funktion und bestätigt nicht zugeordnete Nachrichten, wenn sie gefiltert werden.

Apache-Kafka- und Amazon-MQ-Nachrichten müssen UTF-8-kodierte Zeichenfolgen sein (entweder einfache Zeichenfolgen oder im JSON-Format). Das liegt daran, dass Apache Kafka- und Amazon MQ-Byte-Arrays vor der Anwendung von Filterkriterien in UTF-8 EventBridge dekodiert werden. Wenn Ihre Nachrichten eine andere Kodierung verwenden, z. B. UTF-16 oder ASCII, oder wenn das Nachrichtenformat nicht dem Format entspricht, verarbeitet es nur Metadatenfilter. FilterCriteria EventBridge In der folgenden Tabelle ist das Verhalten zusammengefasst:

-Format des Filtermusters Eingehendes Format Ergebnis

Einfache Zeichenfolge

Einfache Zeichenfolge

EventBridge filtert basierend auf Ihren Filterkriterien.

Einfache Zeichenfolge

Gültiges JSON

EventBridge filtert nur nach Metadaten und ignoriert die value Felder data Feld (Amazon MQ) oder key und (Apache Kafka)

Gültiges JSON

Einfache Zeichenfolge

EventBridge filtert nur nach Metadaten und ignoriert die value Felder data Feld (Amazon MQ) oder key und (Apache Kafka)

Gültiges JSON

Gültiges JSON

EventBridge filtert basierend auf Ihren Filterkriterien.

Kein Filtermuster für data (Amazon MQ) oder key und value (Apache Kafka)

Einfache Zeichenfolge

EventBridge filtert nur nach Metadaten und ignoriert die value Felder data Feld (Amazon MQ) oder key und (Apache Kafka)

Kein Filtermuster für data (Amazon MQ) oder key und value (Apache Kafka)

Gültiges JSON

EventBridge filtert nur nach Metadaten und ignoriert die value Felder data Feld (Amazon MQ) oder key und (Apache Kafka)

Beliebig

Nicht UTF-kodierte Zeichenfolge

EventBridge filtert nur nach Metadaten und ignoriert die value Felder data Feld (Amazon MQ) oder key und (Apache Kafka)

Unterschiede zwischen Lambda ESM und Pipes EventBridge

Beim Filtern von Ereignissen funktionieren Lambda ESM und EventBridge Pipes im Allgemeinen auf die gleiche Weise. Der Hauptunterschied besteht darin, dass das eventSourceKey-Feld in ESM-Nutzlasten nicht vorhanden ist.

Verwendung von Vergleichsoperatoren in Pipefiltern

Mit Vergleichsoperatoren können Sie Ereignismuster erstellen, die mit Feldwerten in Ereignissen übereinstimmen.

Eine vollständige Liste der Vergleichsoperatoren, die für die Verwendung in Rohrfiltern unterstützt werden, finden Sie unterVergleichsoperatoren.