Sdílet prostřednictvím


Mapování vlastních polí na schéma Event Gridu

Pokud data události neodpovídají očekávanému schématu Event Gridu, můžete event grid použít ke směrování událostí k odběratelům. Tento článek popisuje, jak mapovat schéma na schéma Event Gridu.

Původní schéma události

Předpokládejme, že máte aplikaci, která odesílá události v následujícím formátu:

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

I když tento formát neodpovídá požadovanému schématu, Event Grid umožňuje namapovat pole na schéma. Nebo můžete získat hodnoty v původním schématu.

Vytvoření vlastního tématu s mapovanými poli

Při vytváření vlastního tématu určete, jak se mají mapovat pole z původní události na schéma Event Gridu. K přizpůsobení mapování můžete použít tři hodnoty:

  • Vstupní hodnota schématu určuje typ schématu. Dostupné možnosti jsou schéma CloudEvents, vlastní schéma událostí nebo schéma Event Gridu. Výchozí hodnota je schéma Event Gridu. Při vytváření vlastního mapování mezi schématem a schématem Event Gridu použijte vlastní schéma událostí. Pokud jsou události ve formátu CloudEvents, použijte schéma CloudEvents.

  • Vlastnost výchozích hodnot mapování určuje výchozí hodnoty pro pole ve schématu Event Gridu. Můžete nastavit výchozí hodnoty pro subject, eventtypea dataversion. Tento parametr se obvykle používá v případě, že vlastní schéma neobsahuje pole, které odpovídá jednomu z těchto tří polí. Můžete například určit, že verze dat bude vždy nastavená na 1.0.

  • Hodnota mapovacích polí mapuje pole z vašeho schématu na schéma Event Gridu. Hodnoty se zadávají ve dvojicích klíč/hodnota oddělených mezerami. Jako název klíče použijte název pole event gridu. Jako hodnotu použijte název pole. Názvy klíčů můžete použít pro id, , topic, eventtime, subjecteventtypea dataversion.

Pokud chcete vytvořit vlastní téma pomocí Azure CLI, použijte:

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

Pokud používáte PowerShell, použijte:

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

Přihlášení k odběru tématu Event Gridu

Při přihlášení k odběru vlastního tématu zadáte schéma, které chcete použít pro příjem událostí. Zadáte schéma CloudEvents, vlastní schéma událostí nebo schéma Event Gridu. Výchozí hodnota je schéma Event Gridu.

Následující příklad se přihlásí k odběru tématu Event Gridu a používá schéma Event Gridu. Pokud používáte Azure CLI, použijte:

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>

Další příklad používá vstupní schéma události:

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

Následující příklad se přihlásí k odběru tématu Event Gridu a používá schéma Event Gridu. Pokud používáte PowerShell, použijte:

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

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

Další příklad používá vstupní schéma události:

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

Publikování události do tématu

Teď jste připraveni odeslat událost do vlastního tématu a zobrazit výsledek mapování. Následující skript publikuje událost v ukázkovém schématu:

Pokud používáte Azure CLI, použijte:

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

Pokud používáte PowerShell, použijte:

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

Teď se podívejte na koncový bod webhooku. Tyto dva odběry doručily události v různých schématech.

První odběr používal schéma Event Gridu. Formát doručené události je:

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

Tato pole obsahují mapování z vlastního tématu. MyEventTypeField je namapovaný na Typ události. Použijí se výchozí hodnoty pro DataVersion a Subject . Objekt Data obsahuje původní pole schématu události.

Druhý odběr použil schéma vstupní události. Formát doručené události je:

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

Všimněte si, že byla doručena původní pole.

Další kroky