Filtrer des événements pour Event Grid

Cet article montre comment filtrer des événements lors de la création d’un abonnement Event Grid. Pour en savoir plus sur les options de filtrage d’événements, consultez Comprendre le filtrage d’événements pour les abonnements Event Grid.

Filtrer par type d’événement

Quand vous créez un abonnement Event Grid, vous pouvez spécifier quels types d’événements envoyer au point de terminaison. Les exemples de cette section créent des abonnements à des événements d’un groupe de ressources, mais limitent les événements qui sont envoyés à Microsoft.Resources.ResourceWriteFailure et Microsoft.Resources.ResourceWriteSuccess. Si vous avez besoin de davantage de souplesse lors du filtrage d’événements par type d’événement, consultez Filtrer avec des opérateurs et sur des données.

Azure PowerShell

Pour PowerShell, utilisez le paramètre -IncludedEventType lors de la création de l’abonnement.

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

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

Azure CLI

Pour Azure CLI, utilisez le paramètre --included-event-types. L’exemple suivant utilise Azure CLI dans un interpréteur de commandes Bash :

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

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

Portail Azure

Lors de la création d’un abonnement aux événements pour une rubrique système, utilisez la liste déroulante pour sélectionner les types d’événements, comme illustré dans l’image suivante.

Screenshot showing the Create Subscription page with event types selected.

Pour un abonnement existant pour une rubrique système, utilisez l’onglet Filtres de la page Abonnement aux événements, comme illustré dans l’image suivante.

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

Vous pouvez spécifier des filtres lors de la création d’une rubrique personnalisée en sélectionnant le lien Ajouter un type d’événement comme illustré dans l’image suivante.

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

Pour spécifier un filtre pour un abonnement existant pour une rubrique personnalisée, utilisez l’onglet Filtres dans la page Abonnement aux événements.

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

Modèle Azure Resource Manager

Pour un modèle Resource Manager, utilisez la propriété 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"
        ]
      }
    }
  }
]

Notes

Pour en savoir plus sur ces filtres (Types d’événements, Objet et Avancé), consultez Comprendre le filtrage d’événements pour les abonnements Event Grid.

Filtrer par objet

Vous pouvez filtrer des événements par l’objet indiqué dans les données d’événement. Vous pouvez spécifier une valeur à faire correspondre pour le début ou la fin de l’objet. Si vous avez besoin de davantage de souplesse lors du filtrage d’événements par sujet, consultez Filtrer avec des opérateurs et sur des données.

Dans l’exemple PowerShell suivant, vous créez un abonnement à un événement qui filtre sur le début de l’objet. Vous utilisez le paramètre -SubjectBeginsWith pour limiter les événements à ceux d’une ressource spécifique. Vous transmettez l’ID de ressource d’un groupe de sécurité réseau.

Azure PowerShell

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

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

L’exemple PowerShell suivant crée un abonnement pour un stockage d’objets blob. Il limite les événements à ceux dont l’objet se termine par .jpg.

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

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

Azure CLI

Dans l’exemple Azure CLI suivant, vous créez un abonnement à un événement qui filtre sur le début de l’objet. Vous utilisez le paramètre --subject-begins-with pour limiter les événements à ceux d’une ressource spécifique. Vous transmettez l’ID de ressource d’un groupe de sécurité réseau.

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

L’exemple Azure CLI suivant crée un abonnement pour un stockage d’objets blob. Il limite les événements à ceux dont l’objet se termine par .jpg.

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"

Portail Azure

Pour un abonnement aux événements existant :

  1. Dans la page Abonnement aux événements, sélectionnez Activer le filtrage d’objet.

  2. Entrez des valeurs pour un ou plusieurs des champs suivants : Le sujet commence par et Le sujet se termine par. Dans la capture suivante, les deux options sont sélectionnées.

    Screenshot of Event Subscription page with subject filtering example.

  3. Sélectionnez l’option de Correspondance sensible à la casse si vous voulez que l’objet de l’événement corresponde à la casse des filtres spécifiés.

Lors de la création d’un abonnement aux événements, utilisez l’onglet Filtres de l’Assistant de création.

Screenshot of Create Event Subscription page with the Filters tab selected.

Modèle Azure Resource Manager

Dans l’exemple de modèle Resource Manager suivant, vous créez un abonnement à un événement qui filtre sur le début de l’objet. Vous utilisez la propriété subjectBeginsWith pour limiter les événements à ceux d’une ressource spécifique. Vous transmettez l’ID de ressource d’un groupe de sécurité réseau.

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

L’exemple de modèle Resource Manager suivant crée un abonnement pour un stockage d’objets blob. Il limite les événements à ceux dont l’objet se termine par .jpg.

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

Notes

Pour en savoir plus sur ces filtres (Types d’événements, Objet et Avancé), consultez Comprendre le filtrage d’événements pour les abonnements Event Grid.

Filtrer avec des opérateurs et sur des données

Pour plus de flexibilité, vous pouvez utiliser des opérateurs et des propriétés de données lors du filtrage des événements.

S’abonner avec des filtres avancés

Pour en savoir plus sur les opérateurs et les clés que vous pouvez utiliser pour le filtrage avancé, consultez Filtrage avancé.

Ces exemples créent une rubrique personnalisée. Ils s’abonnent à la rubrique personnalisée et filtrent selon une valeur de l'objet de données. Les événements dont la propriété color est définie sur blue, red ou green sont envoyés à l’abonnement.

Azure PowerShell

Pour PowerShell, utilisez la commande suivante :

$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

Pour l’interface de ligne de commande Azure, consultez :

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

Notez qu’une date d’expiration est définie pour l’abonnement.

Portail Azure

  1. Dans la page Abonnement aux événements, sélectionnez Ajouter un nouveau filtre dans la section FILTRES AVANCÉS.

    Screenshot showing the Event Subscription page with Add new filter link highlighted.

  2. Spécifiez une clé, un opérateur et une ou plusieurs valeurs à comparer. Dans l’exemple suivant, data.color est utilisé comme clé, La chaîne est dans comme opérateur, et les valeurs blue, red et green sont spécifiées comme valeurs.

    Screenshot showing an example of an advanced filter.

    Remarque

    Pour en savoir plus sur les filtres avancés, consultez Comprendre le filtrage d’événements pour les abonnements Event Grid.

Tester le filtre

Pour tester le filtre, envoyez un événement avec le champ color défini sur green. Comme green est l'une des valeurs du filtre, l'événement est transmis au point de terminaison.

Azure PowerShell

Pour PowerShell, utilisez la commande suivante :

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

Pour tester un scénario dans lequel l’événement n’est pas envoyé, envoyez un événement avec le champ color défini sur yellow. Comme yellow n’est pas l’une des valeurs spécifiées dans l’abonnement, l’événement n’est pas remis à votre abonnement.

$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

Pour l’interface de ligne de commande Azure, consultez :

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

Pour tester un scénario dans lequel l’événement n’est pas envoyé, envoyez un événement avec le champ color défini sur yellow. Comme yellow n’est pas l’une des valeurs spécifiées dans l’abonnement, l’événement n’est pas remis à votre abonnement.

Pour l’interface de ligne de commande Azure, consultez :

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

Étapes suivantes

Pour en savoir plus sur les filtres (Types d’événements, Objet et Avancé), consultez Comprendre le filtrage d’événements pour les abonnements Event Grid.