Egyéni mezők leképezése Event Grid-sémára

Ha az eseményadatok nem egyeznek meg a várt Event Grid-sémával, az Eseményrács használatával továbbra is átirányíthatja az eseményt az előfizetőknek. Ez a cikk bemutatja, hogyan képezheti le a sémát az Event Grid-sémára.

Eredeti eseményséma

Tegyük fel, hogy van egy olyan alkalmazása, amely a következő formátumban küld eseményeket:

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

Bár ez a formátum nem egyezik meg a szükséges sémával, az Event Grid lehetővé teszi, hogy a mezőket a sémához rendelje. Vagy az eredeti sémában is megkaphatja az értékeket.

Egyéni témakör létrehozása leképezett mezőkkel

Egyéni témakör létrehozásakor adja meg, hogyan képezhet le mezőket az eredeti eseményről az eseményrács sémájára. A leképezés testreszabásához három érték használható:

  • A bemeneti séma értéke határozza meg a séma típusát. A rendelkezésre álló lehetőségek a CloudEvents-séma, az egyéni eseményséma vagy az Event Grid-séma. Az alapértelmezett érték az Event Grid-séma. Amikor egyéni leképezést hoz létre a séma és az eseményrácsséma között, használjon egyéni eseménysémát. Ha az események CloudEvents formátumban vannak, használja a CloudEvents sémát.

  • Az alapértelmezett értékek leképezése tulajdonság az Event Grid-séma mezőinek alapértelmezett értékeit adja meg. Az alapértelmezett értékeket a , eventtypeés dataversiona értékre subjectállíthatja be. Ezt a paramétert általában akkor használja, ha az egyéni séma nem tartalmaz olyan mezőt, amely a három mező egyikének felel meg. Megadhatja például, hogy az adatverzió mindig 1.0 legyen.

  • A leképezési mezők értéke a sémából az eseményrács sémájához rendeli a mezőket. Az értékeket szóközzel elválasztott kulcs/érték párokban adhatja meg. A kulcsnévhez használja az eseményrács mező nevét. Az értékhez használja a mező nevét. Kulcsneveket használhat a , topic, eventtime, subject, eventtypeés dataversion.id

Ha egyéni témakört szeretne létrehozni az Azure CLI-vel, használja a következőt:

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

PowerShell esetén használja az alábbi parancsot:

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

Feliratkozás az event grid-témakörre

Amikor feliratkozik az egyéni témakörre, meg kell adnia azt a sémát, amelyet az események fogadásához használni szeretne. Megadhatja a CloudEvents sémát, az egyéni eseménysémát vagy az Event Grid-sémát. Az alapértelmezett érték az Event Grid-séma.

Az alábbi példa előfizet egy eseményrács-témakörre, és az Event Grid-sémát használja. Azure CLI esetén használja az alábbi parancsot:

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>

A következő példa az esemény bemeneti sémáját használja:

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

Az alábbi példa előfizet egy eseményrács-témakörre, és az Event Grid-sémát használja. PowerShell esetén használja az alábbi parancsot:

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

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

A következő példa az esemény bemeneti sémáját használja:

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

Esemény közzététele a témában

Most már készen áll arra, hogy eseményt küldjön az egyéni témakörbe, és megtekintheti a leképezés eredményét. Az alábbi szkript egy esemény közzétételére a példasémában:

Azure CLI esetén használja az alábbi parancsot:

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

PowerShell esetén használja az alábbi parancsot:

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

Most tekintse meg a WebHook-végpontot. A két előfizetés különböző sémákban kézbesített eseményeket.

Az első előfizetés eseményrácssémát használt. A kézbesített esemény formátuma a következő:

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

Ezek a mezők az egyéni témakör leképezéseit tartalmazzák. A myEventTypeFieldeseménytípusra van leképezve. A DataVersion és a Subject alapértelmezett értékeit használja a rendszer. Az Adatobjektum tartalmazza az eredeti eseménysémamezőket.

A második előfizetés a bemeneti eseménysémát használta. A kézbesített esemény formátuma a következő:

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

Figyelje meg, hogy az eredeti mezők kézbesítése megtörtént.

Következő lépések