Zuordnen benutzerdefinierter Felder zum Event Grid-Schema

Auch wenn Ihre Daten nicht dem erwarteten Event Grid-Schema entsprechen, können Sie dennoch Event Grid verwenden, um Ereignisse an Abonnenten weiterzuleiten. Dieser Artikel beschreibt, wie Sie Ihr Schema dem Event Grid-Schema zuordnen.

Ursprüngliches Ereignisschema

Angenommen, Sie verfügen über eine Anwendung, die Ereignisse in folgendem Format sendet:

[
  {
    "myEventTypeField":"Created",
    "resource":"Users/example/Messages/1000",
    "resourceData":{"someDataField1":"SomeDataFieldValue"}
  }
]

Obwohl dieses Format nicht dem erforderlichen Schema entspricht, ermöglicht Event Grid es Ihnen, Ihre Felder dem Schema zuzuordnen. Alternativ dazu können Sie die Werte auch im ursprünglichen Schema empfangen.

Erstellen eines benutzerdefinierten Themas mit zugeordneten Feldern

Wenn Sie ein benutzerdefiniertes Thema erstellen, geben Sie an, wie Felder aus Ihrem ursprünglichen Ereignis dem Event Grid-Schema zugeordnet werden sollen. Zum Anpassen der Zuordnung werden drei Werte verwendet:

  • Mit dem Wert input schema wird der Typ des Schemas angegeben. Die verfügbaren Optionen sind das CloudEvents-Schema, das benutzerdefinierte Ereignisschema und das Event Grid-Schema. Der Standardwert ist das Event Grid-Schema. Wenn Sie eine benutzerdefinierte Zuordnung zwischen Ihrem Schema und dem Event Grid-Schema erstellen, verwenden Sie das benutzerdefinierte Ereignisschema (customeventschema). Wenn Ereignisse im CloudEvents-Format vorhanden sind, verwenden Sie das CloudEvents-Schema.

  • Mit der mapping default values-Eigenschaft werden die Standardwerte für Felder im Event Grid-Schema angegeben. Sie können Standardwerte für subject, eventtype und dataversion festlegen. In der Regel verwenden Sie diesen Parameter, wenn Ihr benutzerdefiniertes Schema kein Feld enthält, das einem dieser drei Felder entspricht. Sie können z.B. angeben, dass die Dataversion immer auf 1.0 festgelegt wird.

  • Mit dem Wert mapping fields werden Felder Ihres Schemas dem Event Grid-Schema zugeordnet. Werte werden in mit Leerzeichen getrennten Schlüssel-Wert-Paaren angegeben. Verwenden Sie als Schlüsselnamen den Namen des Event Grid-Felds. Als Wert verwenden Sie den Namen Ihres Felds. Sie können Schlüsselnamen für id, topic, eventtime, subject, eventtype und dataversion verwenden.

Verwenden Sie Folgendes, um mit der Azure CLI ein benutzerdefiniertes Thema zu erstellen:

az eventgrid topic create \
  -n demotopic \
  -l eastus2 \
  -g myResourceGroup \
  --input-schema customeventschema \
  --input-mapping-fields eventType=myEventTypeField \
  --input-mapping-default-values subject=DefaultSubject dataVersion=1.0

Verwenden Sie für PowerShell Folgendes:

New-AzEventGridTopic `
  -ResourceGroupName myResourceGroup `
  -Name demotopic `
  -Location eastus2 `
  -InputSchema CustomEventSchema `
  -InputMappingField @{eventType="myEventTypeField"} `
  -InputMappingDefaultValue @{subject="DefaultSubject"; dataVersion="1.0" }

Abonnieren eines Event Grid-Themas

Wenn Sie das benutzerdefinierte Thema abonnieren, geben Sie das Schema an, das Sie für den Empfang der Ereignisse verwenden möchten. Sie geben das CloudEvents-Schema, benutzerdefinierte Ereignisschema oder Event Grid-Schema an. Der Standardwert ist das Event Grid-Schema.

Im folgenden Beispiel wird ein Event Grid-Thema abonniert und das Event Grid-Schema verwendet. Verwenden Sie für die Azure-Befehlszeilenschnittstelle den folgenden Befehl:

topicid=$(az eventgrid topic show --name demoTopic -g myResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name eventsub1 \
  --event-delivery-schema eventgridschema \
  --endpoint <endpoint_URL>

Das nächste Beispiel verwendet das Eingabeschema des Ereignisses:

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name eventsub2 \
  --event-delivery-schema custominputschema \
  --endpoint <endpoint_URL>

Im folgenden Beispiel wird ein Event Grid-Thema abonniert und das Event Grid-Schema verwendet. Verwenden Sie für PowerShell Folgendes:

$topicid = (Get-AzEventGridTopic -ResourceGroupName myResourceGroup -Name demoTopic).Id

New-AzEventGridSubscription `
  -ResourceId $topicid `
  -EventSubscriptionName eventsub1 `
  -EndpointType webhook `
  -Endpoint <endpoint-url> `
  -DeliverySchema EventGridSchema

Das nächste Beispiel verwendet das Eingabeschema des Ereignisses:

New-AzEventGridSubscription `
  -ResourceId $topicid `
  -EventSubscriptionName eventsub2 `
  -EndpointType webhook `
  -Endpoint <endpoint-url> `
  -DeliverySchema CustomInputSchema

Veröffentlichen des Ereignisses im Thema

Sie können jetzt ein Ereignis an das benutzerdefinierte Thema senden und die Ergebnisse der Zuordnung anzeigen. Das folgende Skript postet ein Ereignis im Beispielschema:

Verwenden Sie für die Azure-Befehlszeilenschnittstelle den folgenden Befehl:

endpoint=$(az eventgrid topic show --name demotopic -g myResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name demotopic -g myResourceGroup --query "key1" --output tsv)

event='[ { "myEventTypeField":"Created", "resource":"Users/example/Messages/1000", "resourceData":{"someDataField1":"SomeDataFieldValue"} } ]'

curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint

Verwenden Sie für PowerShell Folgendes:

$endpoint = (Get-AzEventGridTopic -ResourceGroupName myResourceGroup -Name demotopic).Endpoint
$keys = Get-AzEventGridTopicKey -ResourceGroupName myResourceGroup -Name demotopic

$htbody = @{
    myEventTypeField="Created"
    resource="Users/example/Messages/1000"
    resourceData= @{
        someDataField1="SomeDataFieldValue"
    }
}

$body = "["+(ConvertTo-Json $htbody)+"]"
Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

Sehen Sie sich jetzt Ihren WebHook-Endpunkt an. Die beiden Abonnements haben Ereignisse in verschiedenen Schemas übermittelt.

Das erste Abonnement hat das Event Grid-Schema verwendet. Das übermittelte Ereignis liegt in folgendem Format vor:

{
  "id": "aa5b8e2a-1235-4032-be8f-5223395b9eae",
  "eventTime": "2018-11-07T23:59:14.7997564Z",
  "eventType": "Created",
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "topic": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.EventGrid/topics/demotopic",
  "subject": "DefaultSubject",
  "data": {
    "myEventTypeField": "Created",
    "resource": "Users/example/Messages/1000",
    "resourceData": {
      "someDataField1": "SomeDataFieldValue"
    }
  }
}

Diese Felder enthalten die Zuordnungen aus dem benutzerdefinierten Thema. myEventTypeField ist EventType zugeordnet. Es werden die Standardwerte für DataVersion und Subject verwendet. Das Data-Objekt enthält die ursprünglichen Ereignisschemafelder.

Das zweite Abonnement verwendet das Eingabeereignisschema. Das übermittelte Ereignis liegt in folgendem Format vor:

{
  "myEventTypeField": "Created",
  "resource": "Users/example/Messages/1000",
  "resourceData": {
    "someDataField1": "SomeDataFieldValue"
  }
}

Beachten Sie, dass die ursprünglichen Felder übermittelt wurden.

Nächste Schritte