筛选事件网格的事件

本文介绍如何在创建事件网格订阅时筛选事件。 若要了解事件筛选的选项,请参阅了解事件网格订阅的事件筛选

按事件类型筛选

创建事件网格订阅时,可以指定要发送到终结点的事件类型。 本部分中的示例创建资源组的事件订阅,但会限制发送到 Microsoft.Resources.ResourceWriteFailureMicrosoft.Resources.ResourceWriteSuccess 的事件。 如果在按事件类型筛选事件时需要更多灵活性,请参阅按高级运算符和数据字段筛选。

Azure PowerShell

对于 PowerShell,请在创建订阅时使用 -IncludedEventType 参数。

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

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

Azure CLI

对于 Azure CLI,请使用 --included-event-types 参数。 以下示例在 Bash shell 中使用 Azure CLI:

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

az eventgrid event-subscription create \
  --name demoSubToResourceGroup \
  --source-resource-id <resouce-ID> \
  --endpoint <endpoint-URL> \
  --included-event-types $includedEventTypes

Azure 门户

  1. 在“事件订阅”页上,切换到“筛选器”选项卡。

  2. 选择“事件类型筛选器”旁边的“添加事件类型”。 。

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

  3. 键入事件类型,然后按 ENTER。 在以下示例中,事件类型为 Microsoft.Resources.ResourceWriteSuccess

    Screenshot of the Event Subscription page with a sample event type.

Azure 资源管理器模板

对于资源管理器模板,请使用 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"
        ]
      }
    }
  }
]

注意

若要详细了解这些筛选器(事件类型、主题和高级),请参阅了解事件网格订阅的事件筛选

按主题筛选

可以按事件数据中的主题筛选事件。 可以指定一个值来匹配主题的开头或结尾。 如果在按主题筛选事件时需要更多灵活性,请参阅按高级运算符和数据字段筛选。

在以下 PowerShell 示例中,会创建一个按主题开头筛选的事件订阅。 使用 -SubjectBeginsWith 参数将事件限制为特定资源的事件。 然后传递网络安全组的资源 ID。

Azure PowerShell

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

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

下一个 PowerShell 示例创建 blob 存储的订阅。 其中将事件限制为主题以 .jpg 结尾的事件。

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

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

Azure CLI

在以下 Azure CLI 示例中,会创建一个按主题开头筛选的事件订阅。 使用 --subject-begins-with 参数将事件限制为特定资源的事件。 然后传递网络安全组的资源 ID。

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 \
  --source-resource-id <resouce-ID> \
  --endpoint <endpoint-URL> \
  --subject-begins-with $resourceId

下一个 Azure CLI 示例创建 blob 存储的订阅。 其中将事件限制为主题以 .jpg 结尾的事件。

storageid=$(az storage account show --name $storageName --resource-group myResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $storageid \
  --name demoSubToStorage \
  --endpoint <endpoint-URL> \
  --subject-ends-with ".jpg"

Azure 门户

  1. 在“事件订阅”页上选择“启用主题筛选”。

  2. 为以下一个或多个字段输入值:“主题开头为”和“主题结尾为”。 在以下选项中,选择两个选项。

    Screenshot of Event Subscription page with subject filtering example.

  3. 如果希望事件的主题与指定的筛选器的大小写匹配,选择“区分大小写的主题匹配”选项。

Azure 资源管理器模板

在以下资源管理器模板示例中,会创建一个按主题开头筛选的事件订阅。 使用 subjectBeginsWith 属性将事件限制为特定资源的事件。 然后传递网络安全组的资源 ID。

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

下一个资源管理模板示例创建 blob 存储的订阅。 其中将事件限制为主题以 .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" ]
      }
    }
  }
]

注意

若要详细了解这些筛选器(事件类型、主题和高级),请参阅了解事件网格订阅的事件筛选

按运算符和数据进行筛选

为提高筛选灵活性,可以使用运算符和数据属性来筛选事件。

订阅高级筛选器

若要了解可用于高级筛选的运算符和密钥,请参阅高级筛选

这些示例创建自定义主题。 它们订阅自定义主题,并按数据对象中的值进行筛选。 将颜色属性设置为“蓝色”、“红色”或“绿色”的事件会发送到订阅。

Azure PowerShell

对于 PowerShell,请使用:

$topicName = <your-topic-name>
$endpointURL = <endpoint-URL>

New-AzResourceGroup -Name gridResourceGroup -Location chinaeast2
New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location chinaeast2 -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

对于 Azure CLI,请使用:

topicName=<your-topic-name>
endpointURL=<endpoint-URL>

az group create -n gridResourceGroup -l chinaeast2
az eventgrid topic create --name $topicName -l chinaeast2 -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>"

请注意为订阅设置到期日期

Azure 门户

  1. 在“事件订阅”页上,选择“高级筛选器”部分中的“添加新筛选器”。

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

  2. 指定要比较的密钥、运算符和值。 在以下示例中,“data.color”用作密钥,“字符串在”用作运算符,而“蓝色”、“红色”和“绿色”值为指定的值。

    Screenshot showing an example of an advanced filter.

    注意

    若要详细了解高级筛选器,请参阅了解事件网格订阅的事件筛选

测试筛选器

若要测试筛选器,请发送将颜色字段设置为“绿色”的事件。 由于绿色是筛选器中的值之一,因此该事件将传递到终结点。

Azure PowerShell

对于 PowerShell,请使用:

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

若要测试未发送事件的情形,请发送将颜色字段设置为“黄色”的事件。 “黄色”不是订阅中所指定的其中一个值,因此不会将事件发送到订阅。

$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

对于 Azure CLI,请使用:

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

若要测试未发送事件的情形,请发送将颜色字段设置为“黄色”的事件。 “黄色”不是订阅中所指定的其中一个值,因此不会将事件发送到订阅。

对于 Azure CLI,请使用:

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

后续步骤

若要详细了解筛选器(事件类型、主题和高级),请参阅了解事件网格订阅的事件筛选