Aangepaste velden toewijzen aan Event Grid-schema

Als uw gebeurtenisgegevens niet overeenkomen met het verwachte Event Grid-schema, kunt u Event Grid nog steeds gebruiken om gebeurtenissen naar abonnees te routeren. In dit artikel wordt beschreven hoe u uw schema toe te wijzen aan het Event Grid-schema.

Oorspronkelijk gebeurtenisschema

Stel dat u een toepassing hebt waarmee gebeurtenissen in de volgende indeling worden verzonden:

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

Hoewel deze indeling niet overeenkomt met het vereiste schema, kunt u met Event Grid uw velden toewijzen aan het schema. Of u kunt de waarden in het oorspronkelijke schema ontvangen.

Aangepast onderwerp maken met toegewezen velden

Geef bij het maken van een aangepast onderwerp op hoe velden uit de oorspronkelijke gebeurtenis moeten worden toegewezen aan het schema van het gebeurtenisraster. Er zijn drie waarden die u gebruikt om de toewijzing aan te passen:

  • De waarde van het invoerschema geeft het type schema op. De beschikbare opties zijn CloudEvents-schema, aangepast gebeurtenisschema of Event Grid-schema. De standaardwaarde is Event Grid-schema. Gebruik aangepast gebeurtenisschema wanneer u een aangepaste toewijzing maakt tussen uw schema en het Event Grid-schema. Wanneer gebeurtenissen de indeling CloudEvents hebben, gebruikt u het CloudEvents-schema.

  • De eigenschap Standaardwaarden toewijzen geeft standaardwaarden op voor velden in het Event Grid-schema. U kunt standaardwaarden instellen voor subject, eventtypeen dataversion. Normaal gesproken gebruikt u deze parameter wanneer uw aangepaste schema geen veld bevat dat overeenkomt met een van deze drie velden. U kunt bijvoorbeeld opgeven dat de gegevensversie altijd is ingesteld op 1.0.

  • De waarde van toewijzingsvelden wijst velden uit uw schema toe aan het Event Grid-schema. U geeft waarden op in door spaties gescheiden sleutel/waardeparen. Gebruik voor de sleutelnaam de naam van het gebeurtenisrasterveld. Gebruik voor de waarde de naam van het veld. U kunt sleutelnamen gebruiken voor id, topic, eventtime, subject, eventtypeen dataversion.

Als u een aangepast onderwerp wilt maken met Azure CLI, gebruikt u:

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

Gebruik voor PowerShell:

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

Abonneren op event grid-onderwerp

Wanneer u zich abonneert op het aangepaste onderwerp, geeft u het schema op dat u wilt gebruiken voor het ontvangen van de gebeurtenissen. U geeft het CloudEvents-schema, het aangepaste gebeurtenisschema of het Event Grid-schema op. De standaardwaarde is Event Grid-schema.

In het volgende voorbeeld wordt u geabonneerd op een Event Grid-onderwerp en wordt het Event Grid-schema gebruikt. Gebruik voor Azure CLI:

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>

In het volgende voorbeeld wordt het invoerschema van de gebeurtenis gebruikt:

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

In het volgende voorbeeld wordt u geabonneerd op een Event Grid-onderwerp en wordt het Event Grid-schema gebruikt. Gebruik voor PowerShell:

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

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

In het volgende voorbeeld wordt het invoerschema van de gebeurtenis gebruikt:

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

Gebeurtenis publiceren naar onderwerp

U bent nu klaar om een gebeurtenis naar het aangepaste onderwerp te verzenden en het resultaat van de toewijzing te bekijken. Het volgende script om een gebeurtenis in het voorbeeldschema te plaatsen:

Gebruik voor Azure CLI:

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

Gebruik voor PowerShell:

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

Bekijk nu uw WebHook-eindpunt. De twee abonnementen hebben gebeurtenissen in verschillende schema's geleverd.

Het eerste abonnement heeft een Event Grid-schema gebruikt. De indeling van de geleverde gebeurtenis is:

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

Deze velden bevatten de toewijzingen uit het aangepaste onderwerp. myEventTypeField is toegewezen aan EventType. De standaardwaarden voor DataVersion en Subject worden gebruikt. Het object Data bevat de oorspronkelijke gebeurtenisschemavelden.

Het tweede abonnement heeft het gebeurtenisschema voor invoer gebruikt. De indeling van de geleverde gebeurtenis is:

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

U ziet dat de oorspronkelijke velden zijn geleverd.

Volgende stappen