Tutorial: Transmitir macrodados para um armazém de dados

O Azure Event Grid é um serviço de encaminhamento de eventos inteligente que lhe permite reagir a notificações ou eventos de aplicações e serviços. Por exemplo, pode acionar uma função do Azure para processar dados dos Hubs de Eventos capturados num armazenamento de Blobs ou Data Lake Storage. Este exemplo mostra-lhe como utilizar o Event Grid e Funções do Azure para migrar dados dos Hubs de Eventos capturados do armazenamento de blobs para o Azure Synapse Analytics, especificamente um conjunto de SQL dedicado.

Descrição geral da aplicação

Este diagrama ilustra o fluxo de trabalho da solução que criar neste tutorial:

  1. Os dados enviados para um hub de eventos do Azure são capturados num armazenamento de blobs do Azure.
  2. Quando a captura de dados estiver concluída, um evento é gerado e enviado para Azure Event Grid.
  3. Azure Event Grid reencaminha estes dados de evento para uma aplicação de funções do Azure.
  4. A aplicação de funções utiliza o URL do blob nos dados do evento para obter o blob do armazenamento.
  5. A aplicação de funções migra os dados de blobs para um Azure Synapse Analytics.

Neste artigo, siga os seguintes passos:

  • Implementar 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 os Hubs de Eventos
  • Verificar os dados capturados no Azure Synapse Analytics

Pré-requisitos

Para concluir este tutorial, tem de ter:

  • 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 ambiente de trabalho .NET, desenvolvimento do Azure, desenvolvimento de ASP.NET e Web, desenvolvimento de Node.js e desenvolvimento python.
  • Transfira o projeto de exemplo EventHubsCaptureEventGridDemo para o seu computador.
    • WindTurbineDataGenerator – um fabricante simples que envia dados de turbina eólica de exemplo para um hub de eventos com capacidade de captura
    • FunctionDWDumper – uma Função do Azure que recebe uma notificação de Azure Event Grid quando um ficheiro Avro é capturado para o blob de Armazenamento do Azure. Recebe o caminho do URI do blob, lê os respetivos conteúdos e envia estes dados para o Azure Synapse Analytics (conjunto de SQL dedicado).

Implementar a infraestrutura

Neste passo, vai implementar a infraestrutura necessária com um modelo de Resource Manager. Quando implementa o modelo, são criados os seguintes recursos:

  • Hub de eventos com a funcionalidade Captura ativada.
  • Conta de armazenamento para os ficheiros capturados.
  • Plano do serviço de aplicações para alojar a aplicação de funções
  • Aplicação de funções para processar o evento
  • SQL Server para alojar o armazém de dados
  • Azure Synapse Analytics (conjunto de SQL dedicado) para armazenar os dados migrados

Utilizar a CLI do Azure para implementar a infraestrutura

  1. Inicie sessão no portal do Azure.

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

    Captura de ecrã a mostrar portal do Azure a mostrar a seleção do botão Cloud Shell.

  3. Verá a Cloud Shell aberta na parte inferior do browser.

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

        Captura de ecrã a mostrar Cloud Shell com Bash selecionado.

      2. Crie uma conta de armazenamento ao selecionar Criar armazenamento. O Azure Cloud Shell requer uma conta de armazenamento do Azure para armazenar alguns ficheiros.

        Captura de ecrã a mostrar a criação de armazenamento para Cloud Shell.

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

        Captura de ecrã a mostrar a Cloud Shell inicializada.

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

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

    1. Copie e cole o seguinte comando na janela Cloud Shell. Se quiser, altere o nome e a localização do grupo de recursos.

      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. Implemente todos os recursos mencionados na secção anterior (hub de eventos, conta de armazenamento, aplicação de funções, Azure Synapse Analytics) ao executar o seguinte comando da CLI:

    1. Copie e cole o comando na janela Cloud Shell. Em alternativa, poderá querer copiar/colar num editor à sua escolha, definir valores e, em seguida, copiar o comando para o Cloud Shell.

      Importante

      Especifique valores para as seguintes entidades antes de executar o comando:

      • Nome do grupo de recursos que criou anteriormente.
      • Nome do espaço de nomes do hub de eventos.
      • Nome do hub de eventos. Pode deixar o valor tal como está (hubdatamigration).
      • Nome do SQL Server.
      • Nome do utilizador e palavra-passe do SQL.
      • Nome da base de dados.
      • Nome da conta de armazenamento.
      • Nome da aplicação 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>
      
    2. Prima ENTER na janela Cloud Shell para executar o comando . Este processo pode demorar algum tempo, uma vez que está a criar vários recursos. No resultado do comando, certifique-se de que não houve falhas.

  7. Feche o Cloud Shell ao selecionar o botão Cloud Shell no portal (ou) botão X no canto superior direito da janela Cloud Shell.

Verifique se os recursos foram criados

  1. Na portal do Azure, selecione Grupos de recursos no menu esquerdo.

  2. Filtre a lista de grupos de recursos ao introduzir o nome do grupo de recursos na caixa de pesquisa.

  3. Selecione o grupo de recursos na lista.

    Captura de ecrã a mostrar a seleção do grupo de recursos.

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

    Captura de ecrã a mostrar os recursos no grupo de recursos.

Criar uma tabela no Azure Synapse Analytics

Nesta secção, vai criar uma tabela no conjunto de SQL dedicado que criou anteriormente.

  1. Na lista de recursos no grupo de recursos, selecione o conjunto de SQL dedicado.

  2. Na página Conjunto de SQL dedicado , na secção Tarefas Comuns no menu esquerdo, selecione Editor de consultas (pré-visualização).

    Captura de ecrã a mostrar a seleção de Editor do Power Query numa página conjunto de SQL dedicado no portal do Azure.

  3. Introduza o nome de utilizador e palavra-passe do SQL Server e selecione OK. Se vir uma mensagem sobre como permitir que o cliente aceda ao SQL Server, selecione Permitir IP <o endereço> IP no servidor <do sqL server> 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);
    

    Captura de ecrã a mostrar o editor de consultas.

  5. Mantenha este separador ou janela aberto para que possa verificar se os dados são criados no final do tutorial.

Publicar a aplicação de Funções do Azure

Em primeiro lugar, obtenha o perfil de publicação da aplicação De funções a partir do portal do Azure. Em seguida, utilize o perfil de publicação para publicar o Funções do Azure projeto ou aplicação a partir do Visual Studio.

Obter o perfil de publicação

  1. Na página Grupo de Recursos, selecione a aplicação Funções do Azure na lista de recursos.

    Captura de ecrã a mostrar a seleção da aplicação de funções na lista de recursos de um grupo de recursos.

  2. Na página Function App da sua aplicação, selecione Obter perfil de publicação na barra de comandos.

    Captura de ecrã a mostrar a seleção do botão **Obter Perfil de Publicação** na barra de comandos da página da aplicação de funções.

  3. Transfira e guarde o ficheiro na subpasta FunctionEGDDumper da pasta EventHubsCaptureEventGridDemo .

Utilizar o perfil de publicação para publicar a aplicação Funções

  1. Inicie o Visual Studio.

  2. Abra a solução EventHubsCaptureEventGridDemo.sln que transferiu do GitHub como parte dos pré-requisitos. Pode encontrá-lo na /samples/e2e/EventHubsCaptureEventGridDemo pasta.

  3. Em Explorador de Soluções, clique com o botão direito do rato em FunctionEGDWDumper project e selecione Publicar.

  4. No ecrã seguinte, selecione Iniciar ou Adicionar um perfil de publicação.

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

    Captura de ecrã a mostrar a seleção **Importar Perfil** na caixa de diálogo **Publicar**.

  6. No separador Importar perfil , selecione o ficheiro de definições de publicação que guardou anteriormente na pasta FunctionEGDWDumper e, em seguida, selecione Concluir.

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

  8. No browser que tem a página função do Azure aberta, selecione Funções no menu esquerdo. Confirme que a função EventGridTriggerMigrateData é apresentada na lista. Se não o vir, tente publicar novamente a partir do Visual Studio e, em seguida, atualize a página no portal.

    Captura de ecrã a mostrar a confirmação da criação da função.

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

Subscrever o evento

  1. Num novo separador ou nova janela de um browser, navegue para o portal do Azure.

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

  3. Filtre a lista de grupos de recursos ao introduzir o nome do grupo de recursos na caixa de pesquisa.

  4. Selecione o grupo de recursos na lista.

  5. Selecione o espaço de nomes dos Hubs de Eventos na lista de recursos.

  6. Na página Espaço de Nomes dos Hubs de Eventos , selecione Eventos no menu esquerdo e, em seguida, selecione + Subscrição de Eventos na barra de ferramentas.

    Adicionar ligação de subscrição de eventos na página Eventos de um espaço de nomes dos Hubs de Eventos

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

    1. Introduza um nome para a subscrição do evento.

    2. Introduza um nome para o tópico do sistema. Um tópico de sistema fornece um ponto final para o remetente enviar eventos. Para obter mais informações, veja Tópicos do sistema

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

    4. Em Ponto final, selecione a ligação.

    5. Na página Selecionar Função do Azure , siga estes passos se não forem preenchidos automaticamente.

      1. Selecione a subscrição do Azure que tem a função do Azure.
      2. Selecione o grupo de recursos da função.
      3. Selecione a aplicação de funções.
      4. Selecione o bloco de implementação.
      5. Selecione a função EventGridTriggerMigrateData.
    6. Na página Selecionar Função do Azure , selecione Confirmar Seleção.

    7. Em seguida, na página Criar Subscrição de Eventos , selecione Criar.

      Criar uma subscrição de evento com a função

  8. Verifique se a subscrição do evento foi criada. Mude para o separador Subscrições de Eventos na página Eventos do espaço de nomes dos Hubs de Eventos.

    Confirmar subscrição de eventos

  9. Selecione o plano Serviço de Aplicações (não o Serviço de Aplicações) na lista de recursos no grupo de recursos.

Executar a aplicação para gerar dados

Concluiu a configuração do hub de eventos, dedicou o conjunto de SQL (anteriormente SQL Data Warehouse), a aplicação de funções do Azure e a subscrição de eventos. 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 para o grupo de recursos como fez anteriormente.

  2. Selecione o espaço de nomes dos Hubs de Eventos.

  3. Na página Espaço de Nomes dos Hubs de Eventos , selecione Políticas de acesso partilhado no menu esquerdo.

  4. Selecione RootManageSharedAccessKey na lista de políticas.

    Página políticas de acesso partilhado para um espaço de nomes dos Hubs de Eventos

  5. Selecione o botão copiar junto à caixa de texto Cadeia de ligação-chave primária .

  6. Voltar à sua solução do Visual Studio.

  7. Clique com o botão direito do rato em WindTurbineDataGenerator project e selecione Definir como Projeto de arranque.

  8. No projeto WindTurbineDataGenerator, abra program.cs.

  9. Substitua <EVENT HUBS NAMESPACE CONNECTION STRING> pela cadeia de ligação que copiou do portal.

  10. Se tiver utilizado um nome diferente para o hub de eventos que não hubdatamigrationo , 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. Compilar a solução. Execute a aplicaçãoWindTurbineGenerator.exe .

  12. Após alguns minutos, no outro separador do browser onde tem a janela de consulta aberta, consulte a tabela no seu armazém de dados para obter os dados migrados.

    select * from [dbo].[Fact_WindTurbineMetrics]    
    

    Resultados da consulta

Monitorizar a solução

Esta secção ajuda na monitorização ou resolução de problemas da solução.

Ver dados capturados na conta de armazenamento

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

  2. Na página Conta de armazenamento, selecione Explorador de Armazenamento (pré-visualização) no menu esquerdo.

  3. Expanda CONTENTORES DE BLOB e selecione windturbinecapture.

  4. Abra a pasta com o mesmo nome que o espaço de nomes dos Hubs de Eventos no painel direito.

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

  6. Percorra as pastas e verá os ficheiros AVRO. Eis um exemplo:

    Ficheiro capturado no armazenamento

Verifique se o acionador do Event Grid invocou a função

  1. Navegue para o grupo de recursos e selecione a aplicação de funções.

  2. Selecione Funções no menu esquerdo.

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

  4. Na página Função , selecione Monitorizar no menu esquerdo.

  5. Selecione Configurar para configurar o Application Insights para capturar registos de invocação.

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

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

  8. Confirme que a aplicação cliente (WindTurbineDataGenerator) que está a enviar os eventos ainda está em execução. Caso contrário, execute a aplicação.

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

    Invocações de funções

  10. Selecione uma invocação para ver os detalhes.

    O Event Grid distribui dados de eventos para os subscritores. O exemplo seguinte mostra os dados de evento gerados quando a transmissão de dados através de um hub de eventos é capturada num blob. Em particular, repare que a fileUrl propriedade no data objeto aponta para o blob no armazenamento. A aplicação de funções utiliza este URL para obter o ficheiro de blobs com 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 conjunto de SQL dedicado

No separador do browser onde tem a janela de consulta aberta, consulte a tabela no conjunto de SQL dedicado para obter os dados migrados.

Resultados da consulta

Passos seguintes