Grundlegendes zur Ereignisfilterung für Event Grid-Abonnements

Dieser Artikel beschreibt die verschiedenen Möglichkeiten, um zu filtern, welche Ereignisse an den Endpunkt gesendet werden. Beim Erstellen eines Ereignisabonnements haben Sie drei Optionen zum Filtern:

  • Ereignistypen
  • Betreff beginnt oder endet mit
  • Erweiterte Felder und Operatoren

Azure Resource Manager-Vorlage

Die in diesem Artikel gezeigten Beispiele sind JSON-Schnipsel zum Definieren von Filtern in ARM-Vorlagen (Azure Resource Manager). Ein Beispiel für eine vollständige ARM-Vorlage und für die Bereitstellung einer ARM-Vorlage finden Sie unter Schnellstart: Weiterleiten von Blobspeicherereignissen an Webendpunkt mithilfe einer ARM-Vorlage. Hier finden Sie einige weitere Abschnitte zum Abschnitt filter aus dem Beispiel im Schnellstart. Die ARM-Vorlage definiert die folgenden Ressourcen.

  • Azure-Speicherkonto
  • Systemthema für das Speicherkonto
  • Ereignisabonnement für das Systemthema. Der Unterabschnitt filter wird im Abschnitt „Ereignisabonnement“ angezeigt.

Im folgenden Beispiel filtert das Ereignisabonnement nach Microsoft.Storage.BlobCreated- und Microsoft.Storage.BlobDeleted-Ereignissen.

{
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-08-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    },
    {
      "type": "Microsoft.EventGrid/systemTopics",
      "apiVersion": "2021-12-01",
      "name": "[parameters('systemTopicName')]",
      "location": "[parameters('location')]",
      "properties": {
        "source": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
        "topicType": "Microsoft.Storage.StorageAccounts"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
      ]
    },
    {
      "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions",
      "apiVersion": "2021-12-01",
      "name": "[format('{0}/{1}', parameters('systemTopicName'), parameters('eventSubName'))]",
      "properties": {
        "destination": {
          "properties": {
            "endpointUrl": "[parameters('endpoint')]"
          },
          "endpointType": "WebHook"
        },
        "filter": {
          "includedEventTypes": [
            "Microsoft.Storage.BlobCreated",
            "Microsoft.Storage.BlobDeleted"
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.EventGrid/systemTopics', parameters('systemTopicName'))]"
      ]
    }
  ]
}

Ereignistypfilterung

Standardmäßig werden alle Ereignistypen für die Ereignisquelle an den Endpunkt gesendet. Sie können entscheiden, nur bestimmte Ereignistypen an Ihren Endpunkt zu senden. Beispielsweise können Sie sich bezüglich Aktualisierungen Ihrer Ressourcen benachrichtigen lassen, aber nicht zu anderen Vorgängen, wie z.B. das Löschen. Filtern Sie in diesem Fall nach dem Ereignistyp Microsoft.Resources.ResourceWriteSuccess. Geben Sie ein Array mit den Ereignistypen an oder geben Sie All an, um alle Ereignistypen für die Ereignisquelle zu erhalten.

Die JSON-Syntax für das Filtern nach Ereignistyp lautet:

"filter": {
  "includedEventTypes": [
    "Microsoft.Resources.ResourceWriteFailure",
    "Microsoft.Resources.ResourceWriteSuccess"
  ]
}

Betrefffilterung

Zum einfachen Filtern nach Betreff geben Sie einen Start- oder Endwert für den Betreff ein. Sie können beispielsweise angeben, dass der Betreff mit .txt endet, um nur Ereignisse im Zusammenhang mit dem Hochladen einer Textdatei in das Speicherkonto zu erhalten. Oder Sie können nach Betreffs filtern, die mit /blobServices/default/containers/testcontainer beginnen, um alle Ereignisse für diesen Container abzurufen, aber nicht für andere Container des Speicherkontos.

Erstellen Sie beim Veröffentlichen von Ereignissen für benutzerdefinierte Themen Betreffinformationen für Ihre Ereignisse, an denen Abonnenten einfach erkennen können, ob Interesse am Ereignis besteht. Abonnenten verwenden die Betreff-Eigenschaft zum Filtern und Weiterleiten von Ereignissen. Erwägen Sie, den Pfad zum Ereignisort hinzuzufügen, damit Abonnenten nach Segmenten dieses Pfads filtern können. Mit dem Pfad können Abonnenten Ereignisse speziell oder allgemein filtern. Wenn Sie einen Pfad mit drei Segmenten im Betreff angeben, z.B. /A/B/C, können Abonnenten nach dem ersten Segment /A filtern, um eine umfassendere Gruppe von Ereignissen angezeigt zu bekommen. Diese Abonnenten erhalten Ereignisse mit Betreffinformationen wie /A/B/C oder /A/D/E. Andere Abonnenten können nach /A/B filtern, um eine eingeschränktere Gruppe mit Ereignissen zu erhalten.

Beispiele (Blob Storage-Ereignisse)

Blob-Ereignisse können durch den Ereignistyp, den Containernamen oder den Namen des Objekts gefiltert werden, das erstellt bzw. gelöscht wurde.

Der Betreff von Blob Storage-Ereignissen verwendet das Format:

/blobServices/default/containers/<containername>/blobs/<blobname>

Zur Übereinstimmung mit allen Ereignissen für ein Speicherkonto können Sie den Betrefffilter leer lassen.

Verwenden Sie zur Übereinstimmung mit Ereignissen aus Blobs, die in einem Satz von Containern erstellt wurden und ein gemeinsames Präfix verwenden, einen subjectBeginsWith-Filter wie:

/blobServices/default/containers/containerprefix

Verwenden Sie zur Übereinstimmung mit Ereignissen aus Blobs, die in einem bestimmten Container erstellt wurden, einen subjectBeginsWith-Filter wie:

/blobServices/default/containers/containername/

Verwenden Sie zur Übereinstimmung mit Ereignissen aus Blobs, die in einem bestimmten Container erstellt wurden und ein gemeinsames Blobnamenspräfix verwenden, einen subjectBeginsWith-Filter wie:

/blobServices/default/containers/containername/blobs/blobprefix

Um Ereignisse aus Blobs abzugleichen, die in einem bestimmten Unterordner eines Containers erstellt werden, verwenden Sie einen subjectBeginsWith-Filter wie:

/blobServices/default/containers/{containername}/blobs/{subfolder}/

Verwenden Sie zur Übereinstimmung mit Ereignissen aus Blobs, die in einem bestimmten Container erstellt wurden und ein gemeinsames Blobsuffix verwenden, einen subjectEndsWith-Filter wie „.log“ oder „.jpg“.

Erweiterte Filterung

Um nach Werten in den Datenfeldern zu filtern und den Vergleichsoperator anzugeben, verwenden Sie die erweiterte Filteroption. Bei der erweiterten Filterung können Sie folgende Informationen angeben:

  • Operatortyp – Typ des Vergleichs.
  • Schlüssel – Feld in den Ereignisdaten, die Sie für die Filterung verwenden. Dabei kann es sich um eine Zahl, einen booleschen Wert, eine Zeichenfolge oder ein Array handeln.
  • Werte – Werte, die mit dem Schlüssel verglichen werden sollen.

Schlüssel

Das Feld „key“ in den Ereignisdaten wird für die Filterung verwendet. Mögliche Typen:

  • Number

  • Boolean

  • String

  • Array. Legen Sie die Eigenschaft enableAdvancedFilteringOnArrays auf „true“ fest, wenn Sie dieses Feature verwenden möchten.

    "filter":
    {
        "subjectBeginsWith": "/blobServices/default/containers/mycontainer/blobs/log",
        "subjectEndsWith": ".jpg",
        "enableAdvancedFilteringOnArrays": true
    }
    

Verwenden Sie für Ereignisse im CloudEvents-Schema die folgenden Werte für „key“: eventid, source, eventtype, eventtypeversion oder Ereignisdaten wie data.key1.

Wenn Sie die Basisversion für Ereignisse im Event Grid-Schema von Event Grid verwenden, verwenden Sie die folgenden Werte für „Schlüssel“: ID, Topic, Subject, EventType, DataVersion oder Ereignisdaten wie data.key1. Verwenden Sie für ein benutzerdefiniertes Eingabeschema die Ereignisdatenfelder wie data.key1. Verwenden Sie den Punktoperator (.), um auf Felder im Datenabschnitt zuzugreifen. Verwenden Sie beispielsweise data.siteName oder data.appEventTypeDetail.action, um auf siteName oder action im folgenden Beispielereignis zuzugreifen.

	"data": {
		"appEventTypeDetail": {
			"action": "Started"
		},
		"siteName": "<site-name>",
		"clientRequestId": "None",
		"correlationRequestId": "None",
		"requestId": "292f499d-04ee-4066-994d-c2df57b99198",
		"address": "None",
		"verb": "None"
	},

Hinweis

Event Grid unterstützt keine Filterung auf ein Array von Objekten. Es erlaubt nur String, Boolean, Zahlen und Array desselben Typs (wie Integer-Array oder String-Array).

Werte

Zulässige Werte sind Zahlen, Zeichenfolgen, boolesche Werte oder Arrays.

Operatoren

Die verfügbaren Operatoren für Zahlen sind:

NumberIn

Der NumberIn-Operator wird als „true“ ausgewertet, wenn der key-Wert einem der angegebenen filter-Werte entspricht. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter im Abschnitt data 5 oder 1 ist.

"advancedFilters": [{
    "operatorType": "NumberIn",
    "key": "data.counter",
    "values": [
        5,
        1
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a, b, c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

NumberNotIn

Der NumberNotIn-Operator wird als „true“ ausgewertet, wenn der key-Wert keinem der angegebenen filter-Werte entspricht. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter im Abschnitt data nicht 41 und nicht 0 ist.

"advancedFilters": [{
    "operatorType": "NumberNotIn",
    "key": "data.counter",
    "values": [
        41,
        0
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a, b, c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

NumberLessThan

Der NumberLessThan-Operator wird als „true“ ausgewertet, wenn der key-Wert kleiner als der angegebene filter-Wert ist. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter im Abschnitt data kleiner als 100 ist.

"advancedFilters": [{
    "operatorType": "NumberLessThan",
    "key": "data.counter",
    "value": 100
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den filter-Werten verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF key < filter
        MATCH

NumberGreaterThan

Der NumberGreaterThan-Operator wird als „true“ ausgewertet, wenn der key-Wert größer als der angegebene filter-Wert ist. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter im Abschnitt data größer als 20 ist.

"advancedFilters": [{
    "operatorType": "NumberGreaterThan",
    "key": "data.counter",
    "value": 20
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den filter-Werten verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF key > filter
        MATCH

NumberLessThanOrEquals

Der NumberLessThanOrEquals-Operator wird als „true“ ausgewertet, wenn der key-Wert kleiner oder gleich dem angegebenen filter-Wert ist. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter im Abschnitt data kleiner oder gleich 100 ist.

"advancedFilters": [{
    "operatorType": "NumberLessThanOrEquals",
    "key": "data.counter",
    "value": 100
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den filter-Werten verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF key <= filter
        MATCH

NumberGreaterThanOrEquals

Der NumberGreaterThanOrEquals-Operator wird als „true“ ausgewertet, wenn der key-Wert größer oder gleich dem angegebenen filter-Wert ist. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter im Abschnitt data größer oder gleich 30 ist.

"advancedFilters": [{
    "operatorType": "NumberGreaterThanOrEquals",
    "key": "data.counter",
    "value": 30
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den filter-Werten verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF key >= filter
        MATCH

NumberInRange

Der NumberInRange-Operator wird als „true“ ausgewertet, wenn der key-Wert in einem der angegebenen filter-Bereiche liegt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1 im Abschnitt data im Bereich von 3,14159 bis 999,95 oder von 3000 bis 4000 liegt.

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

Die Eigenschaft values ist ein Array, das aus Bereichen besteht. Im vorherigen Beispiel handelt es sich um ein Array aus zwei Bereichen. Hier sehen Sie ein Beispiel für ein Array mit einem zu überprüfenden Bereich.

Array mit einem Bereich:

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und filter-Werten, die ein Array aus Bereichen darstellen. In diesem Pseudo entsprechen a und b dem Mindest- bzw. Maximalwert jedes Bereichs im Array. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
       IF key >= a AND key <= b
           MATCH

NumberNotInRange

Der NumberNotInRange-Operator wird als „true“ ausgewertet, wenn der key-Wert in keinem der angegebenen filter-Bereiche liegt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1 im Abschnitt data im Bereich von 3,14159 bis 999,95 oder von 3000 bis 4000 liegt. Wenn das der Fall ist, gibt der Operator „false“ zurück.

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

Die Eigenschaft values ist ein Array, das aus Bereichen besteht. Im vorherigen Beispiel handelt es sich um ein Array aus zwei Bereichen. Hier sehen Sie ein Beispiel für ein Array mit einem zu überprüfenden Bereich.

Array mit einem Bereich:

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und filter-Werten, die ein Array aus Bereichen darstellen. In diesem Pseudo entsprechen a und b dem Mindest- bzw. Maximalwert jedes Bereichs im Array. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
        IF key >= a AND key <= b
            FAIL_MATCH

Der verfügbare Operator für boolesche Werte ist:

BoolEquals

Der BoolEquals-Operator wird als „true“ ausgewertet, wenn der key-Wert dem für filter angegebenen booleschen Wert entspricht. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs isEnabled im Abschnitt datatrue ist.

"advancedFilters": [{
    "operatorType": "BoolEquals",
    "key": "data.isEnabled",
    "value": true
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den booleschen Werten für „filter“ verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF filter == key
        MATCH

Die verfügbaren Operatoren für Zeichenfolgen sind:

StringContains

Der StringContains-Operator wird als „true“ ausgewertet, wenn der key-Wert einen der angegebenen filter-Werte als Teilzeichenfolge enthält. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1 im Abschnitt data eine der angegebenen Teilzeichenfolgen (microsoft oder azure) enthält. azure data factory enthält beispielsweise azure.

"advancedFilters": [{
    "operatorType": "StringContains",
    "key": "data.key1",
    "values": [
        "microsoft", 
        "azure"
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a,b,c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            MATCH

StringNotContains

Der StringNotContains-Operator wird als „true“ ausgewertet, wenn der key-Wert keinen der angegebenen filter-Werte als Teilzeichenfolge enthält. Wenn der Schlüssel einen der angegebenen Werte als Teilzeichenfolge enthält, wird der Operator als „false“ ausgewertet. Im folgenden Beispiel gibt der Operator nur „true“ zurück, wenn der Wert des Attributs key1 im Abschnitt data weder die Teilzeichenfolge contoso noch fabrikam enthält.

"advancedFilters": [{
    "operatorType": "StringNotContains",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam"
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a,b,c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            FAIL_MATCH

Weitere Informationen zur aktuellen Einschränkung dieses Operators finden Sie im Abschnitt Einschränkungen.

StringBeginsWith

Der StringBeginsWith-Operator wird als „true“ ausgewertet, wenn der key-Wert mit einem der angegebenen filter-Werte beginnt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1 im Abschnitt data mit event oder message beginnt. event hubs beginnt beispielsweise mit event.

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a,b,c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            MATCH

StringNotBeginsWith

Der StringNotBeginsWith-Operator wird als „true“ ausgewertet, wenn der key-Wert nicht mit einem der angegebenen filter-Werte beginnt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1 im Abschnitt data nicht mit event oder message beginnt.

"advancedFilters": [{
    "operatorType": "StringNotBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a,b,c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            FAIL_MATCH

StringEndsWith

Der StringEndsWith-Operator wird als „true“ ausgewertet, wenn der key-Wert mit einem der angegebenen filter-Werte endet. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1 im Abschnitt data mit jpg, jpeg oder png endet. eventgrid.png endet beispielsweise mit png.

"advancedFilters": [{
    "operatorType": "StringEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a,b,c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            MATCH

StringNotEndsWith

Der StringNotEndsWith-Operator wird als „true“ ausgewertet, wenn der key-Wert nicht mit einem der angegebenen filter-Werte endet. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1 im Abschnitt data nicht mit jpg, jpeg oder png endet.

"advancedFilters": [{
    "operatorType": "StringNotEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a,b,c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            FAIL_MATCH

StringIn

Der StringIn-Operator überprüft, ob der key-Wert exakt mit einem der angegebenen filter-Werte übereinstimmt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1 im Abschnitt data genau contoso, fabrikam oder factory ist.

"advancedFilters": [{
    "operatorType": "StringIn",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam", 
        "factory"
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a,b,c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

StringNotIn

Der StringNotIn-Operator überprüft, ob der key-Wert mit keinem der angegebenen filter-Werte übereinstimmt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1 im Abschnitt data nicht aws und nicht bridge ist.

"advancedFilters": [{
    "operatorType": "StringNotIn",
    "key": "data.key1",
    "values": [
        "aws", 
        "bridge"
    ]
}]

Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3] und den filter-Werten [a,b,c]. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

Bei sämtlichen Zeichenfolgenvergleichen wird die Groß-/Kleinschreibung nicht beachtet.

Hinweis

Wenn der JSON-Code für das Ereignis den erweiterten Filterschlüssel nicht enthält, wird der Filter von den folgenden Operatoren als nicht übereinstimmend ausgewertet: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith und StringIn.

Der Filter wird für die folgenden Operatoren als übereinstimmend ausgewertet: NumberNotIn und StringNotIn.

IsNullOrUndefined

Der IsNullOrUndefined-Operator wird als „true“ ausgewertet, wenn der key-Wert NULL lautet oder undefiniert ist.

{
    "operatorType": "IsNullOrUndefined",
    "key": "data.key1"
}

Im folgenden Beispiel fehlt key1, deshalb wird der Operator als „true“ ausgewertet.

{ 
    "data": 
    { 
        "key2": 5 
    } 
}

Im folgenden Beispiel ist key1 auf NULL festgelegt, deshalb wird der Operator als „true“ ausgewertet.

{
    "data": 
    { 
        "key1": null
    }
}

Wenn Schlüssel 1 in diesen Beispielen einen anderen Wert aufweisen würde, würde der Operator als „falsch“ ausgewertet werden.

IsNotNull

Der IsNotNull-Operator wird als „true“ ausgewertet, wenn der key-Wert nicht NULL lautet oder nicht undefiniert ist.

{
    "operatorType": "IsNotNull",
    "key": "data.key1"
}

OR und AND

Wenn Sie einen einzelnen Filter mit mehreren Werten angeben, wird ein OR-Vorgang ausgeführt, daher muss das Schlüsselfeld einen der folgenden Werte aufweisen. Hier sehen Sie ein Beispiel:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/",
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

Wenn Sie mehrere verschiedene Filter angeben, wird ein AND-Vorgang ausgeführt, sodass jede Filterbedingung erfüllt sein muss. Hier sehen Sie ein Beispiel:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/"
        ]
    },
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

CloudEvents

Verwenden Sie für Ereignisse im CloudEvents-Schema die folgenden Werte für „key“: eventid, source, eventtype, eventtypeversion oder Ereignisdaten wie data.key1.

Sie können auch die Erweiterungskontextattribute in CloudEvents 1.0 verwenden. Im folgenden Beispiel entsprechen comexampleextension1 und comexampleothervalue den Erweiterungskontextattributen.

{
    "specversion" : "1.0",
    "type" : "com.example.someevent",
    "source" : "/mycontext",
    "id" : "C234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "subject": null,
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
        "appinfoA" : "abc",
        "appinfoB" : 123,
        "appinfoC" : true
    }
}

Hier sehen Sie ein Beispiel für die Verwendung eines Erweiterungskontextattributs in einem Filter.

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "comexampleothervalue",
    "values": [
        "5", 
        "1"
    ]
}]

Einschränkungen

Für die erweiterte Filterung gelten folgende Einschränkungen:

  • 25 erweiterte Filter und 25 Filterwerte für alle Filter pro Event Grid-Abonnement
  • 512 Zeichen pro Zeichenfolgenwert
  • Schlüssel mit enthaltenem . (Punktzeichen) . Zum Beispiel: http://schemas.microsoft.com/claims/authnclassreference oder john.doe@contoso.com. Derzeit gibt es keine Unterstützung für Escapezeichen in Schlüsseln.

Der gleiche Schlüssel kann in mehr als einem Filter verwendet werden.

Nächste Schritte