Filtrování událostí pro Event Grid

Tento článek ukazuje, jak filtrovat události při vytváření předplatného Event Grid předplatného. Další informace o možnostech filtrování událostí najdete v tématu Principy filtrování událostí pro Event Grid odběry.

Filtrovat podle typu události

Při vytváření Event Grid předplatného můžete určit, které typy událostí se mají odeslat do koncového bodu. Příklady v této části vytvářejí odběry událostí pro skupinu prostředků, ale omezují události odesílané do a Microsoft.Resources.ResourceWriteFailure Microsoft.Resources.ResourceWriteSuccess . Pokud při filtrování událostí podle typů událostí potřebujete větší flexibilitu, podívejte se na stránku Filtrování podle pokročilých operátorů a datových polí.

Azure PowerShell

Pro PowerShell použijte při -IncludedEventType vytváření předplatného parametr .

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

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

Azure CLI

V případě Azure CLI použijte --included-event-types parametr . Následující příklad používá Azure CLI v prostředí 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

portál Azure

  1. Na stránce Odběr události přepněte na kartu Filtry.

  2. Vedle možnosti Filtrovat na Typy událostí vyberte Přidat typ události.

    Snímek obrazovky se stránkou Odběr události a vybraným tlačítkem Přidat typ události

  3. Zadejte typ události a stiskněte ENTER. V následujícím příkladu je typ události Microsoft.Resources.ResourceWriteSuccess .

    Snímek obrazovky se stránkou Odběr události s ukázkovým typem události

Šablona Azure Resource Manageru

Pro Resource Manager šablony použijte includedEventTypes vlastnost .

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

Poznámka

Další informace o těchto filtrech (typy událostí, předmět a pokročilé) najdete v tématu Principy filtrování událostí pro Event Grid odběry.

Filtrovat podle předmětu

Události můžete filtrovat podle předmětu v datech události. Můžete zadat hodnotu, která se má shodovat pro začátek nebo konec předmětu. Pokud při filtrování událostí podle předmětu potřebujete větší flexibilitu, podívejte se na téma Filtrování podle pokročilých operátorů a datových polí.

V následujícím příkladu PowerShellu vytvoříte odběr události, který filtruje na začátku předmětu. Pomocí -SubjectBeginsWith parametru můžete omezit události na události pro konkrétní prostředek. Předáte ID prostředku skupiny zabezpečení sítě.

Azure PowerShell

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

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

Další příklad PowerShellu vytvoří předplatné pro úložiště objektů blob. Omezuje události na události s předmětem, který končí na .jpg .

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

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

Azure CLI

V následujícím příkladu Azure CLI vytvoříte odběr události, který filtruje na začátku předmětu. Pomocí --subject-begins-with parametru můžete omezit události na události pro konkrétní prostředek. Předáte ID prostředku skupiny zabezpečení sítě.

resourceId=$(az resource show --name demoSecurityGroup --resource-group myResourceGroup --resource-type Microsoft.Network/networkSecurityGroups --query id --output tsv)

az eventgrid event-subscription create \
  --name demoSubscriptionToResourceGroup \
  --resource-group myResourceGroup \
  --endpoint <endpoint-URL> \
  --subject-begins-with $resourceId

Další příklad Azure CLI vytvoří předplatné pro úložiště objektů blob. Omezuje události na události s předmětem, který končí 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"

portál Azure

  1. Na stránce Odběr události vyberte Povolit filtrování předmětu.

  2. Zadejte hodnoty pro jedno nebo více z následujících polí: Předmět začíná na a Předmět končí na. V následujících možnostech jsou vybrané obě možnosti.

    Snímek obrazovky se stránkou Odběr události s příkladem filtrování předmětu

  3. Pokud chcete, aby předmět události odpovídal velká a malá písmena zadaným filtrům, vyberte možnost Shoda předmětu rozlišují malá a velká písmena.

Šablona Azure Resource Manageru

V následujícím Resource Manager šablony vytvoříte odběr události, který filtruje na začátku předmětu. Vlastnost slouží subjectBeginsWith k omezení událostí na události pro konkrétní prostředek. Předáte ID prostředku skupiny zabezpečení sítě.

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

Další příklad Resource Manager vytvoří předplatné pro úložiště objektů blob. Omezuje události na události s předmětem, který končí 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" ]
      }
    }
  }
]

Poznámka

Další informace o těchto filtrech (typy událostí, předmět a pokročilé) najdete v tématu Principy filtrování událostí pro Event Grid odběry.

Filtrování podle operátorů a dat

Pro větší flexibilitu při filtrování můžete k filtrování událostí použít operátory a vlastnosti dat.

Přihlášení k odběru pomocí rozšířených filtrů

Další informace o operátorech a klíčích, které můžete použít pro rozšířené filtrování, najdete v tématu Rozšířené filtrování.

Tyto příklady vytvoří vlastní téma. Přihlásí se k odběru vlastního tématu a vyfiltruje hodnotu v datovém objektu. Události, které mají vlastnost color nastavenou na modrou, červenou nebo zelenou, se odesílanou do odběru.

Azure PowerShell

Pokud používáte PowerShell, použijte:

$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

Pokud používáte Azure CLI, použijte:

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

Všimněte si, že je nastavené datum vypršení platnosti odběru.

portál Azure

  1. Na stránce Odběr události vyberte v části ROZŠÍŘENÉ FILTRY možnost Přidat nový filtr.

    Snímek obrazovky zobrazující stránku Odběr události se zvýrazněnou odkazem Přidat nový filtr

  2. Zadejte klíč, operátor a hodnotu nebo hodnoty, které se mají porovnat. V následujícím příkladu se data.color používá jako klíč, String je v jako operátor a modré , červené a zelené hodnoty jsou určené pro hodnoty.

    Snímek obrazovky s příkladem rozšířeného filtru

    Poznámka

    Další informace o rozšířených filtrech najdete v tématu Principy filtrování událostí pro Event Grid předplatná.

Otestování filtru

Pokud chcete filtr otestovat, odešlete událost s polem barvy nastaveným na zelenou. Vzhledem k tomu, že zelená je jednou z hodnot ve filtru, událost se doručí do koncového bodu.

Azure PowerShell

Pokud používáte PowerShell, použijte:

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

Pokud chcete otestovat scénář, ve kterém se událost neposíleje, odešlete událost s barevným polem nastaveným na žlutou. Žlutá není jednou z hodnot zadaných v předplatném, takže se událost do vašeho předplatného doručí.

$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

Pokud používáte Azure CLI, použijte:

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

Pokud chcete otestovat scénář, ve kterém se událost neposíleje, odešlete událost s barevným polem nastaveným na žlutou. Žlutá není jednou z hodnot zadaných v předplatném, takže se událost do vašeho předplatného doručí.

Pokud používáte Azure CLI, použijte:

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

Další kroky

Další informace o filtrech (typy událostí, předmět a pokročilé) najdete v tématu Principy filtrování událostí pro Event Grid odběry.