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.

Application overview

Este diagrama descreve o fluxo de trabalho da solução que você cria neste tutorial:

  1. Os dados enviados para um hub de eventos do Azure são capturados em um armazenamento de blob do Azure.
  2. Quando a captura de dados é concluída, um evento é gerado e enviado para a Grade de Eventos do Azure.
  3. A Grade de Eventos do Azure encaminha esses dados de evento para um aplicativo de função do Azure.
  4. O aplicativo de função usa a URL do blob nos dados do evento para recuperar o blob do armazenamento.
  5. 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

  1. Inicie sessão no portal do Azure.

  2. Selecione o botão Cloud Shell na parte superior.

    Screenshot of Azure portal showing the selection of Cloud Shell button.

  3. Você vê o Cloud Shell aberto na parte inferior do navegador.

    1. Se você estiver usando o Cloud Shell pela primeira vez:
      1. Se você vir uma opção para selecionar entre Bash e PowerShell, selecione Bash.

      2. Crie uma conta de armazenamento selecionando Criar armazenamento. O Azure Cloud Shell requer uma conta de armazenamento do Azure para armazenar alguns arquivos.

        Screenshot showing the creation of storage for Cloud Shell.

      3. Aguarde até que o Cloud Shell seja inicializado.

        Screenshot showing the Cloud Shell initialized.

  4. No Cloud Shell, selecione Bash como mostrado na imagem acima, se ainda não estiver selecionado.

  5. Crie um grupo de recursos do Azure executando o seguinte comando da CLI:

    1. 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
      
    2. 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
      }
      
  6. 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:

    1. 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>
      
    2. 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.

  7. 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

  1. No portal do Azure, selecione Grupos de recursos no menu à esquerda.

  2. Filtre a lista de grupos de recursos inserindo o nome do seu grupo de recursos na caixa de pesquisa.

  3. Selecione seu grupo de recursos na lista.

    Screenshot showing the selection of your resource group.

  4. Confirme que vê os seguintes recursos no grupo de recursos:

    Screenshot showing resources in the resource group.

Criar uma tabela no Azure Synapse Analytics

Nesta seção, você cria uma tabela no pool SQL dedicado criado anteriormente.

  1. Na lista de recursos no grupo de recursos, selecione seu pool SQL dedicado.

  2. Na página Pool SQL dedicado, na seção Tarefas comuns no menu à esquerda, selecione Editor de consultas (visualização).

    Screenshot showing the selection of Query Editor on a Dedicated SQL pool page in the Azure portal.

  3. 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.

  4. 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);
    

    Screenshot showing the query editor.

  5. 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

  1. Na página Grupo de Recursos, selecione o aplicativo Azure Functions na lista de recursos.

    Screenshot showing the selection of the function app in the list of resources for a resource group.

  2. Na página Aplicativo de função do seu aplicativo, selecione Obter perfil de publicação na barra de comandos.

    Screenshot showing the selection of the **Get Publish Profile** button on the command bar of the function app page.

  3. Baixe e salve o arquivo na subpasta FunctionEGDDumper da pasta EventHubsCaptureEventGridDemo .

Usar o perfil de publicação para publicar o aplicativo Funções

  1. Inicie o Visual Studio.

  2. 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.

  3. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto FunctionEGDWDumper e selecione Publicar.

  4. Na tela seguinte, selecione Iniciar ou Adicionar um perfil de publicação.

  5. Na caixa de diálogo Publicar, selecione Importar Perfil para Destino e selecione Avançar.

    Screenshot showing the selection **Import Profile** on the **Publish** dialog box.

  6. Na guia Importar perfil, selecione o arquivo de configurações de publicação que você salvou anteriormente na pasta FunctionEGDWDumper e selecione Concluir.

  7. Quando o Visual Studio tiver configurado o perfil, selecione Publicar. Confirme se a publicação foi bem-sucedida.

  8. 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.

    Screenshot showing the confirmation of function creation.

Depois de publicar a função, está pronto para subscrever o evento.

Subscrever o evento

  1. Em uma nova guia ou nova janela de um navegador da Web, entre no portal do Azure.

  2. No portal do Azure, selecione Grupos de recursos no menu à esquerda.

  3. Filtre a lista de grupos de recursos inserindo o nome do seu grupo de recursos na caixa de pesquisa.

  4. Selecione seu grupo de recursos na lista.

  5. Selecione o namespace Hubs de Eventos na lista de recursos.

  6. Na página Namespace de Hubs de Eventos , selecione Eventos no menu esquerdo e selecione + Assinatura de Evento na barra de ferramentas.

    Screenshot of the Events page for an Event Hubs namespace with Add event subscription link selected.

  7. Na página Criar Subscrição de Eventos , siga estes passos:

    1. Insira um nome para a assinatura do evento.

    2. 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

    3. Para Tipo de Ponto de Extremidade, selecione Função do Azure.

    4. Em Ponto de extremidade, selecione o link.

    5. Na página Selecionar Função do Azure, siga estas etapas se elas não forem preenchidas automaticamente.

      1. Selecione a assinatura do Azure que tem a função Azure.
      2. Selecione o grupo de recursos para a função.
      3. Selecione o aplicativo de função.
      4. Selecione o slot de implantação.
      5. Selecione a função EventGridTriggerMigrateData.
    6. Na página Selecionar Função do Azure, selecione Confirmar Seleção.

    7. Em seguida, de volta à página Criar Assinatura de Evento, selecione Criar.

      Screenshot of the Create an event subscription page.

  8. Verifique se a assinatura do evento foi criada. Alterne para a guia Assinaturas de Eventos na página Eventos do namespace Hubs de Eventos.

    Screenshot showing the Event Subscriptions tab on the Events page.

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.

  1. No portal do Azure, navegue até o seu grupo de recursos como fez anteriormente.

  2. Selecione o namespace Hubs de Eventos.

  3. Na página Namespace de Hubs de Eventos , selecione Políticas de acesso compartilhado no menu à esquerda.

  4. Selecione RootManageSharedAccessKey na lista de políticas.

    Screenshot showing the Shared access policies page for an Event Hubs namespace.

  5. Selecione o botão de cópia ao lado da caixa de texto Cadeia de conexão-chave primária.

  6. Volte para sua solução Visual Studio.

  7. Clique com o botão direito do mouse no projeto WindTurbineDataGenerator e selecione Definir como projeto de inicialização.

  8. No projeto WindTurbineDataGenerator, abra program.cs.

  9. Substitua <EVENT HUBS NAMESPACE CONNECTION STRING> pela cadeia de conexão copiada do portal.

  10. 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";
    
  11. Compile a solução. Execute o aplicativo WindTurbineGenerator.exe .

  12. 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]
    

    Screenshot showing the query results.

Monitorizar a solução

Esta seção ajuda você a monitorar ou solucionar problemas da solução.

Ver dados capturados na conta de armazenamento

  1. Navegue até o grupo de recursos e selecione a conta de armazenamento usada para capturar dados de eventos.

  2. Na página Conta de armazenamento, selecione Navegador de armazenamento no menu à esquerda.

  3. Expanda BLOB CONTAINERS, e selecione windturbinecapture.

  4. Abra a pasta com o mesmo nome do namespace Hubs de Eventos no painel direito.

  5. Abra a pasta com o mesmo nome do hub de eventos (hubdatamigration).

  6. Analise detalhadamente as pastas e você verá os arquivos AVRO. Eis um exemplo:

    Screenshot showing the captured file in the storage.

Verifique se o gatilho Grade de Eventos invocou a função

  1. Navegue até o grupo de recursos e selecione o aplicativo de função.

  2. Selecione a guia Funções no painel central.

  3. Selecione a função EventGridTriggerMigrateData na lista.

  4. Na página Função, selecione Monitor no menu à esquerda.

  5. Selecione Configurar para configurar insights do aplicativo para capturar logs de invocação.

  6. Crie um novo recurso do Application Insights ou use um recurso existente.

  7. Navegue de volta para a página Monitor da função.

  8. Confirme se o aplicativo cliente (WindTurbineDataGenerator) que está enviando os eventos ainda está em execução. Caso contrário, execute o aplicativo.

  9. Aguarde alguns minutos (5 minutos ou mais) e selecione o botão Atualizar para ver as invocações de funções.

    Screenshot showing the Function invocations.

  10. 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 a data 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.

Screenshot showing the final query results.

Próximos passos