Tutorial: migrar dados capturados dos Hubs de Eventos do Armazenamento do Microsoft Azure para o Azure Synapse Analytics usando a Grade de Eventos e o Azure Functions
Neste tutorial, você migrará dados capturados dos Hubs de Eventos de Armazenamento de Blobs do Azure para o Azure Synapse Analytics, especificamente um pool de SQL dedicado, usando a Grade de Eventos do Azure e o Azure Functions.
Este diagrama ilustra o fluxo de trabalho da solução que você cria neste tutorial:
- Dados enviados para um hub de eventos do Azure são capturados no Armazenamento de Blobs do Azure.
- Quando a captura de dados for concluída, um evento será gerado e enviado para a Grade de Eventos do Azure.
- A Grade de Eventos do Azure encaminha os dados desse evento para um aplicativo de funções do Azure.
- O aplicativo de funções usa a URL do blob nos dados do evento para recuperar o blob do armazenamento.
- O aplicativo de funções migra os dados de blob para um Azure Synapse Analytics.
Neste artigo, você executa as seguintes etapas:
- Implantar a infraestrutura necessária para o tutorial
- Publicar o código em um aplicativo do Functions
- Criar uma assinatura na Grade de Eventos
- Transmitir dados de exemplo aos Hubs de Eventos
- Verificar dados capturados no Azure Synapse Analytics
Pré-requisitos
Para concluir este tutorial, você deve ter:
- Este artigo pressupõe que você esteja familiarizado com a Grade de Eventos e os Hubs de Eventos (especialmente o recurso Captura). Se você não estiver familiarizado com a Grade de Eventos do Azure, confira Introdução à Grade de Eventos do Azure. Para obter informações sobre o recurso Captura dos Hubs de Eventos do Azure, confira Capturar eventos por meio dos Hubs de Eventos do Azure no Armazenamento de Blobs do Azure ou no Azure Data Lake Storage.
- Uma assinatura do Azure. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
- Visual Studio com cargas de trabalho para: desenvolvimento da área de trabalho do .NET, desenvolvimento do Azure, desenvolvimento ASP.NET e desenvolvimento para a Web, desenvolvimento do Node.js e desenvolvimento do Python.
- Baixe o projeto de exemplo EventHubsCaptureEventGridDemo para seu computador.
- WindTurbineDataGenerator – um editor simples que envia dados de exemplo de turbina eólica para um hub de eventos com a funcionalidade Capturar habilitada.
- FunctionDWDumper – uma função do Azure que recebe uma notificação da Grade de Eventos do Azure quando um arquivo Avro é capturado no blob do Armazenamento do Azure. Ela recebe o caminho do URI do blob, lê o conteúdo dele e efetua push desses dados para o Azure Synapse Analytics (pool de SQL dedicado).
Implantar a infraestrutura
Nesta etapa, você implanta a infraestrutura necessária com um modelo do Resource Manager. Quando você implanta o modelo, são criados os seguintes recursos:
- Hub de Eventos com o recurso Captura habilitado.
- Conta de armazenamento para os arquivos capturados.
- Plano de serviço de aplicativo para hospedar o aplicativo de função
- Aplicativo de funções para o processamento do evento
- SQL Server para hospedagem do data warehouse
- Azure Synapse Analytics (pool de SQL dedicado) para armazenar os dados migrados
Usar a CLI do Azure para implantar a infraestrutura
Entre no portal do Azure.
Selecione o botão Cloud Shell na parte superior.
Você verá que o Cloud Shell será aberto na parte inferior do navegador.
- Se estiver usando o Cloud Shell pela primeira vez:
No Cloud Shell, selecione Bash, conforme mostrado na imagem acima, caso ainda não tenha sido 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 a localização do grupo de recursos, se desejar.
az group create -l eastus -n rgDataMigration
Pressione ENTER.
Veja 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, o 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. Caso encontre um erro relacionado ao nome de um recurso do Azure, exclua o grupo de recursos, corrija o nome e repita 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 SQL Server.
- Nome do usuário do SQL e senha.
- Nome para o banco de dados.
- Nome da conta de armazenamento.
- Nome do aplicativo de funções.
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, pois você está criando vários recursos. No resultado do comando, verifique se não houve falhas.
Feche o Cloud Shell selecionando o botão Cloud Shell no portal (ou) o botão X no canto superior direito da janela do Cloud Shell.
Verifique se os recursos são criados
No portal do Azure, selecione Grupos de recursos no menu esquerdo.
Filtre a lista de grupos de recursos digitando o nome do seu grupo de recursos na caixa de pesquisa.
Selecione seu grupo de recursos na lista.
Confirme que você vê os seguintes recursos no grupo de recursos:
Criar uma tabela no Azure Synapse Analytics
Nesta seção, você cria uma tabela no pool de SQL dedicado criado anteriormente.
Na lista de recursos no grupo de recursos, selecione seu pool de SQL dedicado.
Na página Pool de SQL dedicado, na seção Tarefas Comuns no menu à esquerda, selecione Editor de consultas (versão prévia) .
Insira o nome de usuário e senha para o SQL Server e selecione OK. Se você vir uma mensagem sobre como permitir que seu cliente acesse o SQL Server, selecione Incluir IP na lista de permitidos <seu endereço IP> no servidor <seu SQL Server> 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 essa guia ou janela aberta para que você possa verificar se os dados são criados no final do tutorial.
Publicar o aplicativo do Azure Functions
Primeiro, obtenha o perfil de publicação do aplicativo do Functions no portal do Azure. Em seguida, use o perfil de publicação para publicar o projeto ou aplicativo do Azure Functions no Visual Studio.
Obter o perfil de publicação
Na página Grupo de Recursos, selecione o aplicativo do Azure Functions na lista de recursos.
Na página Aplicativo Function do 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 do Functions
Inicie o Visual Studio.
Abra a solução EventHubsCaptureEventGridDemo.sln que você baixou do GitHub como parte dos pré-requisitos. Você pode encontrá-la na pasta
/samples/e2e/EventHubsCaptureEventGridDemo
.No Gerenciador de Soluções, clique com o botão direito do mouse no projeto FunctionEGDWDumper e selecione Publicar.
Na tela a seguir, selecione Iniciar ou Adicionar um perfil de publicação.
Na caixa de diálogo Publicar, selecione Importar Perfil como Destino e Avançar.
Na guia Importar perfil, selecione o arquivo de configurações de publicação que você salvou anteriormente na pasta FunctionEGDWDumper e, em seguida, selecione Concluir.
Quando o Visual Studio tiver configurado o perfil, selecione Publicar. Confirme se a publicação foi bem-sucedida.
No navegador da Web em que a página Azure Functions está aberta, selecione Funções no painel do meio. Confirme se a função EventGridTriggerMigrateData aparece na lista. Se não a vir, tente publicar no Visual Studio novamente e atualize a página no portal.
Depois de publicar a função, você estará pronto para assinar o evento.
Assinar o evento
Em uma nova guia ou em uma nova janela de um navegador da Web, entre no portal do Azure.
No portal do Azure, selecione Grupos de recursos no menu esquerdo.
Filtre a lista de grupos de recursos digitando o nome do seu grupo de recursos na caixa de pesquisa.
Selecione seu grupo de recursos na lista.
Selecione o namespace dos Hubs de Eventos na lista de recursos.
Na página Namespace dos Hubs de Eventos, selecione Eventos no menu à esquerda e selecione + Assinatura de Evento na barra de ferramentas.
Na página Criar Assinatura de Eventos, siga estas etapas:
Insira um nome para a assinatura de evento.
Insira um nome para o tópico do sistema. Um tópico do sistema fornece um ponto de extremidade para que o remetente envie eventos. Para saber mais, confira Tópicos do sistema
Para o Tipo de ponto de extremidade, selecione Função do Azure.
Para Ponto de extremidade, selecione o link.
Na página Selecionar Função do Azure, siga estas etapas se elas não forem realizadas automaticamente.
- Selecione a assinatura do Azure que tem a função do Azure.
- Selecione o grupo de recursos para a função.
- Selecione o aplicativo de funções.
- 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, volte para a página Criar Assinatura de Evento e selecione Criar.
Verifique se a assinatura do evento foi criada. Alterne para a guia Assinaturas de Evento na página Eventos para o namespace dos Hubs de Eventos.
Executar o aplicativo para gerar dados
Você terminou de configurar o hub de eventos, o pool de SQL dedicado (antigo SQL Data Warehouse), o aplicativo de funções do Azure e a assinatura de evento. Antes de executar um aplicativo que gere dados para o hub de eventos, você precisa configurar alguns valores.
No portal do Azure, navegue até o 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 Copiar ao lado da caixa de texto Chave primária da cadeia de conexão.
Volte para sua solução do 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ê tiver usado um nome diferente para o hub de eventos que não seja
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 em que você tem a janela de consulta aberta, consulte a tabela no data warehouse com 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 do 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 Receptor de Dados dos Hubs de Eventos do Azure) no namespace dos Hubs de Eventos. Para obter mais informações, consulte Autorizar o acesso aos Hubs de Eventos usando o Microsoft Entra ID.
Monitorar a solução
Esta seção ajuda você com o monitoramento ou a solução de problemas da solução.
Exibir dados capturados na conta de armazenamento
Navegue até o grupo de recursos e selecione a conta de armazenamento usada para capturar dados de evento.
Na página Conta de armazenamento, selecione Navegador de armazenamento no menu esquerdo.
Expanda CONTÊINERES DE BLOB e selecione windturbinecapture.
Abra a pasta com o mesmo nome que o seu Namespace dos Hubs de Eventos no painel direito.
Abra a pasta com o mesmo nome que o seu hub de eventos (hubdatamigration).
Execute uma consulta drill-through das pastas e veja os arquivos AVRO. Veja um exemplo:
Verifique se o gatilho da Grade de Eventos invocou a função
Navegue até o grupo de recursos e selecione o aplicativo de funções.
Selecione a guia Funções no painel do meio.
Selecione a função EventGridTriggerMigrateData na lista.
Na página Função, selecione Monitor no menu esquerdo.
Selecione Configurar para configurar o Application Insights para capturar logs de invocação.
Crie um recurso do Application Insights ou use um 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. Se não estiver, execute o aplicativo.
Aguarde alguns minutos (5 minutos ou mais) e selecione o botão Atualizar para ver as invocações de função.
Selecione uma invocação para ver os detalhes.
A Grade de Eventos distribui os dados do evento para os assinantes. O exemplo a seguir mostra os dados de evento gerados quando os dados sendo transmitidos por um hub de eventos são capturados em um blob. Em particular, observe se a propriedade
fileUrl
no objetodata
aponta para o blob no armazenamento. O aplicativo de funções 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 de SQL dedicado
Na guia do navegador em que você tem a janela de consulta aberta, consulte a tabela no pool de SQL dedicado para os dados migrados.
Próximas etapas
- Para obter mais informações sobre como configurar e executar o exemplo, consulte exemplo Captura dos Hubs de Eventos e Grade de Eventos.
- Neste tutorial, você criou uma assinatura de evento para o evento
CaptureFileCreated
. Para obter mais informações sobre esse evento e todos os eventos compatíveis com o Armazenamento de Blobs do Azure, confira Hubs de Eventos do Azure como fonte da Grade de Eventos. - Para saber mais sobre o recurso Captura dos Hubs de Eventos, confira Capturar eventos por meio dos Hubs de Eventos do Azure no Armazenamento de Blobs do Azure ou no Azure Data Lake Storage.