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

Pokud vaše data události neodpovídají očekávanému schématu Event Grid,můžete k Event Grid událostí odběratelům použít . Tento článek popisuje, jak mapovat schéma na schéma Event Grid schématu.

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 vám umožňuje mapovat pole na schéma. Nebo můžete přijmout 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 mapovat pole z původní události do schématu event gridu. K přizpůsobení mapování můžete použít tři hodnoty:

  • Hodnota vstupního schématu určuje typ schématu. Dostupné možnosti jsou schéma CloudEvents, vlastní schéma událostí nebo Event Grid schématu. Výchozí hodnota je Event Grid schématu. 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 mapování výchozích hodnot určuje výchozí hodnoty pro pole v Event Grid schématu. Můžete nastavit výchozí hodnoty subject pro eventtype , a dataversion . Tento parametr se obvykle používá, když vlastní schéma neobsahuje pole, které odpovídá jednomu z těchto tří polí. Můžete například určit, že verze dat je vždy nastavená na 1.0.

  • Hodnota mapování polí mapuje pole ze schématu na schéma Event Gridu. Hodnoty zadáte v párech 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 id pro , , , , a topic eventtime subject eventtype 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 Event Grid schématu. Výchozí hodnota je Event Grid schématu.

Následující příklad se přihlásí k odběru tématu Event Gridu a používá Event Grid událostí. 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>

V dalším příkladu se 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á Event Grid událostí. 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

V dalším příkladu se 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 podívat se na výsledek mapování. Následující skript pro příspěvek události v příkladu 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 dvě odběry doručila události v různých schématech.

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

{
  "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. Pole myEventTypeField je namapované na typ události. Používají se výchozí hodnoty pro DataVersion a Subject. Objekt Data obsahuje původní pole schématu události.

Druhé předplatné použilo schéma vstupní události. Formát doručené události je následující:

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

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

Další kroky