Início Rápido: Rotear eventos personalizados para uma fila usando a Grade de Eventos e a CLI do Azure

A Grade de Eventos do Azure é um agente de eventos altamente escalonável e sem servidor que você pode usar para integrar aplicativos por meio de eventos. A Grade de Eventos fornece eventos para manipuladores de eventos compatíveis e o Armazenamento de Filas do Azure é um deles.

Neste início rápido, você usará a CLI do Azure para criar um tópico personalizado da Grade de Eventos e uma assinatura do Armazenamento de Filas para esse tópico. Em seguida, você enviará eventos de exemplo para o tópico personalizado e verificará se esses eventos serão entregues em uma fila.

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

Criar um grupo de recursos

Os tópicos de Grade de Eventos são recursos do Azure e devem ser colocados em um grupo de recursos do Azure. O grupo de recursos do Azure é uma coleção lógica na qual os recursos do Azure são implantados e gerenciados.

Crie um grupo de recursos usando o comando az group create. O exemplo a seguir cria um grupo de recursos chamado gridResourceGroup na localização westus2.

Selecione Abrir Cloud Shell para abrir o Azure Cloud Shell no painel direito. Selecione o botão Copiar para copiar o comando, colá-lo no Cloud Shell e selecionar a tecla Enter para executá-lo.

az group create --name gridResourceGroup --location westus2

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 tópico personalizado

Um tópico de Grade de Eventos fornece um ponto de extremidade definido pelo usuário no qual você posta seus eventos. O exemplo a seguir cria o tópico personalizado no seu grupo de recursos.

Substitua <TOPIC NAME> por um nome exclusivo para o tópico personalizado. O nome do tópico da Grade de Eventos deve ser exclusivo porque uma entrada do DNS (Sistema de Nomes de Domínio) o representa.

  1. Especifique um nome para o tópico:

    topicname="<TOPIC NAME>"
    
  2. Execute o seguinte comando para criar o tópico:

    az eventgrid topic create --name $topicname -l westus2 -g gridResourceGroup
    

Criar uma fila

Antes de assinar o tópico personalizado, crie o ponto de extremidade para a mensagem de evento. Crie uma fila para coletar os eventos.

  1. Especifique um nome exclusivo para a conta de Armazenamento do Azure:

    storagename="<STORAGE ACCOUNT NAME>"    
    
  2. Execute os seguintes comandos para criar uma conta de armazenamento e uma fila (chamada eventqueue) no armazenamento:

    queuename="eventqueue"
    
    az storage account create -n $storagename -g gridResourceGroup -l westus2 --sku Standard_LRS
    key="$(az storage account keys list -n $storagename --query "[0].{value:value}" --output tsv)"    
    az storage queue create --name $queuename --account-name $storagename --account-key $key
    

Assinar um tópico personalizado

O exemplo a seguir assina o tópico personalizado que você criou e transmite a ID de recurso da fila para o ponto de extremidade. Com a CLI do Azure, você passa a ID da fila como o ponto de extremidade. O ponto de extremidade está nesse formato:

/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP NAME>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/queueservices/default/queues/<QUEUE NAME>

O script a seguir obtém a ID de recurso da conta de armazenamento para a fila. Ele constrói a ID da fila e assina um tópico da Grade de Eventos. Ele define o tipo de ponto de extremidade como storagequeue e usa a ID da fila do ponto de extremidade.

Antes de executar o comando, substitua o espaço reservado da data de validade (<yyyy-mm-dd>) por um valor real para o ano, mês e dia.

storageid=$(az storage account show --name $storagename --resource-group gridResourceGroup --query id --output tsv)
queueid="$storageid/queueservices/default/queues/$queuename"
topicid=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name mystoragequeuesubscription \
  --endpoint-type storagequeue \
  --endpoint $queueid \
  --expiration-date "<yyyy-mm-dd>"

A conta que cria a assinatura de evento deve ter acesso de gravação na fila. Observe que uma data de expiração está definida para a assinatura.

Se você usar a API REST para criar a assinatura, passe a ID da conta de armazenamento e o nome da fila como parâmetros separados:

"destination": {
  "endpointType": "storagequeue",
  "properties": {
    "queueName":"eventqueue",
    "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>"
  }
  ...

Enviar um evento para o tópico personalizado

Disparar um evento para ver como a Grade de Eventos distribui a mensagem para o ponto de extremidade. Primeiro, obtenha a URL e a chave para o tópico personalizado:

endpoint=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicname -g gridResourceGroup --query "key1" --output tsv)

Para simplificar neste artigo, use exemplo de dados de evento para enviar para o tópico personalizado. Normalmente, um aplicativo ou serviço do Azure enviaria os dados de evento.

A ferramenta cURL envia solicitações HTTP. Neste artigo, use o cURL para enviar o evento ao tópico personalizado. O exemplo a seguir envia três eventos para o tópico de Grade de Eventos:

for i in 1 2 3
do
   event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
   curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
done

Navegue até a fila no portal do Azure e observe que a Grade de Eventos enviou esses três eventos para a fila.

Captura de tela que mostra uma lista de mensagens recebidas da Grade de Eventos em uma fila.

Limpar os recursos

Caso planeje continuar a trabalhar com esse evento, não limpe os recursos que você criou neste artigo. Caso contrário, use o seguinte comando para excluir os recursos:

az group delete --name gridResourceGroup

Agora que você sabe como criar tópicos e assinaturas de evento, saiba mais sobre como a Grade de Eventos pode ajudá-lo:

Para saber mais sobre como publicar eventos e consumir eventos da Grade de Eventos usando várias linguagens de programação, confira os seguintes exemplos: