Esercitazione: Eseguire la migrazione dei dati acquisiti da Hub eventi da Archiviazione di Azure ad Azure Synapse Analytics usando Griglia di eventi di Azure e Funzioni di Azure

In questa esercitazione si eseguirà la migrazione dei dati acquisiti da Hub eventi da Archiviazione BLOB di Azure ad Azure Synapse Analytics, in particolare un pool SQL dedicato, usando Griglia di eventi di Azure e Funzioni di Azure.

Application overview

Questo diagramma illustra il flusso di lavoro della soluzione compilata in questa esercitazione:

  1. I dati inviati a un hub eventi di Azure vengono acquisiti in una risorsa di archiviazione BLOB di Azure.
  2. Al termine dell'acquisizione dei dati, viene generato un evento e inviato a Griglia di eventi di Azure.
  3. Griglia di eventi di Azure inoltra questi dati di evento a un'app per le funzioni di Azure.
  4. L'app per le funzioni usa l'URL del BLOB nei dati dell'evento per recuperare il BLOB dalla risorsa di archiviazione.
  5. L'app per le funzioni esegue la migrazione dei dati del BLOB a un'istanza di Azure Synapse Analytics.

In questo articolo, si eseguono i passaggi seguenti:

  • Distribuire l'infrastruttura necessaria per l'esercitazione
  • Pubblicare il codice in un'app per le funzioni
  • Creare una sottoscrizione di Griglia di eventi
  • Trasmettere in streaming dati di esempio in Hub eventi
  • Verificare i dati acquisiti in Azure Synapse Analytics

Prerequisiti

Per completare l'esercitazione, sono necessari:

  • Questo articolo presuppone che si abbia familiarità con Griglia di eventi e Hub eventi ,in particolare con la funzionalità Di acquisizione. Se non si ha familiarità con Griglia di eventi di Azure, vedere Introduzione alle Griglia di eventi di Azure. Per informazioni sulla funzionalità Acquisizione di Hub eventi di Azure, vedere Acquisire eventi tramite Hub eventi di Azure in Archiviazione BLOB di Azure o azure Data Lake Archiviazione.
  • Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
  • Visual Studio con carichi di lavoro per: sviluppo di desktop .NET, sviluppo di Azure, sviluppo di ASP.NET e Web, sviluppo di Node.js e sviluppo Python.
  • Scaricare il progetto di esempio EventHubsCaptureEventGridDemo sul computer.
    • WindTurbineDataGenerator: un semplice editore che invia i dati della turbina eolica di esempio a un hub eventi con la funzionalità Di acquisizione abilitata.
    • FunctionDWDumper: funzione di Azure che riceve una notifica da Griglia di eventi di Azure quando viene acquisito un file Avro nel BLOB di Archiviazione di Azure. Riceve il percorso URI del BLOB, ne legge il contenuto ed esegue il push dei dati ad Azure Synapse Analytics (pool SQL dedicato).

Distribuire l'infrastruttura

In questo passaggio, implementare l'infrastruttura necessaria con un modello di Resource Manager. Quando si implementa il modello, vengono create le risorse seguenti:

  • Hub eventi con la funzionalità Acquisizione abilitata.
  • Account di archiviazione per i file acquisiti.
  • Piano di servizio app per l'hosting dell'app per le funzioni
  • App per le funzioni per l'elaborazione dell'evento
  • SQL Server per l'hosting del data warehouse
  • Azure Synapse Analytics (pool SQL dedicato) per l'archiviazione dei dati trasferiti

Usare l'interfaccia della riga di comando di Azure per distribuire l'infrastruttura

  1. Accedere al portale di Azure.

  2. Selezionare il pulsante Cloud Shell nella parte superiore.

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

  3. Si noterà che Cloud Shell è aperto nella parte inferiore del browser.

    1. Se si usa Cloud Shell per la prima volta:
      1. Se viene visualizzata un'opzione per selezionare tra Bash e PowerShell, selezionare Bash.

      2. Creare un account di archiviazione selezionando Crea archiviazione. Azure Cloud Shell richiede un account di archiviazione di Azure per archiviare alcuni file.

        Screenshot showing the creation of storage for Cloud Shell.

      3. Attendere finché non viene inizializzata Cloud Shell.

        Screenshot showing the Cloud Shell initialized.

  4. In Cloud Shell selezionare Bash come illustrato nell'immagine precedente, se non è già selezionato.

  5. Creare un gruppo di risorse di Azure eseguendo il comando CLI seguente:

    1. Copiare e incollare il comando seguente nella finestra di Cloud Shell. Se si desidera, modificare il nome del gruppo di risorse e la località.

      az group create -l eastus -n rgDataMigration
      
    2. Premere INVIO.

      Ecco un esempio:

      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. Distribuire tutte le risorse menzionate nella sezione precedente (hub eventi, account di archiviazione, app per le funzioni, Azure Synapse Analytics) eseguendo il comando dell'interfaccia della riga di comando seguente:

    1. Copiare e incollare il comando nella finestra di Cloud Shell. In alternativa, è possibile copiare/incollare in un editor di propria scelta, impostare i valori e quindi copiare il comando in Cloud Shell. Se viene visualizzato un errore a causa di un nome di risorsa di Azure, eliminare il gruppo di risorse, correggere il nome e ripetere il comando.

      Importante

      Specificare i valori per le entità seguenti prima di eseguire il comando:

      • Nome del gruppo di risorse creato in precedenza.
      • Nome dello spazio dei nomi dell'hub eventi.
      • Nome dell'hub eventi. È possibile lasciare il valore così com'è (hubdatamigration).
      • Nome del server SQL.
      • Nome dell'utente e della password SQL.
      • Nome del database.
      • Nome dell'account archiviazione.
      • Nome dell’app per le funzioni.
      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. Premere INVIO nella finestra di Cloud Shell per eseguire il comando. Questo processo potrebbe richiedere del tempo perché si stanno creando una serie di risorse. Nel risultato del comando, assicurarsi che non si siano verificati errori.

  7. Chiudere Cloud Shell selezionando il pulsante Cloud Shell nel portale oppure il pulsante X nell'angolo in alto a destra della finestra Cloud Shell.

Verificare che siano state create le risorse

  1. Nel portale di Azure, selezionare Gruppi di risorse nel menu a sinistra.

  2. Filtrare l'elenco dei gruppi di risorse immettendo il nome del gruppo di risorse nella casella di ricerca.

  3. Selezionare il gruppo di risorse nell'elenco.

    Screenshot showing the selection of your resource group.

  4. Confermare che le risorse seguenti sono visibili nel gruppo di risorse:

    Screenshot showing resources in the resource group.

Creare una tabella in Azure Synapse Analytics

In questa sezione viene creata una tabella nel pool SQL dedicato creato in precedenza.

  1. Nell'elenco di risorse nel gruppo di risorse selezionare il pool SQL dedicato.

  2. Nel menu sinistro della sezione Attività comuni nella pagina Pool SQL dedicato selezionare Editor di query (anteprima).

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

  3. Immettere il nome dell'utente e la password per il server SQL e selezionare OK. Se viene visualizzato un messaggio per consentire al client di accedere a SQL Server, selezionare Allowlist IP your IP Address> on server your SQL Server (Consenti ip <ip nel server <SQL Server>) e quindi selezionare OK.

  4. Nella finestra di query, copiare ed eseguire lo script SQL seguente:

    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. Mantenere questa scheda o finestra aperta in modo che sia possibile verificare che i dati vengono creati al termine dell'esercitazione.

Pubblicare l'app Funzioni di Azure

Prima di tutto, ottenere il profilo di pubblicazione per l'app Funzioni dal portale di Azure. Usare quindi il profilo di pubblicazione per pubblicare il progetto o l'app Funzioni di Azure da Visual Studio.

Recuperare il profilo di pubblicazione

  1. Nella pagina Gruppo di risorse selezionare l'app Funzioni di Azure nell'elenco delle risorse.

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

  2. Nella pagina App per le funzioni per l'app selezionare Recupera profilo di pubblicazione sulla barra dei comandi.

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

  3. Scaricare e salvare il file nella sottocartella FunctionEGDDumper della cartella EventHubsCaptureEventGridDemo .

Usare il profilo di pubblicazione per pubblicare l'app Funzioni

  1. Avviare Visual Studio.

  2. Aprire la soluzione EventHubsCaptureEventGridDemo.sln scaricata dal GitHub come parte dei prerequisiti. È possibile trovarla nella cartella /samples/e2e/EventHubsCaptureEventGridDemo.

  3. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto FunctionEGDWDumper e scegliere Pubblica.

  4. Nella schermata seguente selezionare Avvia o Aggiungi un profilo di pubblicazione.

  5. Nella finestra di dialogo Pubblica selezionare Importa profilo per Destinazione e selezionare Avanti.

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

  6. Nella scheda Importa profilo selezionare il file delle impostazioni di pubblicazione salvato in precedenza nella cartella FunctionEGDWDumper e quindi selezionare Fine.

  7. Quando il profilo è stato configurato automaticamente in Visual Studio, selezionare Pubblica. Verificare che la pubblicazione sia stata completata.

  8. Nel Web browser in cui è aperta la pagina Funzione di Azure selezionare Funzioni nel riquadro centrale. Verificare che la funzione EventGridTriggerMigrateData sia visualizzata nell'elenco. Se non è visualizzata, provare a eseguirne di nuovo la pubblicazione in Visual Studio e quindi aggiornare la pagina nel portale.

    Screenshot showing the confirmation of function creation.

Dopo aver pubblicato la funzione, si è pronti per sottoscrivere l'evento.

Sottoscrivere l'evento

  1. In una nuova scheda o in una nuova finestra di un Web browser accedere al portale di Azure.

  2. Nel portale di Azure, selezionare Gruppi di risorse nel menu a sinistra.

  3. Filtrare l'elenco dei gruppi di risorse immettendo il nome del gruppo di risorse nella casella di ricerca.

  4. Selezionare il gruppo di risorse nell'elenco.

  5. Selezionare Spazio dei nomi di Hub eventi nell'elenco di risorse.

  6. Nella pagina Spazio dei nomi di Hub eventi selezionare Eventi nel menu sinistro e quindi + Sottoscrizione di eventi sulla barra degli strumenti.

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

  7. Nella pagina Crea sottoscrizione di eventi procedere come segue:

    1. Immettere un nome per la sottoscrizione di eventi.

    2. Immettere un nome per l'argomento di sistema. Un argomento di sistema fornisce al mittente un endpoint per l'invio di eventi. Per altre informazioni, vedere Argomenti di sistema

    3. Per Tipo di endpoint, selezionare Funzione di Azure.

    4. Per Endpoint, selezionare il collegamento.

    5. Nella pagina Seleziona funzione di Azure seguire questa procedura se i campi non vengono automaticamente compilati.

      1. Selezionare la sottoscrizione di Azure che include la funzione di Azure.
      2. Selezionare il gruppo di risorse per la funzione.
      3. Selezionare l'app per le funzioni.
      4. Selezionare lo slot di distribuzione.
      5. Selezionare la funzione EventGridTriggerMigrateData.
    6. Nella pagina Seleziona funzione di Azure selezionare Conferma selezione.

    7. Quindi di nuovo nella pagina Crea sottoscrizione di eventi selezionare Crea.

      Screenshot of the Create an event subscription page.

  8. Verificare che la sottoscrizione di eventi sia stata creata. Passare alla scheda Sottoscrizione di eventi della scheda Eventi per lo spazio dei nomi di Hub eventi.

    Screenshot showing the Event Subscriptions tab on the Events page.

Eseguire l'app per generare i dati

È stata completata la configurazione dell'hub eventi, del pool SQL dedicato (in precedenza SQL Data Warehouse), dell'app per le funzioni di Azure e della sottoscrizione di eventi. Prima di eseguire un'applicazione che genera i dati per l'hub eventi, è necessario configurare alcuni valori.

  1. Nel portale di Azure, passare al gruppo di risorse come in precedenza.

  2. Selezionare lo spazio dei nomi di Hub eventi.

  3. Nella pagina Spazio dei nomi di Hub eventi, selezionare Criteri di accesso condivisi nel menu a sinistra.

  4. Selezionare RootManageSharedAccessKey nell'elenco dei criteri.

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

  5. Selezionare il pulsante di copia accanto alla casella di testo Chiave primaria della stringa di connessione.

  6. Tornare alla soluzione Visual Studio.

  7. Fare clic con il pulsante destro sul progetto WindTurbineDataGenerator e scegliere Imposta come progetto di avvio.

  8. Nel progetto WindTurbineDataGenerator aprire program.cs.

  9. Sostituire <EVENT HUBS NAMESPACE CONNECTION STRING> con la stringa di connessione copiata dal portale.

  10. Se è stato usato un nome diverso per l'hub eventi diverso da hubdatamigration, sostituire <EVENT HUB NAME> con il nome dell'hub eventi.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. Compilare la soluzione. Eseguire l'applicazione WindTurbineGenerator.exe.

  12. Dopo un paio di minuti, nell'altra scheda del browser in cui è aperta la finestra della query, eseguire una query sulla tabella del data warehouse per trovare i dati trasferiti.

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    Screenshot showing the query results.

Monitorare la soluzione

Questa sezione illustra come monitorare o risolvere i problemi della soluzione.

Visualizzare i dati acquisiti nell'account di archiviazione

  1. Passare al gruppo di risorse e selezionare l'account di archiviazione usato per l'acquisizione dei dati degli eventi.

  2. Nella pagina Archiviazione account selezionare Archiviazione browser nel menu a sinistra.

  3. Espandere Contenitori BLOB e selezionare windturbinecapture.

  4. Aprire la cartella con lo stesso nome dello spazio dei nomi di Hub eventi nel riquadro destro.

  5. Aprire la cartella con lo stesso nome dell'hub eventi (hubdatamigration).

  6. Scorrere le cartelle fino a visualizzare i file AVRO. Ecco un esempio:

    Screenshot showing the captured file in the storage.

Verificare che il trigger di Griglia di eventi abbia richiamato la funzione

  1. Passare al gruppo di risorse e selezionare l'app per le funzioni.

  2. Selezionare la scheda Funzioni nel riquadro centrale.

  3. Selezionare la funzione EventGridTriggerMigrateData nell'elenco.

  4. Nella pagina Funzione selezionare Monitoraggio nel menu sinistro.

  5. Selezionare Configura per configurare Application Insights in modo da acquisire il log di chiamate.

  6. Creare una nuova risorsa di Application Insights o selezionarne una esistente.

  7. Tornare nella pagina Monitoraggio per la funzione.

  8. Verificare che l'applicazione client (WindTurbineDataGenerator) che invia gli eventi sia ancora in esecuzione. In caso contrario, eseguire l'app.

  9. Attendere almeno 5 minuti e quindi selezionare il pulsante Aggiorna per visualizzare le chiamate alla funzione.

    Screenshot showing the Function invocations.

  10. Selezionare una chiamata per visualizzare i dettagli.

    Griglia di eventi distribuisce i dati dell'evento ai sottoscrittori. L'esempio seguente mostra i dati di evento generati quando i dati trasmessi attraverso un hub eventi vengono acquisiti in un BLOB. In particolare, si noti la fileUrl proprietà nei data punti oggetto nel BLOB nella risorsa di archiviazione. L'app per le funzioni usa questo URL per recuperare il file BLOB con i dati acquisiti.

    {
      "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"
    }
    

Verificare che i dati siano archiviati nel pool SQL dedicato

Nella scheda del browser in cui è aperta la finestra della query, eseguire una query sulla tabella del pool SQL dedicato per trovare i dati trasferiti.

Screenshot showing the final query results.

Passaggi successivi