Mappa anpassade fält till ett Event Grid-schema
Om dina händelsedata inte matchar det förväntade Event Grid-schemat kan du fortfarande använda Event Grid för att dirigera händelsen till prenumeranter. Den här artikeln beskriver hur du mappar schemat till Event Grid-schemat.
Ursprungligt händelseschema
Anta att du har ett program som skickar händelser i följande format:
[
{
"myEventTypeField":"Created",
"resource":"Users/example/Messages/1000",
"resourceData":{"someDataField1":"SomeDataFieldValue"}
}
]
Även om formatet inte matchar det schema som krävs kan du mappa fälten till schemat med Event Grid. Eller så kan du ta emot värdena i det ursprungliga schemat.
Skapa anpassat ämne med mappade fält
När du skapar ett anpassat ämne anger du hur du mappar fält från den ursprungliga händelsen till event grid-schemat. Det finns tre värden som du använder för att anpassa mappningen:
Indataschemavärdet anger typ av schema. De tillgängliga alternativen är CloudEvents-schema, anpassat händelseschema eller Event Grid-schema. Standardvärdet är Event Grid-schema. När du skapar anpassad mappning mellan schemat och event grid-schemat använder du anpassat händelseschema. När händelser är i CloudEvents-format använder du CloudEvents-schemat.
Egenskapen mappning av standardvärden anger standardvärden för fält i Event Grid-schemat. Du kan ange standardvärden för
subject
,eventtype
ochdataversion
. Vanligtvis använder du den här parametern när ditt anpassade schema inte innehåller ett fält som motsvarar ett av dessa tre fält. Du kan till exempel ange att dataversionen alltid är inställd på 1.0.Mappningsfälten mappar fält från schemat till schemat för händelserutnät. Du anger värden i blankstegsavgränsade nyckel-/värdepar. För nyckelnamnet använder du namnet på händelserutnätfältet. För värdet använder du namnet på fältet. Du kan använda nyckelnamn för
id
,topic
,eventtime
,subject
,eventtype
ochdataversion
.
Om du vill skapa ett anpassat ämne med Azure CLI använder du:
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
Om du använder PowerShell använder du:
New-AzEventGridTopic `
-ResourceGroupName myResourceGroup `
-Name demotopic `
-Location eastus2 `
-InputSchema CustomEventSchema `
-InputMappingField @{eventType="myEventTypeField"} `
-InputMappingDefaultValue @{subject="DefaultSubject"; dataVersion="1.0" }
Prenumerera på event grid-ämne
När du prenumererar på det anpassade ämnet anger du det schema som du vill använda för att ta emot händelserna. Du anger CloudEvents-schemat, det anpassade händelseschemat eller Event Grid-schemat. Standardvärdet är Event Grid-schema.
I följande exempel prenumererar du på ett event grid-ämne och använder Event Grid-schemat. Om du använder Azure CLI använder du:
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>
I nästa exempel används indataschemat för händelsen:
az eventgrid event-subscription create \
--source-resource-id $topicid \
--name eventsub2 \
--event-delivery-schema custominputschema \
--endpoint <endpoint_URL>
I följande exempel prenumererar du på ett event grid-ämne och använder Event Grid-schemat. Om du använder PowerShell använder du:
$topicid = (Get-AzEventGridTopic -ResourceGroupName myResourceGroup -Name demoTopic).Id
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName eventsub1 `
-EndpointType webhook `
-Endpoint <endpoint-url> `
-DeliverySchema EventGridSchema
I nästa exempel används indataschemat för händelsen:
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName eventsub2 `
-EndpointType webhook `
-Endpoint <endpoint-url> `
-DeliverySchema CustomInputSchema
Publicera händelse till ämne
Nu är du redo att skicka en händelse till det anpassade ämnet och se resultatet av mappningen. Följande skript för att publicera en händelse i exempelschemat:
Om du använder Azure CLI använder du:
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
Om du använder PowerShell använder du:
$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}
Titta nu på din WebHook-slutpunkt. De två prenumerationerna levererade händelser i olika scheman.
Den första prenumerationen använde event grid-schema. Formatet för den levererade händelsen är:
{
"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"
}
}
}
De här fälten innehåller mappningarna från det anpassade ämnet. myEventTypeField mappas till EventType. Standardvärdena för DataVersion och Subject används. Dataobjektet innehåller de ursprungliga händelseschemafälten.
Den andra prenumerationen använde indatahändelseschemat. Formatet för den levererade händelsen är:
{
"myEventTypeField": "Created",
"resource": "Users/example/Messages/1000",
"resourceData": {
"someDataField1": "SomeDataFieldValue"
}
}
Observera att de ursprungliga fälten levererades.
Nästa steg
- Information om händelseleverans och återförsök finns i Leverans av Event Grid-meddelanden och återförsök.
- En introduktion till Event Grid finns i Om Event Grid.
- Information om hur du snabbt kommer igång med Event Grid finns i Skapa och dirigera anpassade händelser med Azure Event Grid.