Aangepaste velden toewijzen aan Event Grid-schema
Als uw gebeurtenisgegevens niet overeenkomen met het verwachte Event Grid schema,kunt u nog steeds Event Grid om gebeurtenissen naar abonnees te routeer. In dit artikel wordt beschreven hoe u uw schema kunt Event Grid schema.
Oorspronkelijk gebeurtenisschema
Stel dat u een toepassing hebt die gebeurtenissen in de volgende indeling verzendt:
[
{
"myEventTypeField":"Created",
"resource":"Users/example/Messages/1000",
"resourceData":{"someDataField1":"SomeDataFieldValue"}
}
]
Hoewel deze indeling niet overeen komt met het vereiste schema, Event Grid u uw velden aan het schema toe te passen. U kunt ook de waarden in het oorspronkelijke schema ontvangen.
Aangepast onderwerp maken met aan kaart gemaakte velden
Wanneer u een aangepast onderwerp maakt, geeft u op hoe u velden van uw oorspronkelijke gebeurtenis aan het Event Grid-schema toe te wijst. Er zijn drie waarden die u gebruikt om de toewijzing aan te passen:
De waarde van het invoerschema geeft het type schema aan. De beschikbare opties zijn CloudEvents-schema, aangepast gebeurtenisschema of Event Grid schema. De standaardwaarde is Event Grid schema. Wanneer u een aangepaste toewijzing maakt tussen uw schema en het event grid-schema, gebruikt u het aangepaste gebeurtenisschema. Wanneer gebeurtenissen zich in de CloudEvents-indeling hebben, gebruikt u het CloudEvents-schema.
Met de eigenschap standaardwaarden voor toewijzing worden standaardwaarden opgegeven voor velden in het Event Grid schema. U kunt standaardwaarden instellen voor
subjecteventtype, endataversion. 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.Met de waarde voor toewijzingsvelden worden velden uit uw schema toegewezen aan het schema van het gebeurtenisraster. U geeft waarden op in door spaties gescheiden sleutel-waardeparen. Gebruik voor de sleutelnaam de naam van het veld Event Grid. Gebruik voor de waarde de naam van uw veld. U kunt sleutelnamen gebruiken voor
id, , , , entopiceventtimesubjecteventtypedataversion.
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 op. De standaardwaarde is Event Grid schema.
In het volgende voorbeeld wordt u geabonneerd op een Event Grid-onderwerp en wordt het Event Grid 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 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 leveren gebeurtenissen in verschillende schema's.
In het eerste abonnement is het 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 van het aangepaste onderwerp. myEventTypeField is aan EventType toe te staan. De standaardwaarden voor DataVersion en Subject worden gebruikt. Het gegevensobject bevat de velden van het oorspronkelijke gebeurtenisschema.
Het tweede abonnement heeft het invoergebeurtenisschema 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
- Voor informatie over gebeurtenisbezorging en nieuwe Event Grid kunt u een bericht verzenden en het opnieuw proberen.
- Zie Een inleiding tot Event Grid voor een inleiding tot Event Grid.
- Zie Aangepaste gebeurtenissen maken en Event Grid om snel aan de slag te gaan met Azure Event Grid.