Filtrado de eventos para Event Grid

En este artículo se muestra cómo filtrar eventos al crear una suscripción de Event Grid. Para obtener información sobre las opciones de filtrado de eventos, consulte Understand event filtering for Event Grid subscriptions (Descripción del filtrado de events para suscripciones de Event Grid).

Filtrar por tipo de evento

Al crear una suscripción de Event Grid, puede especificar qué tipos de evento se envían al punto de conexión. En los ejemplos de esta sección se crean suscripciones de eventos para un grupo de recursos, pero se limitan los eventos que se envían a Microsoft.Resources.ResourceWriteFailure y Microsoft.Resources.ResourceWriteSuccess. Si necesita más flexibilidad a la hora de filtrar eventos por tipos de evento, consulte Filtrar por operadores y datos.

Azure PowerShell

Para PowerShell, use el parámetro -IncludedEventType al crear la suscripción.

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

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

Azure CLI

Para la CLI de Azure, use el parámetro --included-event-types. En el ejemplo siguiente se usa la CLI de Azure en un shell de 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

Azure portal

Al crear una suscripción de eventos a un tema del sistema, utilice la lista desplegable para seleccionar los tipos de eventos como se muestra en la siguiente imagen.

Screenshot showing the Create Subscription page with event types selected.

Para una suscripción existente a un tema del sistema, utilice la pestaña Filtros de la página Suscripción a eventos, como se muestra en la siguiente imagen.

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

Puede especificar filtros mientras crea un tema personalizado seleccionando el enlace Agregar tipo de evento como se muestra en la siguiente imagen.

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

Para especificar un filtro para una suscripción existente a un tema personalizado, utilice la pestaña Filtros de la página Suscripción a eventos.

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

Plantilla del Administrador de recursos de Azure

Para una plantilla de Resource Manager, use la propiedad 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"
        ]
      }
    }
  }
]

Nota

Para más información sobre estos filtros (tipos de eventos, asuntos y avanzados), consulte Descripción del filtrado de eventos para suscripciones de Event Grid.

Filtrar por asunto

Puede filtrar eventos por el asunto de los datos del evento. Puede especificar un valor que debe coincidir con el principio o el final del asunto. Si necesita más flexibilidad a la hora de filtrar eventos por temas, consulte Filtrar por operadores y datos.

En el siguiente ejemplo de PowerShell, se crea una suscripción de eventos que filtra por el principio del asunto. Se usa el parámetro -SubjectBeginsWith para limitar los eventos a aquellos de un recurso específico. Se pasa el identificador de recurso de un grupo de seguridad de red.

Azure PowerShell

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

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

En el siguiente ejemplo de PowerShell se crea una suscripción para un almacenamiento de blobs. Se limitan los eventos a aquellos con un asunto que termina por .jpg.

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

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

Azure CLI

En el siguiente ejemplo de la CLI de Azure, se crea una suscripción de eventos que filtra por el principio del asunto. Se usa el parámetro --subject-begins-with para limitar los eventos a aquellos de un recurso específico. Se pasa el identificador de recurso de un grupo de seguridad de red.

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

En el siguiente ejemplo de la CLI de Azure se crea una suscripción para un almacenamiento de blobs. Se limitan los eventos a aquellos con un asunto que termina por .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"

Azure portal

Para una suscripción a un evento existente:

  1. En la página Suscripción a eventos, seleccione Habilitar el filtrado del asunto.

  2. Especifique los valores de uno o varios de los siguientes campos: El asunto comienza por y El asunto termina con. En las siguientes opciones se seleccionan ambas opciones.

    Screenshot of Event Subscription page with subject filtering example.

  3. Seleccione la opción La coincidencia de asunto distingue mayúsculas de minúsculas si desea que el asunto del evento coincida con las mayúsculas y minúsculas de los filtros especificados.

Al crear una suscripción a un evento, utilice la pestaña Filtros del asistente de creación.

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

Plantilla del Administrador de recursos de Azure

En el siguiente ejemplo de plantilla de Resource Manager, se crea una suscripción de eventos que filtra por el principio del asunto. Se usa la propiedad subjectBeginsWith para limitar los eventos a aquellos de un recurso específico. Se pasa el identificador de recurso de un grupo de seguridad de red.

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

En el siguiente ejemplo de plantilla de Resource Manager se crea una suscripción para un almacenamiento de blobs. Se limitan los eventos a aquellos con un asunto que termina por .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" ]
      }
    }
  }
]

Nota

Para más información sobre estos filtros (tipos de eventos, asuntos y avanzados), consulte Descripción del filtrado de eventos para suscripciones de Event Grid.

Filtrado por operadores y datos

Para obtener más flexibilidad en el filtrado, puede usar propiedades de datos y operadores para filtrar eventos.

Suscripción con filtros avanzados

Para obtener información acerca de los operadores y las claves que puede usar para el filtrado avanzado, consulte Advanced filtering (Filtrado avanzado).

En estos ejemplos se crea un tema personalizado. Se suscriben al tema personalizado y filtra por un valor en el objeto de datos. Los eventos que tienen la propiedad de color establecida en azul, rojo o verde se envían a la suscripción.

Azure PowerShell

Para PowerShell, use:

$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

Para la CLI de Azure, utilice:

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

Tenga en cuenta que se ha establecido una fecha de expiración para la suscripción.

Azure portal

  1. En la página Suscripción a eventos, seleccione Agregar nuevo filtro en la sección FILTROS AVANZADOS.

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

  2. Especifique una clave, un operador y uno o varios valores para comparar. En el ejemplo siguiente se usa data.color como clave, La cadena está en como operador y azul, rojo y verde como valores.

    Screenshot showing an example of an advanced filter.

    Nota:

    Para más información sobre los filtros avanzados, consulte Descripción del filtrado de eventos para suscripciones de Event Grid.

Prueba del filtro

Para probar el filtro, envíe un evento con el campo de color establecido en verde. Dado que verde es uno de los valores del filtro, el evento se entrega en el punto de conexión.

Azure PowerShell

Para PowerShell, use:

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

Para probar un escenario donde no se envía el evento, envíe un evento con el campo de color establecido en amarillo. El amarillo no es uno de los valores especificados en la suscripción, por lo que el evento no se entrega a su suscripción.

$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

Para la CLI de Azure, utilice:

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

Para probar un escenario donde no se envía el evento, envíe un evento con el campo de color establecido en amarillo. El amarillo no es uno de los valores especificados en la suscripción, por lo que el evento no se entrega a su suscripción.

Para la CLI de Azure, utilice:

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

Pasos siguientes

Para más información sobre los filtros (tipos de eventos, asuntos y avanzados), consulte Descripción del filtrado de eventos para suscripciones de Event Grid.