Filtern von Ereignissen für Event Grid

Dieser Artikel zeigt Ihnen, wie Sie die Ereignisse filtern, die Event Grid an Ihren Endpunkt liefert, wenn Sie ein Ereignis-Abonnement erstellen. Du kannst nach Ereignistyp, nach Thema oder nach erweiterten Feldern und Operatoren filtern, sodass nur die Ereignisse, die dir wichtig sind, deinen Handler erreichen.

Die Beispiele verwenden Azure PowerShell, die Azure CLI, das Azure Portal und Azure Resource Manager (ARM) Vorlagen. Verwenden Sie das Werkzeug, das zu Ihrem Arbeitsablauf passt. Um mehr über die verfügbaren Filteroptionen zu erfahren, finden Sie unter Grundlegendes zur Ereignisfilterung für Event Grid-Abonnements weitere Informationen.

Voraussetzungen

  • Ein aktives Azure-Abonnement. Falls Sie kein Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
  • Azure PowerShell oder die installierte Azure CLI, falls du vorhast, die PowerShell- oder CLI-Beispiele auszuführen. Weitere Informationen finden Sie unter Install the Azure Az PowerShell module oder How to install the Azure CLI.
  • Ein bestehendes Event Grid-Thema oder Systemthema sowie ein Endpunkt zum Empfang der gefilterten Ereignisse. Einige Beispiele erstellen das benötigte Thema für dich.

Filtern nach Ereignistyp

Beim Erstellen eines Event Grid-Abonnements können Sie angeben, welche Ereignistypen an den Endpunkt gesendet werden sollen. Die folgenden Beispiele erstellen Ereignisabonnements für eine Ressourcengruppe, beschränken die gesendeten Ereignisse jedoch auf Microsoft.Resources.ResourceWriteSuccess und Microsoft.Resources.ResourceWriteFailure. Wenn Sie mehr Flexibilität beim Filtern von Ereignissen nach Ereignistypen benötigen, lesen Sie Filtern nach Operatoren und Daten.

Azure PowerShell

Verwenden Sie für PowerShell den Parameter -IncludedEventType beim Erstellen des Abonnements.

$includedEventTypes = "Microsoft.Resources.ResourceWriteFailure", "Microsoft.Resources.ResourceWriteSuccess"

New-AzEventGridSubscription `
  -EventSubscriptionName demoSubToResourceGroup `
  -ResourceGroupName myResourceGroup `
  -Endpoint <endpoint-URL> `
  -IncludedEventType $includedEventTypes

Azure CLI

Verwenden Sie für die Azure CLI den Parameter --included-event-types. Im folgenden Beispiel wird die Azure-CLI in einer Bash-Shell verwendet:

includedEventTypes="Microsoft.Resources.ResourceWriteFailure Microsoft.Resources.ResourceWriteSuccess"

az eventgrid event-subscription create \
  --name demoSubToResourceGroup \
  --resource-group myResourceGroup \
  --endpoint <endpoint-URL> \
  --included-event-types $includedEventTypes

Azure-Portal

Verwenden Sie beim Erstellen eines Ereignisabonnements für ein Systemthema die Dropdownliste, um die Ereignistypen auszuwählen, wie in der folgenden Abbildung gezeigt:

Screenshot der Seite „Abonnement erstellen“ mit ausgewählten Ereignistypen.

Verwenden Sie für ein vorhandenes Abonnement eines Systemthemas die Registerkarte Filter der Seite Ereignisabonnement wie in der folgenden Abbildung dargestellt:

Screenshot der Seite „Ereignisabonnement“ mit ausgewähltem „Filter“-Tab.

Spezifizieren Sie Filter beim Erstellen eines benutzerdefinierten Themas , indem Sie den Link "Ereignistyp hinzufügen " auswählen, wie im folgenden Bild gezeigt.

Screenshot der Seite „Ereignisabonnement erstellen“ für ein benutzerdefiniertes Thema.

Verwenden Sie zum Angeben eines Filters für ein vorhandenes Abonnement eines benutzerdefinierten Themas die Registerkarte Filter der Seite Ereignisabonnement.

Screenshot der Seite „Ereignisabonnement“ mit ausgewählter Schaltfläche „Ereignistyp hinzufügen“.

Azure Resource Manager-Vorlage

Verwenden Sie für eine Resource Manager-Vorlage, die Eigenschaft includedEventTypes.

"resources": [
  {
    "type": "Microsoft.EventGrid/eventSubscriptions",
    "name": "[parameters('eventSubName')]",
    "apiVersion": "2025-02-15",
    "properties": {
      "destination": {
        "endpointType": "WebHook",
        "properties": {
          "endpointUrl": "[parameters('endpoint')]"
        }
      },
      "filter": {
        "subjectBeginsWith": "",
        "subjectEndsWith": "",
        "isSubjectCaseSensitive": false,
        "includedEventTypes": [
          "Microsoft.Resources.ResourceWriteFailure",
          "Microsoft.Resources.ResourceWriteSuccess"
        ]
      }
    }
  }
]

Hinweis

Weitere Informationen zu diesen Filtern (Ereignistypen, Betreff und Erweitert) finden Sie unter Grundlegendes zur Ereignisfilterung für Event Grid-Abonnements.

Filtern nach Betreff

Sie können Ereignisse nach dem Betreff in den Ereignisdaten filtern. Sie können einen Wert angeben, der dem Anfang oder Ende des Betreffs entspricht. Wenn Sie mehr Flexibilität beim Filtern von Ereignissen nach Betreff benötigen, lesen Sie Filtern nach Operatoren und Daten.

Im folgenden PowerShell-Beispiel erstellen Sie ein Ereignisabonnement, das nach dem Anfang des Betreffs filtert. Mit dem Parameter -SubjectBeginsWith können Sie Ereignisse auf solche für eine bestimmte Ressource beschränken. Sie übergeben die Ressourcen-ID einer Netzwerksicherheitsgruppe.

Azure PowerShell

$resourceId = (Get-AzResource -ResourceName demoSecurityGroup -ResourceGroupName myResourceGroup).ResourceId

New-AzEventGridSubscription `
  -Endpoint <endpoint-URL> `
  -EventSubscriptionName demoSubscriptionToResourceGroup `
  -ResourceGroupName myResourceGroup `
  -SubjectBeginsWith $resourceId

Im nächste PowerShell-Beispiel wird ein Abonnement für einen Blob Storage erstellt. Es begrenzt die Ereignisse auf die, deren Betreff auf .jpg endet.

$storageId = (Get-AzStorageAccount -ResourceGroupName myResourceGroup -AccountName $storageName).Id

New-AzEventGridSubscription `
  -EventSubscriptionName demoSubToStorage `
  -Endpoint <endpoint-URL> `
  -ResourceId $storageId `
  -SubjectEndsWith ".jpg"

Azure CLI

Im folgenden Azure CLI-Beispiel erstellen Sie ein Ereignisabonnement, das nach dem Anfang des Betreffs filtert. Mit dem Parameter --subject-begins-with können Sie Ereignisse auf solche für eine bestimmte Ressource beschränken. Sie übergeben die Ressourcen-ID einer Netzwerksicherheitsgruppe.

resourceId=$(az network nsg show -g myResourceGroup -n demoSecurityGroup --query id --output tsv)

az eventgrid event-subscription create \
  --name demoSubscriptionToResourceGroup \
  --resource-group myResourceGroup \
  --endpoint <endpoint-URL> \
  --subject-begins-with $resourceId

Das nächste Azure CLI-Beispiel erstellt ein Abonnement für einen Blob Storage. Es begrenzt die Ereignisse auf die, deren Betreff auf .jpg endet.

storageid=$(az storage account show --name $storageName --resource-group myResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --resource-id $storageid \
  --name demoSubToStorage \
  --endpoint <endpoint-URL> \
  --subject-ends-with ".jpg"

Azure-Portal

Bei einem vorhandenen Ereignisabonnement:

  1. Wählen Sie auf der Seite Ereignisabonnement die Option Betrefffilterung aktivieren aus.

  2. Geben Sie Werte für mindestens eines der folgenden Felder ein: Betreff beginnt mit und Betreff endet mit. Im folgenden Beispiel sind beide Optionen ausgewählt.

    Screenshot der Seite „Ereignisabonnement“ mit Beispiel für Betrefffilterung.

  3. Wählen Sie die Option Betreffabgleich unter Beachtung von Groß-/Kleinschreibung aus, wenn der Betreff des Ereignisses mit der Groß-/Kleinschreibung der angegebenen Filter übereinstimmen soll.

Verwenden Sie beim Erstellen eines Ereignisabonnements die Registerkarte Filter im Erstellungs-Assistenten.

Screenshot der Seite „Ereignisabonnement erstellen“ mit ausgewähltem „Filter“-Tab.

Azure Resource Manager-Vorlage

Im folgenden Beispiel für eine Resource Manager-Vorlage erstellen Sie ein Ereignisabonnement, das nach dem Anfang des Betreffs filtert. Mit der Eigenschaft subjectBeginsWith können Sie Ereignisse auf solche für eine bestimmte Ressource beschränken. Sie übergeben die Ressourcen-ID einer Netzwerksicherheitsgruppe.

"resources": [
  {
    "type": "Microsoft.EventGrid/eventSubscriptions",
    "name": "[parameters('eventSubName')]",
    "apiVersion": "2025-02-15",
    "properties": {
      "destination": {
        "endpointType": "WebHook",
        "properties": {
          "endpointUrl": "[parameters('endpoint')]"
        }
      },
      "filter": {
        "subjectBeginsWith": "[resourceId('Microsoft.Network/networkSecurityGroups','demoSecurityGroup')]",
        "subjectEndsWith": "",
        "isSubjectCaseSensitive": false,
        "includedEventTypes": [ "All" ]
      }
    }
  }
]

Das nächste Beispiel für eine Resource Manager-Vorlage erstellt ein Abonnement für einen Blob Storage. Es begrenzt die Ereignisse auf die, deren Betreff auf .jpg endet.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
    "name": "[concat(parameters('storageName'), '/Microsoft.EventGrid/', parameters('eventSubName'))]",
    "apiVersion": "2025-02-15",
    "properties": {
      "destination": {
        "endpointType": "WebHook",
        "properties": {
          "endpointUrl": "[parameters('endpoint')]"
        }
      },
      "filter": {
        "subjectEndsWith": ".jpg",
        "subjectBeginsWith": "",
        "isSubjectCaseSensitive": false,
        "includedEventTypes": [ "All" ]
      }
    }
  }
]

Hinweis

Weitere Informationen zu diesen Filtern (Ereignistypen, Betreff und Erweitert) finden Sie unter Grundlegendes zur Ereignisfilterung für Event Grid-Abonnements.

Filtern nach Operatoren und Daten

Um bei der Filterung mehr Flexibilität zu erhalten, können Sie Ereignisse nach Operatoren und Dateneigenschaften filtern.

Abonnieren mit erweiterten Filtern

Weitere Informationen zu den Operatoren und den Schlüsseln, die Sie für die erweiterte Filterung verwenden können, finden Sie unter Erweiterte Filterung.

Diese Beispiele erstellen ein benutzerdefiniertes Thema. Sie abonnieren das benutzerdefinierte Thema und filtern nach einem Wert im Datenobjekt. Ereignisse, bei denen die Farbeigenschaft auf „Blau“, „Rot“ oder „Grün“ eingestellt ist, werden an das Abonnement gesendet.

Azure PowerShell

Verwenden Sie für PowerShell Folgendes:

$topicName = <your-topic-name>
$endpointURL = <endpoint-URL>

New-AzResourceGroup -Name gridResourceGroup -Location eastus2
New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location eastus2 -Name $topicName

$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name $topicName).Id

$expDate = '<mm/dd/yyyy hh:mm:ss>' | Get-Date
$AdvFilter1=@{operatorType="StringIn"; key="data.color"; values=@('blue', 'red', 'green')}

New-AzEventGridSubscription `
  -ResourceId $topicid `
  -EventSubscriptionName <event_subscription_name> `
  -Endpoint $endpointURL `
  -ExpirationDate $expDate `
  -AdvancedFilter @($AdvFilter1)

Azure CLI

Verwenden Sie für die Azure-Befehlszeilenschnittstelle den folgenden Befehl:

topicName=<your-topic-name>
endpointURL=<endpoint-URL>

az group create -n gridResourceGroup -l eastus2
az eventgrid topic create --name $topicName -l eastus2 -g gridResourceGroup

topicid=$(az eventgrid topic show --name $topicName -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  -n demoAdvancedSub \
  --advanced-filter data.color stringin blue red green \
  --endpoint $endpointURL \
  --expiration-date "<yyyy-mm-dd>"

Beachten Sie, dass für das Abonnement ein Ablaufdatum festgelegt ist.

Azure-Portal

  1. Wählen Sie auf der Seite Ereignisabonnement die Option Neuen Filter hinzufügen im Abschnitt ERWEITERTE FILTER aus.

    Screenshot: Seite „Ereignisabonnement“ mit hervorgehobenem Link „Neuen Filter hinzufügen“.

  2. Geben Sie einen Schlüssel, einen Operator sowie einen Wert oder mehrere Werte zum Vergleich an. Im folgenden Beispiel wird data.color als Schlüssel und String is in als Operator angegeben. blue, red und green sind Werte.

    Screenshot: Beispiel für einen erweiterten Filter.

    Hinweis

    Weitere Informationen zu erweiterten Filtern finden Sie unter Grundlegendes zur Ereignisfilterung für Event Grid-Abonnements.

Testen des Filters

Um den Filter zu testen, senden Sie ein Ereignis, bei dem das Feld color auf Grün gesetzt ist. Da „Grün“ einer der Werte im Filter ist, wird das Ereignis an den Endpunkt übermittelt.

Azure PowerShell

Verwenden Sie für PowerShell Folgendes:

$endpoint = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name $topicName).Endpoint
$keys = Get-AzEventGridTopicKey -ResourceGroupName gridResourceGroup -Name $topicName

$eventID = Get-Random 99999
$eventDate = Get-Date -Format s

$htbody = @{
    id= $eventID
    eventType="recordInserted"
    subject="myapp/vehicles/cars"
    eventTime= $eventDate
    data= @{
        model="SUV"
        color="green"
    }
    dataVersion="1.0"
}

$body = "["+(ConvertTo-Json $htbody)+"]"

Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

Um ein Szenario zu testen, in dem das Ereignis nicht gesendet wird, senden Sie ein Ereignis, bei dem das Farbfeld auf „Gelb“ gesetzt ist. Gelb ist nicht einer der im Abonnement angegebenen Werte, sodass das Ereignis nicht an Ihr Abonnement gesendet wird.

$htbody = @{
    id= $eventID
    eventType="recordInserted"
    subject="myapp/vehicles/cars"
    eventTime= $eventDate
    data= @{
        model="SUV"
        color="yellow"
    }
    dataVersion="1.0"
}

$body = "["+(ConvertTo-Json $htbody)+"]"

Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

Azure CLI

Verwenden Sie für die Azure-Befehlszeilenschnittstelle den folgenden Befehl:

topicEndpoint=$(az eventgrid topic show --name $topicName -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicName -g gridResourceGroup --query "key1" --output tsv)

event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/cars", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "model": "SUV", "color": "green"},"dataVersion": "1.0"} ]'

curl -X POST -H "aeg-sas-key: $key" -d "$event" $topicEndpoint

Um ein Szenario zu testen, in dem das Ereignis nicht gesendet wird, senden Sie ein Ereignis, bei dem das Farbfeld auf „Gelb“ gesetzt ist. Gelb ist nicht einer der im Abonnement angegebenen Werte, sodass das Ereignis nicht an Ihr Abonnement gesendet wird.

Verwenden Sie für die Azure-Befehlszeilenschnittstelle den folgenden Befehl:

event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/cars", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "model": "SUV", "color": "yellow"},"dataVersion": "1.0"} ]'

curl -X POST -H "aeg-sas-key: $key" -d "$event" $topicEndpoint