Share via


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

Este artigo mostra como:

  • Criar um domínio de Grade de Eventos
  • Inscrever-se nos tópicos da Grade de Eventos
  • Listar chaves
  • Publicar eventos em um domínio

Para saber mais sobre domínios de evento, consulte Compreender domínios de evento para gerenciar tópicos de Grade de Eventos.

Criar 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 bem-sucedida retorna 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 o endpoint e id como eles são necessários para gerenciar o domínio e publicar eventos.

Gerenciar o acesso a tópicos

O gerenciamento do acesso aos tópicos é feito por meio da atribuição de funções. 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 tem duas funções internas, que você pode usar para atribuir acesso a usuários específicos em vários tópicos dentro de um domínio. Essas funções são EventGrid EventSubscription Contributor (Preview), que permite a criação e exclusão de assinaturas e EventGrid EventSubscription Reader (Preview), que só permite a listagem de assinaturas de eventos.

O comando da CLI do Azure a seguir limita alice@contoso.com a criação e exclusão de assinaturas de eventos somente 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 para operações de Grade de Eventos, consulte Segurança e autenticação de Grade de Eventos.

Criar tópicos e subscrições

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á nenhuma etapa separada para criar um tópico em um domínio. Da mesma forma, quando a última assinatura de evento para um tópico é excluída, o tópico também é excluído.

Subscrever um tópico num domínio é o mesmo que subscrever qualquer outro recurso do Azure. Para o ID do recurso de origem, especifique o ID do domínio do evento retornado ao criar o domínio anteriormente. Para especificar o tópico que você deseja assinar, adicione /topics/<my-topic> ao final do 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 do domínio do evento sem especificar nenhum tópico.

Normalmente, o usuário ao qual você concedeu acesso na seção anterior criaria a assinatura. Para simplificar este artigo, crie 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 precisar de um ponto de extremidade de teste para inscrever seus eventos, você sempre poderá implantar um aplicativo Web pré-criado que exiba os eventos de entrada. Você pode enviar seus eventos para o site de teste em https://<your-site-name>.azurewebsites.net/api/updates.

Button to deploy the Resource Manager template to Azure.

As permissões definidas para um tópico são armazenadas no Microsoft Entra ID e devem 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 evento se ele tiver 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 no tópico personalizado, você publica todos os eventos no ponto de extremidade do domínio. Nos dados do evento JSON, você especifica o tópico para o qual deseja que os eventos sejam direcionados. A seguinte matriz de eventos resultaria em evento com "id": "1111" tópico enquanto evento demotopic1 com "id": "2222" seria enviado para tópico demotopic2:

[{
  "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 do domínio com a CLI do Azure, use

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

Para obter as chaves de 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 criar um HTTP POST para publicar seus eventos no domínio da Grade de Eventos.

Nota

Para exemplos que usam SDKs de linguagem de programação para publicar eventos em um domínio de Grade de Eventos, use os seguintes links:

Pesquisar listas de tópicos ou subscrições

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

Com a CLI

Por exemplo, o comando a seguir lista todos os tópicos com nome contendo mytopic.

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

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

Próximos passos