Inhaltsfilterung in EventBridge Amazon-Ereignismustern - 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.

Inhaltsfilterung in EventBridge Amazon-Ereignismustern

Amazon EventBridge unterstützt die deklarative Inhaltsfilterung mithilfe von Ereignismustern. Bei der Inhaltsfilterung können Sie komplexe Ereignismuster schreiben, die nur unter sehr spezifischen Bedingungen Ereignissen entsprechen. Sie können beispielsweise ein Ereignismuster erstellen, das einem Ereignis entspricht, wenn:

  • Ein Feld des Ereignisses innerhalb eines bestimmten numerischen Bereichs liegt

  • Das Ereignis von einer bestimmten IP-Adresse stammt

  • Ein bestimmtes Feld im Ereignis-JSON nicht vorhanden ist

Wichtig

In ist es möglich EventBridge, Regeln zu erstellen, die zu higher-than-expected Gebühren und Drosselungen führen können. Sie können beispielsweise versehentlich eine Regel erstellen, die zu einer Endlosschleife führt, bei der eine Regel rekursiv ohne Ende ausgelöst wird. Angenommen, Sie haben eine Regel erstellt, um zu erkennen, dass sich ACLs in einem Amazon-S3-Bucket geändert haben, und Software auszulösen, um sie in den gewünschten Status zu ändern. Ist die Regel nicht sorgfältig geschrieben, löst die anschließende Änderung der ACLs die Regel erneut aus, wodurch eine Endlosschleife entsteht.

Anleitungen zum Schreiben präziser Regeln und Ereignismuster zur Minimierung solcher unerwarteter Ergebnisse finden Sie unter Bewährte Methoden bei der Definition von Amazon-EventBridge-Regeln und Bewährte Methoden bei der Definition von EventBridge Amazon-Eventmustern.

Ü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äfixabgleich 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, abgleichen, indem Sie ihn equals-ignore-case in Verbindung mit verwenden prefix.

Das folgende Ereignismuster würde beispielsweise auf jedes Ereignis zutreffen, bei dem das service Feld mit der Zeichenfolge begannEventB, aber auch EVENTB auf jede andere Groß-/Kleinschreibung dieser Zeichen. eventb

{ "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" } ] }

Suffixabgleich ohne Berücksichtigung der Groß- und Kleinschreibung

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

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

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

„Alles außer“-Abgleich

Alles außer der Übereinstimmung entspricht allem, was nicht 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 ] } ] } }

Alles andere als übereinstimmend, wobei die Groß- und Kleinschreibung ignoriert wird

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 nicht die Zeichenfolge „initializing“, „INITIALIZING“, „Initializing“ oder eine andere Groß- und Kleinschreibung dieser Zeichen enthalten.

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

Sie können es auch equals-ignore-case in Verbindung mit verwendenanything-but, um einen Vergleich mit einer Werteliste vorzunehmen:

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

Alles andere als übereinstimmende Präfixe

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

Das folgende Ereignismuster zeigt alles andere als eine Übereinstimmung, die mit jedem Ereignis übereinstimmt, für das das Präfix nicht "init" im Feld steht. "state"

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

Das folgende Ereignismuster zeigt, dass alles andere als eine Übereinstimmung mit einer Liste von Präfixwerten verwendet wird. Dieses Ereignismuster entspricht jedem Ereignis, das weder das Präfix noch das Feld "init" enthält. "stop" "state"

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

Alles andere als übereinstimmende Suffixe

Sie können es suffix in Verbindung mit verwendenanything-but, um Zeichenkettenwerte abzugleichen, die nicht mit dem angegebenen Wert enden. Dazu gehören Einzelwerte 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, dass alles andere als eine Übereinstimmung 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"] } } ] } }

Alles andere als ein Abgleich mithilfe von Platzhaltern

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

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

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

Das folgende Ereignismuster zeigt alles andere als übereinstimmende Werte mit einer Liste von Werten, einschließlich Platzhaltern. Dieses Ereignismuster entspricht allen Werten für das FileName Feld, die weder oder enthalten. /lib/ /bin/

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

Weitere Informationen finden Sie unter Abgleich mithilfe von Platzhaltern.

Numerischer Abgleich

Der numerische Abgleich funktioniert mit Werten, bei denen es sich um JSON-Zahlen handelt. Sie ist beschränkt auf Werte von -5.0e9 bis einschließlich +5.0e9, auf 15 Stellen genau oder sechs Stellen rechts vom Dezimalzeichen.

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 } } }

E quals-ignore-case entspricht

Der quals-ignore-caseE-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, ein 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 Abgleichsregeln 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-Abgleich

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.