Compartilhar via


Entregar eventos aos Hubs de Eventos do Azure usando tópicos de namespace – CLI do Azure

O artigo fornece instruções passo a passo para publicar eventos na Grade de Eventos do Azure no formato JSON do CloudEvents e entregar esses eventos usando o modelo de entrega por push. Para ser específico, você usará a CLI do Azure e o Curl para publicar eventos em um tópico de namespace na Grade de Eventos e efetuar push desses eventos de uma assinatura de evento para um destino do manipulador dos Hubs de Eventos. Para obter mais informações sobre o modelo de entrega por push, confira Visão geral da entrega por push.

Observação

A extensão Grade de Eventos do Azure CLI ainda não tem suporte para namespaces e nenhum dos recursos que ela contém. Usaremos o recurso da CLI do Azure para criar recursos da Grade de Eventos.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Bash no Azure Cloud Shell.

  • Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.

    • Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.

  • Este artigo exige a versão 2.0.70 ou posterior da CLI do Azure. Se você está usando o Azure Cloud Shell, a versão mais recente já está instalada.

Habilitar o provedor de recursos da Grade de Eventos

  1. Se você ainda não tiver usado a Grade de Eventos em sua assinatura do Azure, talvez seja necessário registrar o provedor de recursos desse serviço. Execute o seguinte comando para registrar o provedor:

    az provider register --namespace Microsoft.EventGrid
    
  2. A conclusão do registro pode demorar um pouco. Para verificar o status, execute o seguinte comando:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    Quando registrationState for Registered, você está pronto para continuar.

Criar um grupos de recursos

Crie um grupo de recursos do Azure com o comando az group create. Você usa esse grupo de recursos para conter todos os recursos criados neste artigo.

As etapas gerais para usar o Cloud Shell para executar comandos são:

  • Selecione Abrir Cloud Shell para ver uma janela do Azure Cloud Shell no painel direito.
  • Copie e cole o comando na janela do Azure Cloud Shell.
  • Pressione Enter para executar o comando.
  1. Declare uma variável para manter o nome de um grupo de recursos do Azure. Especifique um nome para o grupo de recursos, substituindo <your-resource-group-name> por um valor de sua preferência.

    resource_group="<your-resource-group-name>"
    
    location="<your-resource-group-location>"
    
  2. Crie um grupos de recursos. Altere o local conforme desejar.

    az group create --name $resource_group --location $location
    

Criar um namespace

Um namespace da Grade de Eventos fornece um ponto de extremidade definido pelo usuário no qual você posta seus eventos. O exemplo a seguir cria um namespace no grupo de recursos usando o Bash no Azure Cloud Shell. O nome do namespace precisa ser exclusivo porque faz parte de uma entrada DNS (Sistema de Nomes de Domínio). Um nome de namespace deve atender às seguintes regras:

  • Ele deve ter entre 3 e 50 caracteres.
  • Ele deve ser exclusivo da região.
  • Os únicos caracteres permitidos são a-z, A-Z, 0-9 e -
  • Ele não deve começar com prefixos de palavra-chave reservados, como Microsoft, System ou EventGrid.
  1. Declare uma variável para manter o nome do seu namespace de Grade de Eventos. Especifique um nome para o namespace substituindo <your-namespace-name> por um valor de sua preferência.

    namespace="<your-namespace-name>"
    
  2. Criar um namespace. O ideal é alterar o local em que ele é implantado.

    az eventgrid namespace create -g $resource_group -n $namespace -l $location
    

Criar um tópico de namespace

Crie um tópico que seja usado para conter todos os eventos publicados no ponto de extremidade do namespace.

  1. Declare uma variável para manter o nome do tópico do namespace. Especifique um nome para o tópico do namespace substituindo <your-topic-name> por um valor de sua preferência.

    topic="<your-topic-name>"
    
  2. Crie o tópico de namespace:

    az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace 
    

Criar um novo recurso dos Hubs de Eventos

Crie um recurso de Hubs de Eventos que seja usado como destino do manipulador para a assinatura de entrega por push do tópico do namespace.

  1. Declare uma variável para manter o nome do namespace dos Hubs de Eventos.

    eventHubsNamespace="<your-event-hubs-namespace-name>"
    
  2. Crie o namespace dos Hubs de Eventos.

    az eventhubs namespace create --resource-group $resource_group --name $eventHubsNamespace --location $location  
    
  3. Declare uma variável para manter o nome do hub de eventos.

    eventHubsEventHub="<your-event-hub-name>"
    
  4. Execute o comando a seguir para criar um hub de eventos no namespace.

    az eventhubs eventhub create --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub 
    

Entregar eventos aos Hubs de Eventos usando a identidade gerenciada

Para entregar eventos aos Hubs de Eventos no namespace dos Hubs de Eventos usando a identidade gerenciada, siga estas etapas:

  1. Habilite a identidade gerenciada atribuída pelo sistema ou pelo usuário: namespaces. Continue lendo a próxima seção para saber como habilitar a identidade gerenciada usando a CLI do Azure.
  2. Adicionar a identidade à função Remetente de Dados dos Hubs de Eventos do Azure no namespace dos Hubs de Eventos, continue lendo até a próxima seção para descobrir como adicionar a atribuição de função.
  3. Habilita permitir que os serviços de a configuração confiavéis da Microsoft ignorem essa configuração de firewall em seu namespace de Hubs de Eventos.
  4. Configure a assinatura do evento que usa um Hub de Eventos como um ponto de extremidade para usar a identidade gerenciada atribuída pelo sistema ou pelo usuário.

Habilitar a identidade gerenciada para o namespace da Grade de Eventos

Habilite a identidade gerenciada atribuída pelo sistema no namespace da Grade de Eventos.

az eventgrid namespace update --resource-group $resource_group --name $namespace --identity {type:systemassigned}

Adicionar atribuição de função nos Hubs de Eventos para a identidade gerenciada da Grade de Eventos

  1. Obtenha a ID da entidade de segurança da identidade gerenciada do sistema de namespace da Grade de Eventos.

    principalId=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query identity.principalId -o tsv)
    
  2. Obter a ID do recurso do hub de eventos dos Hubs de Eventos.

    eventHubResourceId=$(az eventhubs eventhub show --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub --query id -o tsv)
    
  3. Adicionar atribuição de função nos Hubs de Eventos para a identidade gerenciada do sistema da Grade de Eventos.

    az role assignment create --role "Azure Event Hubs Data Sender" --assignee $principalId --scope $eventHubResourceId
    

Criar uma assinatura de evento

Crie uma nova assinatura de evento de entrega por push.

event_subscription="<your_event_subscription_name>"
az resource create --api-version 2023-06-01-preview --resource-group $resource_group --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $event_subscription --parent namespaces/$namespace/topics/$topic --location $location --properties "{\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"maxDeliveryCount\":10,\"deliveryWithResourceIdentity\":{\"identity\":{\"type\":\"SystemAssigned\"},\"destination\":{\"endpointType\":\"EventHub\",\"properties\":{\"resourceId\":\"$eventHubResourceId\"}}}}}}"

Enviar eventos para o tópico

Agora, envie um evento de exemplo para o tópico do namespace seguindo as etapas nesta seção.

Listar as chaves de acesso de namespace

  1. Obtenha as chaves de acesso associadas ao namespace que você criou. Você usará uma delas para autenticação ao publicar eventos. Para listar suas chaves, você precisa primeiro da ID completa do recurso do namespace. Obtenha-o executando o comando a seguir:

    namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
    
  2. Obtenha a primeira chave do namespace:

    key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
    

Publicar um evento

  1. Recupere o nome do host do namespace. Use-o para compor o ponto de extremidade HTTP do namespace para o qual os eventos serão enviados. As operações a seguir foram disponibilizadas pela primeira vez com a versão 2023-06-01-preview da API.

    publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
    
  2. Crie um exemplo de evento compatível com CloudEvents:

    event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
    

    O elemento data é o conteúdo do evento. Qualquer JSON bem formado pode ficar nesse campo. Para obter mais informações em propriedades (também conhecidas como atributos de contexto) que podem ser usadas em um evento, consulte as especificações CloudEvents.

  3. Use o CURL para enviar o evento para o tópico. CURL é um utilitário que envia solicitações HTTP.

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

    Navegue até a página do Namespace dos Hubs de Eventos no portal do Microsoft Azure, atualize a página e verifique se o contador de mensagens de entrada no gráfico indica que um evento foi recebido.

    Captura de tela que mostra a página Hub de eventos com gráfico mostrando que um evento foi recebido.

Próximas etapas

Neste artigo, você criou e configurou o namespace da Grade de Eventos e os recursos dos Hubs de Eventos. Para obter instruções passo a passo sobre como receber eventos de um hub de eventos, confira estes tutoriais: