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.
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.
Puede especificar filtros mientras crea un tema personalizado seleccionando el enlace Agregar tipo de evento como se muestra en la siguiente imagen.
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.
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:
En la página Suscripción a eventos, seleccione Habilitar el filtrado del asunto.
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.
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.
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=@{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
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
En la página Suscripción a eventos, seleccione Agregar nuevo filtro en la sección FILTROS AVANZADOS.
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.
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.