Filtrowanie zdarzeń dla usługi Event Grid

W tym artykule pokazano, jak filtrować zdarzenia podczas tworzenia subskrypcji usługi Event Grid. Aby dowiedzieć się więcej o opcjach filtrowania zdarzeń, zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.

Filtruj według typu zdarzenia

Podczas tworzenia subskrypcji usługi Event Grid można określić typy zdarzeń, które mają być wysyłane do punktu końcowego. Przykłady w tej sekcji tworzą subskrypcje zdarzeń dla grupy zasobów, ale ograniczają zdarzenia wysyłane do Microsoft.Resources.ResourceWriteFailure i Microsoft.Resources.ResourceWriteSuccess. Jeśli potrzebujesz większej elastyczności podczas filtrowania zdarzeń według typów zdarzeń, zobacz Filtrowanie według operatorów i danych.

Azure PowerShell

W przypadku programu PowerShell użyj parametru -IncludedEventType podczas tworzenia subskrypcji.

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

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

Interfejs wiersza polecenia platformy Azure

W przypadku interfejsu wiersza polecenia platformy Azure użyj parametru --included-event-types . W poniższym przykładzie użyto interfejsu wiersza polecenia platformy Azure w powłoce powłoki 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

Podczas tworzenia subskrypcji zdarzeń do tematu systemowego użyj listy rozwijanej, aby wybrać typy zdarzeń, jak pokazano na poniższej ilustracji.

Screenshot showing the Create Subscription page with event types selected.

W przypadku istniejącej subskrypcji tematu systemowego użyj karty Filtry na stronie Subskrypcja zdarzeń, jak pokazano na poniższej ilustracji.

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

Filtry można określić podczas tworzenia tematu niestandardowego, wybierając link Dodaj typ zdarzenia, jak pokazano na poniższej ilustracji.

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

Aby określić filtr istniejącej subskrypcji dla tematu niestandardowego, użyj karty Filtry na stronie Subskrypcja zdarzeń.

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

Szablon usługi Azure Resource Manager

W przypadku szablonu usługi Resource Manager użyj includedEventTypes właściwości .

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

Uwaga

Aby dowiedzieć się więcej na temat tych filtrów (typów zdarzeń, tematu i zaawansowanych), zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.

Filtruj według tematu

Zdarzenia można filtrować według podmiotu w danych zdarzenia. Można określić wartość, która ma być zgodna z początkiem lub końcem tematu. Jeśli potrzebujesz większej elastyczności podczas filtrowania zdarzeń według tematu, zobacz Filtrowanie według operatorów i danych.

W poniższym przykładzie programu PowerShell utworzysz subskrypcję zdarzeń, która filtruje według początku tematu. Parametr służy -SubjectBeginsWith do ograniczania zdarzeń do tych dla określonego zasobu. Należy przekazać identyfikator zasobu sieciowej grupy zabezpieczeń.

Azure PowerShell

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

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

W następnym przykładzie programu PowerShell zostanie utworzona subskrypcja dla magazynu obiektów blob. Ogranicza zdarzenia do tych z tematem, który kończy się na .jpg.

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

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

Interfejs wiersza polecenia platformy Azure

W poniższym przykładzie interfejsu wiersza polecenia platformy Azure utworzysz subskrypcję zdarzeń filtrającą według początku tematu. Parametr służy --subject-begins-with do ograniczania zdarzeń do tych dla określonego zasobu. Należy przekazać identyfikator zasobu sieciowej grupy zabezpieczeń.

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

Następny przykład interfejsu wiersza polecenia platformy Azure tworzy subskrypcję dla magazynu obiektów blob. Ogranicza zdarzenia do tych z tematem, który kończy się na .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

W przypadku istniejącej subskrypcji zdarzeń:

  1. Na stronie Subskrypcja zdarzeń wybierz pozycję Włącz filtrowanie tematów.

  2. Wprowadź wartości dla co najmniej jednego z następujących pól: Temat zaczyna się od i Temat kończy się. W poniższych opcjach wybrano obie opcje.

    Screenshot of Event Subscription page with subject filtering example.

  3. Wybierz opcję Dopasowywanie podmiotu z uwzględnieniem wielkości liter, jeśli chcesz, aby temat zdarzenia był zgodny z określonym przypadkiem filtrów.

Podczas tworzenia subskrypcji zdarzeń użyj karty Filtry w kreatorze tworzenia.

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

Szablon usługi Azure Resource Manager

W poniższym przykładzie szablonu usługi Resource Manager utworzysz subskrypcję zdarzeń filtrającą według początku tematu. Właściwość służy subjectBeginsWith do ograniczania zdarzeń do tych dla określonego zasobu. Należy przekazać identyfikator zasobu sieciowej grupy zabezpieczeń.

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

Następny przykładowy szablon usługi Resource Manager tworzy subskrypcję dla magazynu obiektów blob. Ogranicza zdarzenia do tych z tematem, który kończy się na .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" ]
      }
    }
  }
]

Uwaga

Aby dowiedzieć się więcej na temat tych filtrów (typów zdarzeń, tematu i zaawansowanych), zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.

Filtrowanie według operatorów i danych

Aby uzyskać większą elastyczność filtrowania, można użyć operatorów i właściwości danych do filtrowania zdarzeń.

Subskrybowanie za pomocą filtrów zaawansowanych

Aby dowiedzieć się więcej o operatorach i kluczach, których można użyć do zaawansowanego filtrowania, zobacz Filtrowanie zaawansowane.

Te przykłady umożliwiają utworzenie tematu niestandardowego. Subskrybują temat niestandardowy i filtrują według wartości w obiekcie danych. Zdarzenia, które mają właściwość color ustawioną na niebieską, czerwoną lub zieloną, są wysyłane do subskrypcji.

Azure PowerShell

W przypadku programu PowerShell użyj polecenia:

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

Interfejs wiersza polecenia platformy Azure

W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia:

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

Należy zauważyć, że ustawiono datę wygaśnięcia subskrypcji.

Azure Portal

  1. Na stronie Subskrypcja zdarzeń wybierz pozycję Dodaj nowy filtr w sekcji FILTRY ZAAWANSOWANE.

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

  2. Określ klucz, operator i wartość lub wartości do porównania. W poniższym przykładzie parametr data.color jest używany jako klucz, ciąg jest w postaci operatora, a dla wartości określono wartości niebieskie, czerwone i zielone.

    Screenshot showing an example of an advanced filter.

    Uwaga

    Aby dowiedzieć się więcej na temat filtrów zaawansowanych, zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.

Testowanie filtru

Aby przetestować filtr, wyślij zdarzenie z polem koloru ustawionym na zielony. Ponieważ zielony jest jedną z wartości w filtrze, zdarzenie jest dostarczane do punktu końcowego.

Azure PowerShell

W przypadku programu PowerShell użyj polecenia:

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

Aby przetestować scenariusz, w którym zdarzenie nie jest wysyłane, wyślij zdarzenie z polem koloru ustawionym na żółty. Żółty nie jest jedną z wartości określonych w subskrypcji, więc zdarzenie nie jest dostarczane do subskrypcji.

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

Interfejs wiersza polecenia platformy Azure

W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia:

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

Aby przetestować scenariusz, w którym zdarzenie nie jest wysyłane, wyślij zdarzenie z polem koloru ustawionym na żółty. Żółty nie jest jedną z wartości określonych w subskrypcji, więc zdarzenie nie jest dostarczane do subskrypcji.

W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia:

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

Następne kroki

Aby dowiedzieć się więcej na temat filtrów (typów zdarzeń, tematu i zaawansowanych), zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.