Filtern von Ereignissen für Event Grid

Dieser Artikel zeigt, wie Sie Ereignisse beim Erstellen eines Event Grid-Abonnements filtern können. Weitere Informationen zu den Optionen für die Ereignisfilterung finden Sie unter Grundlegendes zur Ereignisfilterung für Event Grid-Abonnements.

Filtern nach Ereignistyp

Beim Erstellen eines Event Grid-Abonnements können Sie angeben, welche Ereignistypen an den Endpunkt gesendet werden sollen. Die Beispiele in diesem Abschnitt erstellen Ereignisabonnements für eine Ressourcengruppe, beschränken jedoch die Ereignisse, die an Microsoft.Resources.ResourceWriteFailure und Microsoft.Resources.ResourceWriteSuccess gesendet werden. 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 showing the Create Subscription page with event types selected.

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

Screenshot showing the Event Subscription page with the Filters tab selected.

Sie können Filter beim Erstellen eines benutzerdefinierten Themas angeben, indem Sie den Link Ereignistyp hinzufügen wie in der folgenden Abbildung gezeigt:

Screenshot showing the Create Event Subscription page for a custom topic.

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

Screenshot of the Event Subscription page with Add Event Type button selected.

Azure Resource Manager-Vorlage

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

"resources": [
  {
    "type": "Microsoft.EventGrid/eventSubscriptions",
    "name": "[parameters('eventSubName')]",
    "apiVersion": "2018-09-15-preview",
    "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. In den folgenden Optionen sind beide Optionen ausgewählt.

    Screenshot of Event Subscription page with subject filtering example.

  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 of Create Event Subscription page with the Filters tab selected.

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": "2018-09-15-preview",
    "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": "2018-09-15-preview",
    "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=@{operator="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 showing the Event Subscription page with Add new filter link highlighted.

  2. Geben Sie einen Schlüssel, einen Operator und Werte an, die verglichen werden sollen. Im folgenden Beispiel wird data.color als Schlüssel und String is in als Operator angegeben. blue, red und green sind Werte.

    Screenshot showing an example of an advanced 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 im Farbfeld „Grün“ festgelegt 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

Nächste Schritte

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