Özel alanları Event Grid şemasına eşleme

Olay verileriniz beklenen Event Grid şemasıyla eşleşmiyorsa, olayı abonelere yönlendirmek için Event Grid'i kullanmaya devam edebilirsiniz. Bu makalede, şemanızı Event Grid şemasıyla eşleme açıklanmaktadır.

Özgün olay şeması

Olayları aşağıdaki biçimde gönderen bir uygulamanız olduğunu varsayalım:

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

Bu biçim gerekli şemayla eşleşmese de, Event Grid alanlarınızı şemayla eşlemenizi sağlar. İsterseniz, değerleri özgün şemada da alabilirsiniz.

Eşlenmiş alanlarla özel konu oluşturma

Özel bir konu oluştururken, özgün olayınızdaki alanların olay kılavuzu şemasına nasıl eşleneceğini belirtin. Eşlemeyi özelleştirmek için kullandığınız üç değer vardır:

  • Giriş şeması değeri şema türünü belirtir. Kullanılabilir seçenekler CloudEvents şeması, özel olay şeması veya Event Grid şemasıdır. Varsayılan değer Event Grid şemasıdır. Şemanız ve olay kılavuzu şemanız arasında özel eşleme oluştururken özel olay şeması kullanın. Olaylar CloudEvents biçiminde olduğunda CloudEvents şemasını kullanın.

  • Eşleme varsayılan değerleri özelliği, Event Grid şemasındaki alanlar için varsayılan değerleri belirtir. , eventtypeve dataversioniçin subjectvarsayılan değerleri ayarlayabilirsiniz. Genellikle, özel şemanız bu üç alandan birine karşılık gelen bir alan içermediğinde bu parametreyi kullanırsınız. Örneğin, veri sürümünün her zaman 1.0 olarak ayarlandığını belirtebilirsiniz.

  • Eşleme alanları değeri, alanları şemanızdan olay kılavuzu şemasına eşler. Değerleri boşlukla ayrılmış anahtar/değer çiftlerinde belirtirsiniz. Anahtar adı için olay kılavuzu alanının adını kullanın. Değer için alanınızın adını kullanın. , , topic, , subjecteventtimeeventtypeve dataversioniçin idanahtar adlarını kullanabilirsiniz.

Azure CLI ile özel bir konu oluşturmak için şunu kullanın:

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 için şunu kullanın:

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

Olay kılavuzu konusuna abone olma

Özel konuya abone olurken, olayları almak için kullanmak istediğiniz şemayı belirtirsiniz. CloudEvents şemasını, özel olay şemasını veya Event Grid şemasını belirtirsiniz. Varsayılan değer Event Grid şemasıdır.

Aşağıdaki örnek bir olay kılavuzu konusuna abonedir ve Event Grid şemasını kullanır. Azure CLI için şunu kullanın:

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>

Sonraki örnekte olayın giriş şeması kullanılır:

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

Aşağıdaki örnek bir olay kılavuzu konusuna abonedir ve Event Grid şemasını kullanır. PowerShell için şunu kullanın:

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

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

Sonraki örnekte olayın giriş şeması kullanılır:

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

Olayı konuya yayımlama

Artık özel konuya bir olay göndermeye ve eşlemenin sonucunu görmeye hazırsınız. Örnek şemada bir olay göndermek için aşağıdaki betik:

Azure CLI için şunu kullanın:

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 için şunu kullanın:

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

Şimdi Web Kancası uç noktanıza bakın. İki abonelik, olayları farklı şemalarda teslim etti.

İlk abonelik olay kılavuzu şemasını kullandı. Teslim edilen olayın biçimi:

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

Bu alanlar özel konu başlığındaki eşlemeleri içerir. myEventTypeField, EventType ile eşlendi. DataVersion ve Subject için varsayılan değerler kullanılır. Data nesnesi özgün olay şeması alanlarını içerir.

İkinci abonelik giriş olayı şemasını kullandı. Teslim edilen olayın biçimi:

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

Özgün alanların teslim edildiğine dikkat edin.

Sonraki adımlar