Compartilhar via


Gerenciar tópicos e publicar eventos usando domínios de eventos

Este artigo mostra como:

  • Criar um domínio de Grade de Eventos
  • Assinar tópicos da Grade de Eventos
  • Listar chaves
  • Publicar eventos em um domínio

Para saber mais sobre domínios de eventos, consulte Entender os domínios de eventos para gerenciar tópicos da Grade de Eventos.

Crie um domínio de evento

Para gerenciar grandes conjuntos de tópicos, crie um domínio de evento.

az eventgrid domain create \
  -g <my-resource-group> \
  --name <my-domain-name> \
  -l <location>

A criação com êxito retornará os seguintes valores:

{
  "endpoint": "https://<my-domain-name>.westus2-1.eventgrid.azure.net/api/events",
  "id": "/subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>",
  "inputSchema": "EventGridSchema",
  "inputSchemaMapping": null,
  "location": "westus2",
  "name": "<my-domain-name>",
  "provisioningState": "Succeeded",
  "resourceGroup": "<my-resource-group>",
  "tags": null,
  "type": "Microsoft.EventGrid/domains"
}

Observe que endpoint e id são necessários para gerenciar o domínio e publicar eventos.

Gerenciar o acesso aos tópicos

O gerenciamento de acesso aos tópicos é feito por meio da atribuição de função. A atribuição de função usa o controle de acesso baseado em função do Azure para limitar as operações nos recursos do Azure a usuários autorizados em um determinado escopo.

A Grade de Eventos possui duas funções internas que podem ser utilizadas para atribuir acesso de usuários específicos a vários tópicos em um domínio. Essas funções são EventGrid EventSubscription Contributor (Preview), o que permite a criação e exclusão de assinaturas, e EventGrid EventSubscription Reader (Preview), que permite apenas a listagem de assinaturas de eventos.

O comando da CLI do Azure a seguir limita alice@contoso.com para criação e exclusão de assinaturas de eventos apenas no tópico demotopic1:

az role assignment create \
  --assignee alice@contoso.com \
  --role "EventGrid EventSubscription Contributor (Preview)" \
  --scope /subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>/topics/demotopic1

Para obter mais informações sobre como gerenciar o acesso às operações da Grade de Eventos, consulte Segurança e autenticação da Grade de Eventos.

Criar tópicos e assinaturas

O serviço Grade de Eventos cria e gerencia automaticamente o tópico correspondente em um domínio com base na chamada para criar uma assinatura de evento para um tópico de domínio. Não há uma etapa separada para criar um tópico em um domínio. Da mesma forma, quando a última assinatura de evento de um tópico é excluída, o tópico também é excluído.

Assinar um tópico em um domínio é o mesmo que assinar qualquer outro recurso do Azure. Para a ID do recurso de origem, especifique a ID de domínio do evento retornado ao criar o domínio anteriormente. Para especificar o tópico que você quer assinar, adicione /topics/<my-topic> ao final da ID do recurso de origem. Para criar uma assinatura de evento de escopo de domínio que receba todos os eventos no domínio, especifique a ID de domínio do evento sem especificar nenhum tópico.

Normalmente, o usuário a quem você concedeu acesso na seção anterior criaria a assinatura. Para simplificar este artigo, você cria a assinatura.

az eventgrid event-subscription create \
  --name <event-subscription> \
  --source-resource-id "/subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>/topics/demotopic1" \
  --endpoint https://contoso.azurewebsites.net/api/updates

Se você precisar ter um teste de ponto de extremidade para assinar seus eventos, poderá sempre implantar um aplicativo Web predefinido que exiba os eventos de entrada. Você pode enviar seus eventos para o website de teste em https://<your-site-name>.azurewebsites.net/api/updates.

Botão para implantar o modelo do Resource Manager no Azure.

As permissões definidas para um tópico são armazenadas no Microsoft Entra ID e precisam ser excluídas explicitamente. A exclusão de uma assinatura de evento não revoga o acesso de um usuário para criar assinaturas de eventos, caso ele tenha acesso de gravação em um tópico.

Publicar eventos em um domínio da Grade de Eventos

Publicar eventos em um domínio é o mesmo que publicar em um tópico personalizado. No entanto, em vez de publicar para o tópico personalizado, publique todos os eventos para o ponto de extremidade de domínio. Nos dados de evento do JSON, especifique o tópico que deseja que os eventos sejam destinados. A seguinte matriz de eventos resultaria em evento com "id": "1111"para o tópicodemotopic1, enquanto o evento com "id": "2222"seria enviado para o tópicodemotopic2:

[{
  "topic": "demotopic1",
  "id": "1111",
  "eventType": "maintenanceRequested",
  "subject": "myapp/vehicles/diggers",
  "eventTime": "2018-10-30T21:03:07+00:00",
  "data": {
    "make": "Contoso",
    "model": "Small Digger"
  },
  "dataVersion": "1.0"
},
{
  "topic": "demotopic2",
  "id": "2222",
  "eventType": "maintenanceCompleted",
  "subject": "myapp/vehicles/tractors",
  "eventTime": "2018-10-30T21:04:12+00:00",
  "data": {
    "make": "Contoso",
    "model": "Big Tractor"
  },
  "dataVersion": "1.0"
}]

Para obter o ponto de extremidade de domínio com a CLI do Azure, use

az eventgrid domain show \
  -g <my-resource-group> \
  -n <my-domain>

Para obter as chaves para um domínio, use:

az eventgrid domain key list \
  -g <my-resource-group> \
  -n <my-domain>

E, em seguida, use seu método favorito de fazer um HTTP POST para publicar os eventos no domínio da Grade de Eventos.

Observação

Para ver amostras que usam os SDKs de linguagem de programação a fim de publicar eventos em um domínio da Grade de Eventos, use os seguintes links:

Pesquisar listas de tópicos ou assinaturas

Para pesquisar e gerenciar um grande número de tópicos ou assinaturas, as APIs da Grade de Eventos dão suporte à listagem e à paginação.

Usando a CLI

Por exemplo, o comando a seguir lista todos os tópicos com nome que contém mytopic.

az eventgrid topic list --odata-query "contains(name, 'mytopic')"

Para obter mais informações sobre esse comando, consulte az eventgrid topic list.

Próximas etapas