Condividi tramite


Esercitazione: Eseguire la migrazione dei dati acquisiti da Hub eventi da Archiviazione di Azure ad Azure Synapse Analitica 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 Analitica, in particolare un pool SQL dedicato, usando Griglia di eventi di Azure e Funzioni di Azure.

Panoramica dell'applicazione

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 Storage.
  • 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 di portale di Azure che mostra la selezione del pulsante Cloud Shell.

  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 che mostra la creazione dell'archiviazione per Cloud Shell.

      3. Attendere finché non viene inizializzata Cloud Shell.

        Screenshot che mostra l'inizializzazione di Cloud Shell.

  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 che mostra la selezione del gruppo di risorse.

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

    Screenshot che mostra le risorse nel gruppo di risorse.

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 che mostra la selezione di Editor di query in una pagina Pool SQL dedicato nel portale di Azure.

  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 che mostra l'editor di query.

  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 che mostra la selezione dell'app per le funzioni nell'elenco di risorse per un gruppo di risorse.

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

    Screenshot che mostra la selezione del pulsante **Ottieni profilo di pubblicazione** sulla barra dei comandi della pagina dell'app per le funzioni.

  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 che mostra la selezione **Importa profilo** nella finestra di dialogo **Pubblica**.

  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 che mostra la conferma della creazione della funzione.

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 della pagina Eventi per uno spazio dei nomi di Hub eventi con il collegamento Aggiungi sottoscrizione di eventi selezionato.

  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 della pagina Crea una sottoscrizione di eventi.

  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 che mostra la scheda Sottoscrizioni di eventi nella pagina Eventi.

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 che mostra la pagina Criteri di accesso condiviso per uno spazio dei nomi di Hub eventi.

  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 che mostra i risultati della query.

Importante

Si usa stringa di connessione per eseguire l'autenticazione per Hub eventi di Azure spazio dei nomi per semplificare l'esercitazione. È consigliabile usare l'autenticazione MICROSOFT Entra ID negli ambienti di produzione. Quando si usa un'applicazione, è possibile abilitare l'identità gestita per l'applicazione e assegnare all'identità un ruolo appropriato (Hub eventi di Azure Proprietario, Hub eventi di Azure Mittente dati o ricevitore di dati Hub eventi di Azure) nello spazio dei nomi di Hub eventi. Per altre informazioni, vedere Autorizzare l'accesso a Hub eventi usando Microsoft Entra ID.

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 Account di archiviazione selezionare Browser di archiviazione 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 che mostra il file acquisito nella risorsa di archiviazione.

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 che mostra le chiamate di funzione.

  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 che mostra i risultati finali della query.

Passaggi successivi