Mapper des champs personnalisés au schéma Event GridMap custom fields to Event Grid schema

Si vos données d’événement ne correspondent pas au schéma Event Grid attendu, vous pouvez toujours utiliser Event Grid pour acheminer l’événement vers les abonnés.If your event data doesn't match the expected Event Grid schema, you can still use Event Grid to route event to subscribers. Cet article décrit comment mapper votre schéma au schéma Event Grid.This article describes how to map your schema to the Event Grid schema.

Schéma d’événement d’origineOriginal event schema

Supposons que vous avez une application qui envoie des événements dans le format suivant :Let's suppose you have an application that sends events in the following format:

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

Bien que ce format ne corresponde pas au schéma requis, Event Grid vous permet de mapper vos champs au schéma.Although that format doesn't match the required schema, Event Grid enables you to map your fields to the schema. Ou bien, vous pouvez recevoir les valeurs dans le schéma d’origine.Or, you can receive the values in the original schema.

Créer une rubrique personnalisée avec des champs mappésCreate custom topic with mapped fields

Quand vous créez une rubrique personnalisée, spécifiez comment mapper les champs à partir de l’événement d’origine au schéma de grille d’événement.When creating a custom topic, specify how to map fields from your original event to the event grid schema. Vous disposez de trois valeurs pour personnaliser le mappage :There are three values you use to customize the mapping:

  • La valeur du schéma d’entrée spécifie le type de schéma.The input schema value specifies the type of schema. Le schéma CloudEvents, le schéma d’événement personnalisé et le schéma Event Grid sont les options disponibles.The available options are CloudEvents schema, custom event schema, or Event Grid schema. La valeur par défaut est le schéma Event Grid.The default value is Event Grid schema. Quand vous créez un mappage personnalisé entre votre schéma et le schéma de grille d’événement, utilisez le schéma d’événement personnalisé.When creating custom mapping between your schema and the event grid schema, use custom event schema. Quand les événements sont au format CloudEvents, utilisez le schéma CloudEvents.When events are in the CloudEvents format, use CloudEvents schema.

  • Le paramètre des valeurs par défaut de mappage spécifie les valeurs par défaut des champs dans le schéma Event Grid.The mapping default values property specifies default values for fields in the Event Grid schema. Vous pouvez définir des valeurs par défaut pour subject, eventtype et dataversion.You can set default values for subject, eventtype, and dataversion. En règle générale, vous utilisez ce paramètre quand votre schéma personnalisé ne contient aucun champ correspondant à l’un de ces trois champs.Typically, you use this parameter when your custom schema doesn't include a field that corresponds to one of those three fields. Par exemple, vous pouvez spécifier que le paramètre dataversion est toujours défini sur 1.0.For example, you can specify that data version is always set to 1.0.

  • La valeur des champs de mappage mappe les champs à partir de votre schéma au schéma de grille d’événement.The mapping fields value maps fields from your schema to the event grid schema. Vous spécifiez les valeurs sous la forme de paires clé/valeur séparées par des espaces.You specify values in space-separated key/value pairs. En guise de nom de clé, utilisez le nom du champ de la grille d’événement.For the key name, use the name of the event grid field. En guise de valeur, utilisez le nom de votre champ.For the value, use the name of your field. Vous pouvez utiliser des noms de clé pour id, topic, eventtime, subject, eventtype et dataversion.You can use key names for id, topic, eventtime, subject, eventtype, and dataversion.

Pour créer une rubrique personnalisée Azure CLI, utilisez :To create a custom topic with Azure CLI, use:

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

Pour PowerShell, utilisez la commande suivante :For PowerShell, use:

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

S’abonner à une rubrique de grille d’événementSubscribe to event grid topic

Durant l’abonnement à la rubrique personnalisée, vous spécifiez le schéma que vous souhaitez utiliser pour recevoir les événements.When subscribing to the custom topic, you specify the schema you would like to use for receiving the events. Vous spécifiez le schéma CloudEvents, le schéma d’événement personnalisé ou le schéma Event Grid.You specify the CloudEvents schema, custom event schema, or Event Grid schema. La valeur par défaut est le schéma Event Grid.The default value is Event Grid schema.

L’exemple suivant illustre un abonnement à une rubrique Event Grid et l’utilisation du schéma Event Grid.The following example subscribes to an event grid topic and uses the Event Grid schema. Pour l’interface de ligne de commande Azure, consultez :For Azure CLI, use:

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>

L’exemple suivant utilise le schéma d’entrée de l’événement :The next example uses the input schema of the event:

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

L’exemple suivant illustre un abonnement à une rubrique Event Grid et l’utilisation du schéma Event Grid.The following example subscribes to an event grid topic and uses the Event Grid schema. Pour PowerShell, utilisez la commande suivante :For PowerShell, use:

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

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

L’exemple suivant utilise le schéma d’entrée de l’événement :The next example uses the input schema of the event:

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

Publier un événement sur la rubriquePublish event to topic

Vous êtes maintenant prêt à envoyer un événement à la rubrique personnalisée et à voir le résultat du mappage.You're now ready to send an event to the custom topic, and see the result of the mapping. Le script suivant permet de publier un événement dans l’exemple de schéma :The following script to post an event in the example schema:

Pour l’interface de ligne de commande Azure, consultez :For Azure CLI, use:

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

Pour PowerShell, utilisez la commande suivante :For PowerShell, use:

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

À présent, examinez votre point de terminaison WebHook.Now, look at your WebHook endpoint. Les deux abonnements ont remis des événements dans des schémas différents.The two subscriptions delivered events in different schemas.

Le premier abonnement a utilisé le schéma de grille d’événement.The first subscription used event grid schema. Le format de l’événement remis est :The format of the delivered event 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"
    }
  }
}

Ces champs contiennent les mappages à partir de la rubrique personnalisée.These fields contain the mappings from the custom topic. myEventTypeField est mappé à EventType.myEventTypeField is mapped to EventType. Les valeurs par défaut pour DataVersion et Subject sont utilisées.The default values for DataVersion and Subject are used. L’objet Data contient les champs de schéma d’événement d’origine.The Data object contains the original event schema fields.

Le second abonnement a utilisé le schéma d’événement d’entrée.The second subscription used the input event schema. Le format de l’événement remis est :The format of the delivered event is:

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

Notez que les champs d’origine ont été remis.Notice that the original fields were delivered.

Étapes suivantesNext steps