Mapear campos personalizados no esquema do Event Grid
Se os dados do evento não corresponderem ao esquema esperado do Event Grid, ainda pode utilizar o Event Grid para encaminhar eventos para subscritores. Este artigo descreve como mapear o esquema para o esquema do Event Grid.
Esquema de evento original
Vamos supor que tem uma aplicação que envia eventos no seguinte formato:
[
{
"myEventTypeField":"Created",
"resource":"Users/example/Messages/1000",
"resourceData":{"someDataField1":"SomeDataFieldValue"}
}
]
Embora esse formato não corresponda ao esquema necessário, o Event Grid permite-lhe mapear os campos para o esquema. Em alternativa, pode receber os valores no esquema original.
Criar um tópico personalizado com campos mapeados
Ao criar um tópico personalizado, especifique como mapear campos do seu evento original para o esquema do event grid. Existem três valores que utiliza para personalizar o mapeamento:
O valor do esquema de entrada especifica o tipo de esquema. As opções disponíveis são o esquema CloudEvents, o esquema de eventos personalizado ou o esquema do Event Grid. O valor predefinido é o esquema do Event Grid. Ao criar um mapeamento personalizado entre o esquema e o esquema do event grid, utilize o esquema de eventos personalizado. Quando os eventos estiverem no formato CloudEvents, utilize o esquema CloudEvents.
A propriedade de valores predefinidos de mapeamento especifica valores predefinidos para campos no esquema do Event Grid. Pode definir valores predefinidos para
subject
,eventtype
edataversion
. Normalmente, utiliza este parâmetro quando o esquema personalizado não inclui um campo que corresponda a um desses três campos. Por exemplo, pode especificar que a versão de dados está sempre definida como 1.0.O valor dos campos de mapeamento mapeia campos do esquema para o esquema da grelha de eventos. Especifique valores em pares chave/valor separados por espaços. Para o nome da chave, utilize o nome do campo event grid. Para o valor, utilize o nome do seu campo. Pode utilizar nomes de chaves para
id
,topic
,eventtime
,subject
,eventtype
edataversion
.
Para criar um tópico personalizado com a CLI do Azure, utilize:
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
Para o PowerShell, utilize:
New-AzEventGridTopic `
-ResourceGroupName myResourceGroup `
-Name demotopic `
-Location eastus2 `
-InputSchema CustomEventSchema `
-InputMappingField @{eventType="myEventTypeField"} `
-InputMappingDefaultValue @{subject="DefaultSubject"; dataVersion="1.0" }
Subscreva o tópico do Event Grid
Ao subscrever o tópico personalizado, especifique o esquema que pretende utilizar para receber os eventos. Especifique o esquema CloudEvents, o esquema de eventos personalizado ou o esquema do Event Grid. O valor predefinido é o esquema do Event Grid.
O exemplo seguinte subscreve um tópico do Event Grid e utiliza o esquema do Event Grid. Na CLI do Azure, utilize:
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>
O exemplo seguinte utiliza o esquema de entrada do evento:
az eventgrid event-subscription create \
--source-resource-id $topicid \
--name eventsub2 \
--event-delivery-schema custominputschema \
--endpoint <endpoint_URL>
O exemplo seguinte subscreve um tópico do Event Grid e utiliza o esquema do Event Grid. Para o PowerShell, utilize:
$topicid = (Get-AzEventGridTopic -ResourceGroupName myResourceGroup -Name demoTopic).Id
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName eventsub1 `
-EndpointType webhook `
-Endpoint <endpoint-url> `
-DeliverySchema EventGridSchema
O exemplo seguinte utiliza o esquema de entrada do evento:
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName eventsub2 `
-EndpointType webhook `
-Endpoint <endpoint-url> `
-DeliverySchema CustomInputSchema
Publicar evento no tópico
Agora, está pronto para enviar um evento para o tópico personalizado e ver o resultado do mapeamento. O seguinte script para publicar um evento no esquema de exemplo:
Na CLI do Azure, utilize:
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
Para o PowerShell, utilize:
$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}
Agora, observe o ponto final do WebHook. As duas subscrições entregaram eventos em esquemas diferentes.
A primeira subscrição utilizou o esquema do event grid. O formato do evento entregue é:
{
"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"
}
}
}
Estes campos contêm os mapeamentos do tópico personalizado. myEventTypeField está mapeado para EventType. São utilizados os valores predefinidos para DataVersion e Subject . O objeto Dados contém os campos de esquema de eventos originais.
A segunda subscrição utilizou o esquema de evento de entrada. O formato do evento entregue é:
{
"myEventTypeField": "Created",
"resource": "Users/example/Messages/1000",
"resourceData": {
"someDataField1": "SomeDataFieldValue"
}
}
Repare que os campos originais foram entregues.
Passos seguintes
- Para obter informações sobre a entrega e repetições de eventos, entrega e repetição de mensagens do Event Grid.
- Para obter uma introdução ao Event Grid, veja Sobre o Azure Event Grid.
- Para começar a utilizar rapidamente o Event Grid, veja Criar e encaminhar eventos personalizados com Azure Event Grid.