Udostępnij za pośrednictwem


Mapowanie pól niestandardowych na schemat usługi Event Grid

Jeśli dane zdarzenia nie są zgodne z oczekiwanym schematem usługi Event Grid, nadal możesz użyć usługi Event Grid do kierowania zdarzeń do subskrybentów. W tym artykule opisano sposób mapowania schematu na schemat usługi Event Grid.

Oryginalny schemat zdarzeń

Załóżmy, że masz aplikację, która wysyła zdarzenia w następującym formacie:

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

Mimo że ten format nie jest zgodny z wymaganym schematem, usługa Event Grid umożliwia mapowanie pól na schemat. Możesz też otrzymać wartości w oryginalnym schemacie.

Tworzenie tematu niestandardowego przy użyciu zamapowanych pól

Podczas tworzenia tematu niestandardowego określ sposób mapowania pól z oryginalnego zdarzenia na schemat siatki zdarzeń. Istnieją trzy wartości, których używasz do dostosowywania mapowania:

  • Wartość schematu wejściowego określa typ schematu. Dostępne opcje to schemat CloudEvents, niestandardowy schemat zdarzeń lub schemat usługi Event Grid. Wartość domyślna to Schemat usługi Event Grid. Podczas tworzenia niestandardowego mapowania między schematem a schematem usługi Event Grid użyj niestandardowego schematu zdarzeń. Gdy zdarzenia są w formacie CloudEvents, użyj schematu CloudEvents.

  • Właściwość mapowania wartości domyślnych określa wartości domyślne pól w schemacie usługi Event Grid. Możesz ustawić wartości domyślne dla subjectwartości , eventtypei dataversion. Zazwyczaj ten parametr jest używany, gdy schemat niestandardowy nie zawiera pola odpowiadającego jednemu z tych trzech pól. Można na przykład określić, że wersja danych jest zawsze ustawiona na 1.0.

  • Wartość pól mapowania mapuje pola ze schematu na schemat siatki zdarzeń. Należy określić wartości w parach klucz/wartość rozdzielanych spacjami. Jako nazwę klucza użyj nazwy pola event grid. Dla wartości użyj nazwy pola. Nazwy kluczy można używać dla id, , topic, subjecteventtime, , eventtypei dataversion.

Aby utworzyć temat niestandardowy za pomocą interfejsu wiersza polecenia platformy Azure, użyj:

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

W przypadku programu PowerShell użyj polecenia:

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

Subskrybowanie tematu usługi Event Grid

Podczas subskrybowania tematu niestandardowego należy określić schemat, którego chcesz użyć do odbierania zdarzeń. Należy określić schemat CloudEvents, niestandardowy schemat zdarzeń lub schemat usługi Event Grid. Wartość domyślna to Schemat usługi Event Grid.

Poniższy przykład subskrybuje temat usługi Event Grid i używa schematu usługi Event Grid. W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia:

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>

W następnym przykładzie użyto schematu wejściowego zdarzenia:

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

Poniższy przykład subskrybuje temat usługi Event Grid i używa schematu usługi Event Grid. W przypadku programu PowerShell użyj polecenia:

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

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

W następnym przykładzie użyto schematu wejściowego zdarzenia:

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

Publikowanie zdarzenia w temacie

Teraz możesz wysłać zdarzenie do tematu niestandardowego i zobaczyć wynik mapowania. Poniższy skrypt umożliwiający opublikowanie zdarzenia w przykładowym schemacie:

W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia:

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

W przypadku programu PowerShell użyj polecenia:

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

Teraz przyjrzyj się punktowi końcowemu elementu WebHook. Dwie subskrypcje dostarczyły zdarzenia w różnych schematach.

Pierwsza subskrypcja użyła schematu usługi Event Grid. Format dostarczonego zdarzenia to:

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

Te pola zawierają mapowania z tematu niestandardowego. myEventTypeField jest mapowany na eventtype. Używane są wartości domyślne dla elementu DataVersion i Temat . Obiekt Data zawiera oryginalne pola schematu zdarzeń.

Druga subskrypcja użyła schematu zdarzeń wejściowych. Format dostarczonego zdarzenia to:

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

Zwróć uwagę, że oryginalne pola zostały dostarczone.

Następne kroki