Tutorial: Migrar dados capturados de Hubs de Eventos do Armazenamento do Azure para o Azure Synapse Analytics usando a Grade de Eventos do Azure e o Azure Functions
Neste tutorial, você migrará os dados capturados dos Hubs de Eventos do Armazenamento de Blobs do Azure para o Azure Synapse Analytics, especificamente um pool SQL dedicado, usando a Grade de Eventos do Azure e o Azure Functions.
Este diagrama descreve o fluxo de trabalho da solução que você cria neste tutorial:
- Os dados enviados para um hub de eventos do Azure são capturados em um armazenamento de blob do Azure.
- Quando a captura de dados é concluída, um evento é gerado e enviado para a Grade de Eventos do Azure.
- A Grade de Eventos do Azure encaminha esses dados de evento para um aplicativo de função do Azure.
- O aplicativo de função usa a URL do blob nos dados do evento para recuperar o blob do armazenamento.
- O aplicativo de função migra os dados de blob para um Azure Synapse Analytics.
Neste artigo, siga os seguintes passos:
- Implantar a infraestrutura necessária para o tutorial
- Publicar o código para uma Aplicação de Funções
- Criar uma subscrição do Event Grid
- Transmitir dados de exemplo para Hubs de Eventos
- Verificar os dados capturados no Azure Synapse Analytics
Pré-requisitos
Para concluir este tutorial, tem de ter:
- Este artigo pressupõe que você esteja familiarizado com a Grade de Eventos e Hubs de Eventos (especialmente o recurso Captura). Se você não estiver familiarizado com a Grade de Eventos do Azure, consulte Introdução à Grade de Eventos do Azure. Para saber mais sobre o recurso Capturar dos Hubs de Eventos do Azure, consulte Capturar eventos por meio dos Hubs de Eventos do Azure no Armazenamento de Blobs do Azure ou no Armazenamento do Azure Data Lake.
- Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
- Visual studio com cargas de trabalho para: desenvolvimento de desktop .NET, desenvolvimento Azure, desenvolvimento ASP.NET e web, desenvolvimento Node.js e desenvolvimento Python.
- Transfira o projeto de exemplo EventHubsCaptureEventGridDemo para o seu computador.
- WindTurbineDataGenerator – Um editor simples que envia dados de amostra de turbinas eólicas para um hub de eventos com o recurso de captura habilitado.
- FunctionDWDumper – Uma função do Azure que recebe uma notificação da Grade de Eventos do Azure quando um arquivo Avro é capturado no blob de Armazenamento do Azure. Ele recebe o caminho de URI do blob, lê seu conteúdo e envia esses dados por push para o Azure Synapse Analytics (pool SQL dedicado).
Implementar a infraestrutura
Nesta etapa, você implanta a infraestrutura necessária com um modelo do Gerenciador de Recursos. Quando você implanta o modelo, os seguintes recursos são criados:
- Hub de eventos com o recurso Captura ativado.
- Conta de armazenamento para os arquivos capturados.
- Plano do serviço de aplicativo para hospedar o aplicativo de função
- Aplicação de funções para processar o evento
- SQL Server para alojar o armazém de dados
- Azure Synapse Analytics (pool SQL dedicado) para armazenar os dados migrados
Usar a CLI do Azure para implantar a infraestrutura
Inicie sessão no portal do Azure.
Selecione o botão Cloud Shell na parte superior.
Você vê o Cloud Shell aberto na parte inferior do navegador.
- Se você estiver usando o Cloud Shell pela primeira vez:
No Cloud Shell, selecione Bash como mostrado na imagem acima, se ainda não estiver selecionado.
Crie um grupo de recursos do Azure executando o seguinte comando da CLI:
Copie e cole o seguinte comando na janela do Cloud Shell. Altere o nome e o local do grupo de recursos, se desejar.
az group create -l eastus -n rgDataMigration
Prima ENTER.
Eis um exemplo:
user@Azure:~$ az group create -l eastus -n rgDataMigration { "id": "/subscriptions/00000000-0000-0000-0000-0000000000000/resourceGroups/rgDataMigration", "location": "eastus", "managedBy": null, "name": "rgDataMigration", "properties": { "provisioningState": "Succeeded" }, "tags": null }
Implante todos os recursos mencionados na seção anterior (hub de eventos, conta de armazenamento, aplicativo de funções, Azure Synapse Analytics) executando o seguinte comando da CLI:
Copie e cole o comando na janela do Cloud Shell. Como alternativa, você pode copiar/colar em um editor de sua escolha, definir valores e, em seguida, copiar o comando para o Cloud Shell. Se você vir um erro devido a um nome de recurso do Azure, exclua o grupo de recursos, corrija o nome e tente novamente o comando.
Importante
Especifique valores para as seguintes entidades antes de executar o comando:
- Nome do grupo de recursos criado anteriormente.
- Nome para o namespace do hub de eventos.
- Nome do hub de eventos. Você pode deixar o valor como está (hubdatamigration).
- Nome para o servidor SQL.
- Nome do usuário e senha do SQL.
- Nome do banco de dados.
- Nome da conta de armazenamento.
- Nome para o aplicativo de função.
az deployment group create \ --resource-group rgDataMigration \ --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/event-grid/EventHubsDataMigration.json \ --parameters eventHubNamespaceName=<event-hub-namespace> eventHubName=hubdatamigration sqlServerName=<sql-server-name> sqlServerUserName=<user-name> sqlServerPassword=<password> sqlServerDatabaseName=<database-name> storageName=<unique-storage-name> functionAppName=<app-name>
Pressione ENTER na janela do Cloud Shell para executar o comando. Esse processo pode demorar um pouco, já que você está criando um monte de recursos. No resultado do comando, certifique-se de que não houve falhas.
Feche o Cloud Shell selecionando o botão Cloud Shell no portal (ou) botão X no canto superior direito da janela do Cloud Shell.
Verifique se os recursos foram criados
No portal do Azure, selecione Grupos de recursos no menu à esquerda.
Filtre a lista de grupos de recursos inserindo o nome do seu grupo de recursos na caixa de pesquisa.
Selecione seu grupo de recursos na lista.
Confirme que vê os seguintes recursos no grupo de recursos:
Criar uma tabela no Azure Synapse Analytics
Nesta seção, você cria uma tabela no pool SQL dedicado criado anteriormente.
Na lista de recursos no grupo de recursos, selecione seu pool SQL dedicado.
Na página Pool SQL dedicado, na seção Tarefas comuns no menu à esquerda, selecione Editor de consultas (visualização).
Digite o nome do usuário e a senha do servidor SQL e selecione OK. Se você vir uma mensagem sobre como permitir que seu cliente acesse o servidor SQL, selecione Allowlist IP <seu endereço> IP no servidor <seu servidor> SQL e, em seguida, selecione OK.
Na janela de consulta, copie e execute o seguinte script SQL:
CREATE TABLE [dbo].[Fact_WindTurbineMetrics] ( [DeviceId] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [MeasureTime] datetime NULL, [GeneratedPower] float NULL, [WindSpeed] float NULL, [TurbineSpeed] float NULL ) WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN);
Mantenha esta guia ou janela aberta para que você possa verificar se os dados foram criados no final do tutorial.
Publicar a aplicação de Funções do Azure
Primeiro, obtenha o perfil de publicação para o aplicativo Functions no portal do Azure. Em seguida, use o perfil de publicação para publicar o projeto ou aplicativo do Azure Functions do Visual Studio.
Obter o perfil de publicação
Na página Grupo de Recursos, selecione o aplicativo Azure Functions na lista de recursos.
Na página Aplicativo de função do seu aplicativo, selecione Obter perfil de publicação na barra de comandos.
Baixe e salve o arquivo na subpasta FunctionEGDDumper da pasta EventHubsCaptureEventGridDemo .
Usar o perfil de publicação para publicar o aplicativo Funções
Inicie o Visual Studio.
Abra a solução EventHubsCaptureEventGridDemo.sln que você baixou do GitHub como parte dos pré-requisitos. Você pode encontrá-lo na
/samples/e2e/EventHubsCaptureEventGridDemo
pasta.No Gerenciador de Soluções, clique com o botão direito do mouse no projeto FunctionEGDWDumper e selecione Publicar.
Na tela seguinte, selecione Iniciar ou Adicionar um perfil de publicação.
Na caixa de diálogo Publicar, selecione Importar Perfil para Destino e selecione Avançar.
Na guia Importar perfil, selecione o arquivo de configurações de publicação que você salvou anteriormente na pasta FunctionEGDWDumper e selecione Concluir.
Quando o Visual Studio tiver configurado o perfil, selecione Publicar. Confirme se a publicação foi bem-sucedida.
No navegador da Web que tem a página Função do Azure aberta, selecione Funções no painel central. Confirme se a função EventGridTriggerMigrateData aparece na lista. Se você não vê-lo, tente publicar do Visual Studio novamente e, em seguida, atualize a página no portal.
Depois de publicar a função, está pronto para subscrever o evento.
Subscrever o evento
Em uma nova guia ou nova janela de um navegador da Web, entre no portal do Azure.
No portal do Azure, selecione Grupos de recursos no menu à esquerda.
Filtre a lista de grupos de recursos inserindo o nome do seu grupo de recursos na caixa de pesquisa.
Selecione seu grupo de recursos na lista.
Selecione o namespace Hubs de Eventos na lista de recursos.
Na página Namespace de Hubs de Eventos , selecione Eventos no menu esquerdo e selecione + Assinatura de Evento na barra de ferramentas.
Na página Criar Subscrição de Eventos , siga estes passos:
Insira um nome para a assinatura do evento.
Insira um nome para o tópico do sistema. Um tópico do sistema fornece um ponto de extremidade para o remetente enviar eventos. Para obter mais informações, consulte Tópicos do sistema
Para Tipo de Ponto de Extremidade, selecione Função do Azure.
Em Ponto de extremidade, selecione o link.
Na página Selecionar Função do Azure, siga estas etapas se elas não forem preenchidas automaticamente.
- Selecione a assinatura do Azure que tem a função Azure.
- Selecione o grupo de recursos para a função.
- Selecione o aplicativo de função.
- Selecione o slot de implantação.
- Selecione a função EventGridTriggerMigrateData.
Na página Selecionar Função do Azure, selecione Confirmar Seleção.
Em seguida, de volta à página Criar Assinatura de Evento, selecione Criar.
Verifique se a assinatura do evento foi criada. Alterne para a guia Assinaturas de Eventos na página Eventos do namespace Hubs de Eventos.
Executar a aplicação para gerar dados
Você terminou de configurar seu hub de eventos, dedicar o pool SQL (anteriormente SQL Data Warehouse), o aplicativo de função do Azure e a assinatura do evento. Antes de executar uma aplicação que gera dados para o hub de eventos, tem de configurar alguns valores.
No portal do Azure, navegue até o seu grupo de recursos como fez anteriormente.
Selecione o namespace Hubs de Eventos.
Na página Namespace de Hubs de Eventos , selecione Políticas de acesso compartilhado no menu à esquerda.
Selecione RootManageSharedAccessKey na lista de políticas.
Selecione o botão de cópia ao lado da caixa de texto Cadeia de conexão-chave primária.
Volte para sua solução Visual Studio.
Clique com o botão direito do mouse no projeto WindTurbineDataGenerator e selecione Definir como projeto de inicialização.
No projeto WindTurbineDataGenerator, abra program.cs.
Substitua
<EVENT HUBS NAMESPACE CONNECTION STRING>
pela cadeia de conexão copiada do portal.Se você usou um nome diferente para o hub de eventos diferente de
hubdatamigration
, substitua<EVENT HUB NAME>
pelo nome do hub de eventos.private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/..."; private const string EventHubName = "hubdatamigration";
Compile a solução. Execute o aplicativo WindTurbineGenerator.exe .
Após alguns minutos, na outra guia do navegador onde você tem a janela de consulta aberta, consulte a tabela em seu data warehouse para obter os dados migrados.
select * from [dbo].[Fact_WindTurbineMetrics]
Importante
Usamos a cadeia de conexão para autenticar no namespace dos Hubs de Eventos do Azure para manter o tutorial simples. Recomendamos que você use a autenticação do Microsoft Entra ID em ambientes de produção. Ao usar um aplicativo, você pode habilitar a identidade gerenciada para o aplicativo e atribuir à identidade uma função apropriada (Proprietário dos Hubs de Eventos do Azure, Remetente de Dados dos Hubs de Eventos do Azure ou Recetor de Dados dos Hubs de Eventos do Azure) no namespace dos Hubs de Eventos. Para obter mais informações, consulte Autorizar o acesso a Hubs de Eventos usando a ID do Microsoft Entra.
Monitorizar a solução
Esta seção ajuda você a monitorar ou solucionar problemas da solução.
Ver dados capturados na conta de armazenamento
Navegue até o grupo de recursos e selecione a conta de armazenamento usada para capturar dados de eventos.
Na página Conta de armazenamento, selecione Navegador de armazenamento no menu à esquerda.
Expanda BLOB CONTAINERS, e selecione windturbinecapture.
Abra a pasta com o mesmo nome do namespace Hubs de Eventos no painel direito.
Abra a pasta com o mesmo nome do hub de eventos (hubdatamigration).
Analise detalhadamente as pastas e você verá os arquivos AVRO. Eis um exemplo:
Verifique se o gatilho Grade de Eventos invocou a função
Navegue até o grupo de recursos e selecione o aplicativo de função.
Selecione a guia Funções no painel central.
Selecione a função EventGridTriggerMigrateData na lista.
Na página Função, selecione Monitor no menu à esquerda.
Selecione Configurar para configurar insights do aplicativo para capturar logs de invocação.
Crie um novo recurso do Application Insights ou use um recurso existente.
Navegue de volta para a página Monitor da função.
Confirme se o aplicativo cliente (WindTurbineDataGenerator) que está enviando os eventos ainda está em execução. Caso contrário, execute o aplicativo.
Aguarde alguns minutos (5 minutos ou mais) e selecione o botão Atualizar para ver as invocações de funções.
Selecione uma invocação para ver os detalhes.
O Event Grid distribui dados de eventos para os subscritores. O exemplo a seguir mostra dados de eventos gerados quando o streaming de dados por meio de um hub de eventos é capturado em um blob. Em particular, observe que
fileUrl
adata
propriedade no objeto aponta para o blob no armazenamento. O aplicativo de função usa essa URL para recuperar o arquivo de blob com os dados capturados.{ "topic": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/rgDataMigration/providers/Microsoft.EventHub/namespaces/spehubns1207", "subject": "hubdatamigration", "eventType": "Microsoft.EventHub.CaptureFileCreated", "id": "4538f1a5-02d8-4b40-9f20-36301ac976ba", "data": { "fileUrl": "https://spehubstorage1207.blob.core.windows.net/windturbinecapture/spehubns1207/hubdatamigration/0/2020/12/07/21/49/12.avro", "fileType": "AzureBlockBlob", "partitionId": "0", "sizeInBytes": 473444, "eventCount": 2800, "firstSequenceNumber": 55500, "lastSequenceNumber": 58299, "firstEnqueueTime": "2020-12-07T21:49:12.556Z", "lastEnqueueTime": "2020-12-07T21:50:11.534Z" }, "dataVersion": "1", "metadataVersion": "1", "eventTime": "2020-12-07T21:50:12.7065524Z" }
Verifique se os dados estão armazenados no pool SQL dedicado
Na guia do navegador onde você tem a janela de consulta aberta, consulte a tabela em seu pool SQL dedicado para os dados migrados.
Próximos passos
- Para obter mais informações sobre como configurar e executar o exemplo, veja Exemplo do Event Grid e da Recolha dos Hubs de Eventos.
- Neste tutorial, você criou uma assinatura de evento para o
CaptureFileCreated
evento. Para obter mais informações sobre esse evento e todos os eventos suportados pelo Armazenamento de Blobs do Azure, consulte Hubs de Eventos do Azure como uma fonte de Grade de Eventos. - Para saber mais sobre o recurso Captura de Hubs de Eventos, consulte Capturar eventos por meio de Hubs de Eventos do Azure no Armazenamento de Blobs do Azure ou no Armazenamento do Azure Data Lake.