View a markdown version of this page

Vergleichsoperatoren zur Verwendung in Ereignismustern in Amazon EventBridge - 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.

Vergleichsoperatoren zur Verwendung in Ereignismustern in Amazon EventBridge

Im Folgenden finden Sie eine Zusammenfassung aller Vergleichsoperatoren, die unter verfügbar sind. EventBridge

Vergleichsoperatoren funktionieren nur in Blattknoten, mit Ausnahme von $or und anything-but.

Vergleich Beispiel Regelsyntax Unterstützung für Event-Bus Rohrhalterung

Bedingung 2

Location is "New York" and Day is "Monday"

"Location": [ "New York" ], "Day": ["Monday"]

Ja

Ja

Anything-but State ist ein beliebiger Wert außer „initialisieren“.

"state": [ { "anything-but": "initializing" } ]

Ja

Ja

Anything-but (beginnt mit)

Die Region befindet sich nicht in den USA.

"Region": [ { "anything-but": {"prefix": "us-" } } ]

Ja

Nein

Anything-but (endet mit)

FileName endet nicht mit einer PNG-Erweiterung.

"FileName": [ { "anything-but": { "suffix": ".png" } } ]

Ja

Nein

Anything-but (Groß- und Kleinschreibung ignorieren)

State ist ein beliebiger Wert außer „initializing“ oder einer anderen Groß- und Kleinschreibung, wie z. B. „INITIALIZING“.

"state": : [{ "anything-but": { "equals-ignore-case": "initializing" }}]}

Ja

Nein

Anything-but mit einem Platzhalter

FileName ist kein Dateipfad, der Folgendes beinhaltet/lib/.

"FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}]

Ja

Nein

Beginnt mit

Die Region befindet sich in den USA.

"Region": [ {"prefix": "us-" } ]

Ja

Ja

Beginnt mit (Groß- und Kleinschreibung ignorieren)

Der Dienstname beginnt mit den Buchstaben „eventb“, unabhängig von der Groß- und Kleinschreibung.

{"service" : [{ "prefix": { "equals-ignore-case": "eventb" }}]}

Ja

Ja

Leer

LastName ist leer.

"LastName": [""]

Ja

Ja

Gleich

Name is "Alice"

"Name": [ "Alice" ]

Ja

Ja

Gleich (Groß-/Kleinschreibung ignorieren)

Name is "Alice"

"Name": [ { "equals-ignore-case": "alice" } ]

Ja

Ja

Endet mit

FileName endet mit einer PNG-Erweiterung

"FileName": [ { "suffix": ".png" } ]

Ja

Ja

Endet mit (Groß- und Kleinschreibung ignorieren)

Der Dienstname endet mit den Buchstaben „tbridge“ oder einer anderen Groß- und Kleinschreibung, z. B. „TBRIDGE“.

{"service" : [{ "suffix": { "equals-ignore-case": "tBridge" }}]}

Ja

Ja

Vorhanden

ProductName existiert

"ProductName": [ { "exists": true } ]

Ja

Ja

Nicht vorhanden

ProductName existiert nicht

"ProductName": [ { "exists": false } ]

Ja

Ja

Nicht

Weather is anything but "Raining"

"Weather": [ { "anything-but": [ "Raining" ] } ]

Ja

Ja

Null

UserID is null

"UserID": [ null ]

Ja

Ja

Numerisch (ist gleich)

Price is 100

"Price": [ { "numeric": [ "=", 100 ] } ]

Ja

Ja

Numerisch (Bereich)

Price is more than 10, and less than or equal to 20

"Price": [ { "numeric": [ ">", 10, "<=", 20 ] } ]

Ja

Ja

Oder

PaymentType ist „Kredit“ oder „Lastschrift“

"PaymentType": [ "Credit", "Debit"]

Ja

Ja

Oder (mehrere Felder)

Location is "New York", or Day is "Monday".

"$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ]

Ja

Ja

Platzhalter

Jede Datei mit der Erweiterung .png, die sich im Ordner „dir“ befindet

"FileName": [ { "wildcard": "dir/*.png" } ]

Ja

Nein

Übereinstimmung mit einem Präfix

Sie können ein Ereignis abhängig vom Präfix eines Werts in der Ereignisquelle abgleichen. Sie können den Präfix-Abgleich für Zeichenfolgenwerte verwenden.

Beispielsweise würde das folgende Ereignismuster mit jedem Ereignis übereinstimmen, bei dem das Feld "time" mit "2017-10-02" wie "time": "2017-10-02T18:43:48Z" beginnt.

{ "time": [ { "prefix": "2017-10-02" } ] }

Präfixvergleich ohne Berücksichtigung der Groß- und Kleinschreibung

Sie können einen Präfixwert auch unabhängig von der Groß- und Kleinschreibung der Zeichen, mit denen ein Wert beginnt, vergleichen. Verwenden Sie dazu equals-ignore-case in Verbindung mit prefix.

Das folgende Ereignismuster würde beispielsweise jedem Ereignis entsprechen, bei dem das service Feld mit der ZeichenfolgeEventB, aber auch EVENTBeventb, oder einer anderen Großschreibung dieser Zeichen beginnt.

{ "detail": {"service" : [{ "prefix": { "equals-ignore-case": "EventB" }}]} }

Suffix-Abgleich

Sie können ein Ereignis abhängig vom Suffix eines Werts in der Ereignisquelle abgleichen. Sie können den Suffix-Abgleich für Zeichenfolgenwerte verwenden.

Beispielsweise würde das folgende Ereignismuster mit jedem Ereignis übereinstimmen, bei dem das Feld "FileName" mit der Dateierweiterung .png endet.

{ "FileName": [ { "suffix": ".png" } ] }

Suffixübereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung

Sie können einen Suffixwert auch unabhängig von der Groß- und Kleinschreibung der Zeichen abgleichen, mit denen ein Wert endet. Verwenden Sie equals-ignore-case dazu in Verbindung mit suffix.

Das folgende Ereignismuster würde beispielsweise jedem Ereignis entsprechen, bei dem das FileName Feld mit der Zeichenfolge endet.png, aber auch .PNG einer anderen Großschreibung dieser Zeichen.

{ "detail": {"FileName" : [{ "suffix": { "equals-ignore-case": ".png" }}]} }

Anything-but übereinstimmend

Anything-butmatching entspricht allem außer dem, was in der Regel angegeben ist.

Sie können den „Alles andere als“-Abgleich mit Zeichenfolgen und numerischen Werten verwenden, einschließlich Listen, die nur Zeichenfolgen oder nur Zahlen enthalten.

Im Folgenden Ereignismuster ist ein „Alles andere als“-Abgleich mit Zeichenfolgen und Zahlen dargestellt.

{ "detail": { "state": [ { "anything-but": "initializing" } ] } } { "detail": { "x-limit": [ { "anything-but": 123 } ] } }

Im Folgenden Ereignismuster ist ein „Alles andere als“-Abgleich mit einer Liste von Zeichenfolgen dargestellt.

{ "detail": { "state": [ { "anything-but": [ "stopped", "overloaded" ] } ] } }

Im Folgenden Ereignismuster ist ein „Alles andere als“-Abgleich mit einer Liste von Zahlen dargestellt.

{ "detail": { "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }

Anything-but übereinstimmend, ohne Groß- und Kleinschreibung

Sie können es auch zusammen mit verwenden equals-ignore-caseanything-but, um Zeichenkettenwerte unabhängig von der Groß- und Kleinschreibung abzugleichen.

Das folgende Ereignismuster entspricht state Feldern, die die Zeichenfolge „initializing“, „INITIALIZING“, „Initializing“ oder eine andere Großschreibung dieser Zeichen nicht enthalten.

{ "detail": {"state" : [{ "anything-but": { "equals-ignore-case": "initializing" }}]} }

Sie können es auch zusammen mit verwenden equals-ignore-caseanything-but, um es mit einer Liste von Werten abzugleichen:

{ "detail": {"state" : [{ "anything-but": { "equals-ignore-case": ["initializing", "stopped"] }}]} }

Anything-but Abgleich bei Präfixen

Sie können es prefix in Verbindung mit verwendenanything-but, um Zeichenkettenwerte abzugleichen, die nicht mit dem angegebenen Wert beginnen. Dazu gehören einzelne Werte oder eine Liste von Werten.

Das folgende Ereignismuster zeigt alles andere als eine Übereinstimmung, das mit allen Ereignissen übereinstimmt, für die das Feld nicht das Präfix "init" enthält. "state"

{ "detail": { "state": [ { "anything-but": { "prefix": "init" } } ] } }

Das folgende Ereignismuster zeigt alles andere als eine Übereinstimmung, wenn es mit einer Liste von Präfixwerten verwendet wird. Dieses Ereignismuster entspricht allen Ereignissen, die weder das Präfix noch das "stop" Feld "init" enthalten. "state"

{ "detail": { "state" : [{ "anything-but": { "prefix": ["init", "stop"] } } ] } } }

Anything-but Übereinstimmung mit Suffixen

Sie können es suffix in Verbindung mit verwendenanything-but, um Zeichenkettenwerte abzugleichen, die nicht mit dem angegebenen Wert enden. Dazu gehören einzelne Werte oder eine Liste von Werten.

Das folgende Ereignismuster entspricht allen Werten für das FileName Feld, die nicht mit enden.txt.

{ "detail": { "FileName": [ { "anything-but": { "suffix": ".txt" } } ] } }

Das folgende Ereignismuster zeigt alles andere als eine Übereinstimmung, die mit einer Liste von Suffixwerten verwendet wird. Dieses Ereignismuster entspricht allen Werten für das FileName Feld, die nicht mit einem oder enden. .txt .rtf

{ "detail": { "FileName": [ { "anything-but": { "suffix": [".txt", ".rtf"] } } ] } }

Anything-but Abgleich mit Platzhaltern

Sie können das Platzhalterzeichen (*) in den von Ihnen angegebenen Werten für alles andere als einen Abgleich verwenden. Dazu gehören einzelne Werte oder eine Liste von Werten.

Das folgende Ereignismuster entspricht allen Werten für das FileName Feld, die keine Werte enthalten/lib/.

{ "detail": { "FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}] } }

Das folgende Ereignismuster zeigt alles andere als eine Übereinstimmung, die mit einer Liste von Werten einschließlich Platzhaltern verwendet wird. Dieses Ereignismuster entspricht allen Werten für das FileName Feld, die keines von oder enthalten. /lib/ /bin/

{ "detail": { "FilePath" : [{ "anything-but": { "wildcard": ["*/lib/*", "*/bin/*"] }}] } }

Weitere Informationen finden Sie unter Abgleich mithilfe von Platzhaltern.

Numerischer Abgleich

Beim numerischen Abgleich werden Werte als 64-Bit-Gleitkommazahlen mit doppelter Genauigkeit (IEEE 754 binary64) verglichen, wodurch die Zahl der Ganzzahlen, die exakt abgeglichen werden können, begrenzt wird. Ganzzahlen zwischen -9.007.1999.254.740.992 und 9.007.199.254.740.992 (-2 53 bis +2 53) werden exakt gefunden. Wenn ein Wert außerhalb dieses Bereichs liegt oder aus anderen Gründen nicht exakt als Double dargestellt werden kann, EventBridge lehnt die Regel bei der Erstellung ab, wenn der Wert in einem numerischen Vergleich verwendet wird, und ein Ereignis, das einen solchen Wert enthält, wird nicht als Zahl behandelt und passt nicht zu einem numerischen Vergleich.

Im Folgenden wird der numerische Abgleich für ein Ereignismuster gezeigt, das nur Ereignissen entspricht, die für alle Felder zutreffend sind.

{ "detail": { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } }

Abgleich von IP-Adressen

Sie können den Abgleich der IP-Adressen für IPv4- und IPv6-Adressen verwenden. Das folgende Ereignismuster zeigt den Abgleich der IP-Adressen, die mit 10.0.0 beginnen und mit einer Zahl zwischen 0 und 255 enden.

{ "detail": { "sourceIPAddress": [ { "cidr": "10.0.0.0/24" } ] } }

„Vorhanden“-Abgleich

Bei dem „Vorhanden“-Abgleich kommt es auf das Vorhandensein oder Fehlen eines Feldes in den JSON-Daten des Ereignisses an.

Der „Vorhanden“-Abgleich funktioniert nur auf Blattknoten. Auf Zwischenknoten funktioniert sie nicht.

Das folgende Ereignismuster entspricht jedem Ereignis, das über ein detail.state-Feld verfügt.

{ "detail": { "state": [ { "exists": true } ] } }

Das vorhergehende Ereignismuster stimmt mit dem folgenden Ereignis überein.

{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"], "detail": { "instance-id": "i-abcd1111", "state": "pending" } }

Das vorhergehende Ereignismuster stimmt NICHT mit dem folgenden Ereignis überein, da es kein detail.state-Feld hat.

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "c-count" : { "c1" : 100 } } }

Equals-ignore-case übereinstimmend

Equals-ignore-caseDer Abgleich funktioniert bei Zeichenkettenwerten unabhängig von der Groß- und Kleinschreibung.

Das folgende Ereignismuster entspricht jedem Ereignis, dessen detail-type-Feld der angegebenen Zeichenfolge entspricht, unabhängig von der Groß- und Kleinschreibung.

{ "detail-type": [ { "equals-ignore-case": "ec2 instance state-change notification" } ] }

Das vorhergehende Ereignismuster stimmt mit dem folgenden Ereignis überein.

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "c-count" : { "c1" : 100 } } }

Abgleich mithilfe von Platzhaltern

Sie können das Platzhalterzeichen (*) verwenden, um Zeichenfolgenwerte in Ereignismustern abzugleichen.

Anmerkung

Derzeit wird das Platzhalterzeichen nur in Event-Bus-Regeln unterstützt.

Überlegungen zur Verwendung von Platzhaltern in Ihren Ereignismustern:

  • Sie können eine beliebige Anzahl von Platzhalterzeichen in einem bestimmten Zeichenfolgenwert angeben. Aufeinanderfolgende Platzhalterzeichen werden jedoch nicht unterstützt.

  • EventBridge unterstützt die Verwendung des Backslash-Zeichens (\) zur Angabe der Literalzeichen * und\ in Platzhalterfiltern:

    • Die Zeichenfolge \* steht für das Literalzeichen *

    • Die Zeichenfolge \\ steht für das Literalzeichen \

    Die Verwendung des umgekehrten Schrägstrichs, um andere Zeichen durch ein Escape-Zeichen zu schützen, wird nicht unterstützt.

Platzhalter und Komplexität von Ereignismustern

Es gibt eine Grenze, wie komplex eine Regel sein kann, die Platzhalter verwendet. Wenn eine Regel zu komplex ist, wird InvalidEventPatternException beim Versuch, die Regel zu erstellen, eine EventBridge zurückgegeben. Wenn Ihre Regel einen solchen Fehler generiert, sollten Sie die folgenden Anleitungen verwenden, um die Komplexität des Ereignismusters zu reduzieren:

  • Reduzieren der Anzahl der verwendeten Platzhalterzeichen

    Verwenden Sie Platzhalterzeichen nur dann, wenn Sie tatsächlich einen Abgleich mit mehreren möglichen Werten durchführen müssen. Stellen Sie sich zum Beispiel das folgende Ereignismuster vor, bei dem Sie einen Abgleich mit Event Buses in derselben Region durchführen möchten:

    { "EventBusArn": [ { "wildcard": "*:*:*:*:*:event-bus/*" } ] }

    Im obigen Fall hängen viele Abschnitte des ARN direkt von der Region ab, in der sich Ihre Event Buses befinden. Wenn Sie also die Region us-east-1 verwenden, könnte das folgende Beispiel ein weniger komplexes Muster sein, das immer noch den gewünschten Werten entspricht:

    { "EventBusArn": [ { "wildcard": "arn:aws:events:us-east-1:*:event-bus/*" } ] }
  • Reduzieren sich wiederholender Zeichenfolgen, die nach einem Platzhalterzeichen vorkommen

    Wenn dieselbe Zeichenfolge nach der Verwendung eines Platzhalters mehrfach vorkommt, erhöht sich die Komplexität der Verarbeitung des Ereignismusters. Formulieren Sie Ihr Ereignismuster neu, um wiederholte Sequenzen zu minimieren. Betrachten Sie beispielsweise das folgende Beispiel, das mit der doc.txt-Dateinamendatei für jeden Benutzer übereinstimmt:

    { "FileName": [ { "wildcard": "/Users/*/dir/dir/dir/dir/dir/doc.txt" } ] }

    Wenn Sie wüssten, dass die Datei doc.txt nur im angegebenen Pfad vorkommt, könnten Sie die wiederholte Zeichenfolge auf diese Weise reduzieren:

    { "FileName": [ { "wildcard": "/Users/*/doc.txt" } ] }

Komplexes Beispiel mit mehrfachem Abgleich

Sie können mehrere Übereinstimmungskriterien zu einem komplexeren Ereignismuster kombinieren. Das folgende Ereignismuster kombiniert beispielsweise anything-but und numeric.

{ "time": [ { "prefix": "2017-10-02" } ], "detail": { "state": [ { "anything-but": "initializing" } ], "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }
Anmerkung

Wenn Sie beim Erstellen von Ereignismustern einen Schlüssel mehrfach angeben, wird die letzte Referenz zur Auswertung von Ereignissen verwendet. Zum Beispiel für das folgende Muster:

{ "detail": { "location": [ { "prefix": "us-" } ], "location": [ { "anything-but": "us-east" } ] } }

Wird bei der Auswertung des location nur { "anything-but": "us-east" } berücksichtigt

Komplexes Beispiel mit $or-Übereinstimmung

Sie können auch komplexe Ereignismuster erstellen, mit denen überprüft wird, ob beliebige Feldwerte in mehreren Feldern übereinstimmen. Verwenden Sie $or, um ein Ereignismuster zu erstellen, das überprüft, ob beliebige Werte für mehrere Felder übereinstimmen.

Beachten Sie, dass Sie andere Filtertypen, wie z. B. den numerischen Abgleich und Arrays, in den Musterabgleich für einzelne Felder in Ihrem $or-Konstrukt einbeziehen können.

Das folgende Ereignismuster stimmt überein, wenn eine der folgenden Bedingungen erfüllt ist:

  • Das Feld c-count ist größer als 0 oder kleiner als oder gleich 5.

  • Das Feld d-count ist kleiner als 10.

  • Das Feld x-limit entspricht 3.018e2.

{ "detail": { "$or": [ { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ] }, { "d-count": [ { "numeric": [ "<", 10 ] } ] }, { "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } ] } }
Anmerkung

APIs, die ein Ereignismuster akzeptieren (wie PutRule, CreateArchive, UpdateArchive und TestEventPattern) lösen eine InvalidEventPatternException aus, wenn die Verwendung von $or mehr als 1000 Regelkombinationen ergibt.

Wenn Sie die Anzahl der Regelkombinationen in einem Ereignismuster ermitteln möchten, multiplizieren Sie die Gesamtzahl der Argumente aus jedem $or-Array im Ereignismuster. Das obige Muster enthält beispielsweise ein einzelnes $or-Array mit drei Argumenten, sodass die Gesamtzahl der Regelkombinationen ebenfalls drei beträgt. Wenn Sie ein weiteres $or-Array mit zwei Argumenten hinzufügen würden, wäre die Gesamtzahl der Regelkombinationen dann sechs.