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.
Questo diagramma illustra il flusso di lavoro della soluzione compilata in questa esercitazione:
- I dati inviati a un hub eventi di Azure vengono acquisiti in una risorsa di archiviazione BLOB di Azure.
- Al termine dell'acquisizione dei dati, viene generato un evento e inviato a Griglia di eventi di Azure.
- Griglia di eventi di Azure inoltra questi dati di evento a un'app per le funzioni di Azure.
- L'app per le funzioni usa l'URL del BLOB nei dati dell'evento per recuperare il BLOB dalla risorsa di archiviazione.
- 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
Accedere al portale di Azure.
Selezionare il pulsante Cloud Shell nella parte superiore.
Si noterà che Cloud Shell è aperto nella parte inferiore del browser.
- Se si usa Cloud Shell per la prima volta:
Se viene visualizzata un'opzione per selezionare tra Bash e PowerShell, selezionare Bash.
Creare un account di archiviazione selezionando Crea archiviazione. Azure Cloud Shell richiede un account di archiviazione di Azure per archiviare alcuni file.
Attendere finché non viene inizializzata Cloud Shell.
- Se si usa Cloud Shell per la prima volta:
In Cloud Shell selezionare Bash come illustrato nell'immagine precedente, se non è già selezionato.
Creare un gruppo di risorse di Azure eseguendo il comando CLI seguente:
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
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 }
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:
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>
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.
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
Nel portale di Azure, selezionare Gruppi di risorse nel menu a sinistra.
Filtrare l'elenco dei gruppi di risorse immettendo il nome del gruppo di risorse nella casella di ricerca.
Selezionare il gruppo di risorse nell'elenco.
Confermare che le risorse seguenti sono visibili 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.
Nell'elenco di risorse nel gruppo di risorse selezionare il pool SQL dedicato.
Nel menu sinistro della sezione Attività comuni nella pagina Pool SQL dedicato selezionare Editor di query (anteprima).
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.
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);
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
Nella pagina Gruppo di risorse selezionare l'app Funzioni di Azure nell'elenco delle risorse.
Nella pagina App per le funzioni per l'app selezionare Recupera profilo di pubblicazione sulla barra dei comandi.
Scaricare e salvare il file nella sottocartella FunctionEGDDumper della cartella EventHubsCaptureEventGridDemo .
Usare il profilo di pubblicazione per pubblicare l'app Funzioni
Avviare Visual Studio.
Aprire la soluzione EventHubsCaptureEventGridDemo.sln scaricata dal GitHub come parte dei prerequisiti. È possibile trovarla nella cartella
/samples/e2e/EventHubsCaptureEventGridDemo
.In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto FunctionEGDWDumper e scegliere Pubblica.
Nella schermata seguente selezionare Avvia o Aggiungi un profilo di pubblicazione.
Nella finestra di dialogo Pubblica selezionare Importa profilo per Destinazione e selezionare Avanti.
Nella scheda Importa profilo selezionare il file delle impostazioni di pubblicazione salvato in precedenza nella cartella FunctionEGDWDumper e quindi selezionare Fine.
Quando il profilo è stato configurato automaticamente in Visual Studio, selezionare Pubblica. Verificare che la pubblicazione sia stata completata.
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.
Dopo aver pubblicato la funzione, si è pronti per sottoscrivere l'evento.
Sottoscrivere l'evento
In una nuova scheda o in una nuova finestra di un Web browser accedere al portale di Azure.
Nel portale di Azure, selezionare Gruppi di risorse nel menu a sinistra.
Filtrare l'elenco dei gruppi di risorse immettendo il nome del gruppo di risorse nella casella di ricerca.
Selezionare il gruppo di risorse nell'elenco.
Selezionare Spazio dei nomi di Hub eventi nell'elenco di risorse.
Nella pagina Spazio dei nomi di Hub eventi selezionare Eventi nel menu sinistro e quindi + Sottoscrizione di eventi sulla barra degli strumenti.
Nella pagina Crea sottoscrizione di eventi procedere come segue:
Immettere un nome per la sottoscrizione di eventi.
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
Per Tipo di endpoint, selezionare Funzione di Azure.
Per Endpoint, selezionare il collegamento.
Nella pagina Seleziona funzione di Azure seguire questa procedura se i campi non vengono automaticamente compilati.
- Selezionare la sottoscrizione di Azure che include la funzione di Azure.
- Selezionare il gruppo di risorse per la funzione.
- Selezionare l'app per le funzioni.
- Selezionare lo slot di distribuzione.
- Selezionare la funzione EventGridTriggerMigrateData.
Nella pagina Seleziona funzione di Azure selezionare Conferma selezione.
Quindi di nuovo nella pagina Crea sottoscrizione di eventi selezionare Crea.
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.
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.
Nel portale di Azure, passare al gruppo di risorse come in precedenza.
Selezionare lo spazio dei nomi di Hub eventi.
Nella pagina Spazio dei nomi di Hub eventi, selezionare Criteri di accesso condivisi nel menu a sinistra.
Selezionare RootManageSharedAccessKey nell'elenco dei criteri.
Selezionare il pulsante di copia accanto alla casella di testo Chiave primaria della stringa di connessione.
Tornare alla soluzione Visual Studio.
Fare clic con il pulsante destro sul progetto WindTurbineDataGenerator e scegliere Imposta come progetto di avvio.
Nel progetto WindTurbineDataGenerator aprire program.cs.
Sostituire
<EVENT HUBS NAMESPACE CONNECTION STRING>
con la stringa di connessione copiata dal portale.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";
Compilare la soluzione. Eseguire l'applicazione WindTurbineGenerator.exe.
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]
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
Passare al gruppo di risorse e selezionare l'account di archiviazione usato per l'acquisizione dei dati degli eventi.
Nella pagina Account di archiviazione selezionare Browser di archiviazione nel menu a sinistra.
Espandere Contenitori BLOB e selezionare windturbinecapture.
Aprire la cartella con lo stesso nome dello spazio dei nomi di Hub eventi nel riquadro destro.
Aprire la cartella con lo stesso nome dell'hub eventi (hubdatamigration).
Scorrere le cartelle fino a visualizzare i file AVRO. Ecco un esempio:
Verificare che il trigger di Griglia di eventi abbia richiamato la funzione
Passare al gruppo di risorse e selezionare l'app per le funzioni.
Selezionare la scheda Funzioni nel riquadro centrale.
Selezionare la funzione EventGridTriggerMigrateData nell'elenco.
Nella pagina Funzione selezionare Monitoraggio nel menu sinistro.
Selezionare Configura per configurare Application Insights in modo da acquisire il log di chiamate.
Creare una nuova risorsa di Application Insights o selezionarne una esistente.
Tornare nella pagina Monitoraggio per la funzione.
Verificare che l'applicazione client (WindTurbineDataGenerator) che invia gli eventi sia ancora in esecuzione. In caso contrario, eseguire l'app.
Attendere almeno 5 minuti e quindi selezionare il pulsante Aggiorna per visualizzare le chiamate alla funzione.
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à neidata
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.
Passaggi successivi
- Per altre informazioni sulla configurazione e l'esecuzione dell'esempio, vedere l'esempio della funzionalità di acquisizione di Hub eventi e della Griglia di eventi.
- In questa esercitazione è stata creata una sottoscrizione di eventi per l'evento
CaptureFileCreated
. Per altre informazioni su questo evento e tutti gli eventi supportati da Archiviazione BLOB di Azure, vedere Hub eventi di Azure come origine di Griglia di eventi. - Per altre informazioni sulla funzionalità acquisizione di Hub eventi, vedere Acquisire eventi tramite Hub eventi di Azure in Archiviazione BLOB di Azure o Azure Data Lake Storage.