Zelfstudie: Vastgelegde Gegevens van Event Hubs migreren van Azure Storage naar Azure Synapse Analytics met behulp van Azure Event Grid en Azure Functions
In deze zelfstudie migreert u vastgelegde Event Hubs-gegevens van Azure Blob Storage naar Azure Synapse Analytics, met name een toegewezen SQL-pool, met behulp van Azure Event Grid en Azure Functions.
In dit diagram ziet u de werkstroom van de oplossing die u in deze zelfstudie maakt:
- Gegevens die worden verzonden naar een Azure Event Hub worden opgenomen in een Azure Blob-opslag.
- Wanneer de gegevensopname is voltooid, wordt er een gebeurtenis gegenereerd en verzonden naar Azure Event Grid.
- Azure Event Grid stuurt deze gebeurtenisgegevens door naar een Azure-functie-app.
- De functie-app maakt gebruik van de blob-URL in de gebeurtenisgegevens om de blob op te halen uit de opslag.
- De functie-app migreert de blob-gegevens naar Azure Synapse Analytics.
In dit artikel voert u de volgende stappen uit:
- Voor de zelfstudie de vereiste infrastructuur implementeren
- Code publiceren naar een Azure Functions-app
- Een Event Grid-abonnement maken
- Voorbeeldgegevens streamen naar Event Hubs
- Vastgelegde gegevens verifiëren in Azure Synapse Analytics
Vereisten
U hebt het volgende nodig om deze zelfstudie te voltooien:
- In dit artikel wordt ervan uitgegaan dat u bekend bent met Event Grid en Event Hubs (met name de functie Capture). Zie Inleiding tot Azure Event Grid als u niet bekend bent met Azure Event Grid. Zie Capture-gebeurtenissen via Azure Event Hubs in Azure Blob Storage of Azure Data Lake Storage voor meer informatie over de functie Capture van Azure Event Hubs.
- Een Azure-abonnement. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
- Visual Studio met workloads voor: .NET-desktopontwikkeling, Azure-ontwikkeling, ASP.NET en webontwikkeling, Node.js ontwikkeling en Python-ontwikkeling.
- Download het voorbeeldproject EventHubsCaptureEventGridDemo op uw computer.
- WindTurbineDataGenerator : een eenvoudige uitgever die voorbeeldgegevens van windturbines verzendt naar een Event Hub met de functie Capture ingeschakeld.
- FunctionDWDumper: een Azure-functie die een melding van Azure Event Grid ontvangt wanneer een Avro-bestand wordt vastgelegd in de Azure Storage-blob. Het URI-pad van de blob wordt ontvangen en de inhoud wordt gelezen, waarna deze gegevens naar Azure Synapse Analytics (toegewezen SQL-pool) worden gepusht.
De infrastructuur implementeren
In deze stap implementeert u de vereiste infrastructuur met behulp van een Resource Manager-sjabloon. Wanneer u de sjabloon implementeert, worden de volgende resources gemaakt:
- Gebeurtenishub waarbij de functie Capture is ingeschakeld.
- Opslagaccount voor de opgenomen bestanden.
- App Service-plan voor het hosten van de functie-app
- Functie-app voor het verwerken van de gebeurtenis
- SQL Server voor het hosten van het datawarehouse
- Azure Synapse Analytics (toegewezen SQL-pool) voor het opslaan van de gemigreerde gegevens
Met de Azure CLI de infrastructuur implementeren
Meld u aan bij het Azure-portaal.
Selecteer de knop Cloud Shell bovenaan.
U ziet onderin de browser dat Cloud Shell wordt geopend.
- Als u Cloud Shell voor het eerst gebruikt:
Selecteer in Cloud Shell Bash , zoals wordt weergegeven in de bovenstaande afbeelding, als deze nog niet is geselecteerd.
Maak een Azure-resourcegroep door de volgende CLI-opdracht uit te voeren:
Kopieer en plak de volgende opdracht in het Cloud Shell-venster. Wijzig de naam en locatie van de resourcegroep als u dat wilt.
az group create -l eastus -n rgDataMigration
Druk op ENTER.
Hier volgt een voorbeeld:
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 }
Implementeer alle resources die worden vermeld in de vorige sectie (gebeurtenishub, opslagaccount, functie-app, Azure Synapse Analytics) door de volgende CLI-opdracht uit te voeren:
Kopieer en plak de opdracht in het Cloud Shell-venster. U kunt ook kopiëren/plakken in een editor van uw keuze, waarden instellen en vervolgens de opdracht kopiëren naar de Cloud Shell. Als er een fout wordt weergegeven vanwege een Azure-resourcenaam, verwijdert u de resourcegroep, lost u de naam op en voert u de opdracht opnieuw uit.
Belangrijk
Geef waarden op voor de volgende entiteiten voordat u de opdracht uitvoert:
- Naam van de resourcegroep die u eerder hebt gemaakt.
- Naam voor de naamruimte van de gebeurtenishub.
- Naam voor de gebeurtenishub. U kunt de waarde laten zoals deze is (hubdatamigration).
- Naam voor de SQL-server.
- Naam en wachtwoord van de SQL-gebruiker.
- Naam voor de database.
- Naam van het opslagaccount.
- Naam voor de functie-app.
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>
Druk op Enter in het Cloud Shell-venster om de opdracht uit te voeren. Dit proces kan enige tijd duren omdat u een aantal resources maakt. Controleer in het resultatenvenster van de opdracht of er geen fouten zijn opgetreden.
Sluit Cloud Shell met de knop Cloud Shell in de portal of met de knop X in de rechterbovenhoek van het Cloud Shell-venster.
Controleer of de resources zijn gemaakt
Selecteer Resourcegroepen in het linkermenu van Azure Portal.
Filter de lijst met resourcegroepen door de naam van uw resourcegroep in te voeren in het zoekvak.
Selecteer uw resourcegroep in de lijst.
Controleer of u de volgende resources in de resourcegroep ziet:
Een tabel maken in Azure Synapse Analytics
In deze sectie maakt u een tabel in de toegewezen SQL-pool die u eerder hebt gemaakt.
Selecteer uw toegewezen SQL-pool in de lijst met resources in de resourcegroep.
Selecteer op de pagina Toegewezen SQL-pool in de sectie Algemene taken in het linkermenu Query-editor (preview).
Voer de naam van gebruiker en het wachtwoord voor de SQL-server in, en selecteer OK. Als u een bericht ziet over het toestaan van toegang tot de SQL-server, selecteert u Allowlist IP <uw IP-adres> op de server <van uw SQL-server> en selecteert u OK.
Kopieer en plak het volgende SQL-script in het queryvenster:
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);
Houd dit tabblad of venster geopend zodat u kunt controleren of de gegevens aan het einde van de zelfstudie zijn gemaakt.
De Azure Functions-app publiceren
Haal eerst het publicatieprofiel voor de Functions-app op vanuit Azure Portal. Gebruik vervolgens het publicatieprofiel om het Azure Functions-project of de app vanuit Visual Studio te publiceren.
Het publicatieprofiel ophalen
Selecteer op de pagina Resourcegroep de Azure Functions-app in de lijst met resources.
Selecteer Op de pagina Functie-app voor uw app het publicatieprofiel ophalen op de opdrachtbalk.
Download en sla het bestand op in de submap FunctionEGDDumper van de map EventHubsCaptureEventGridDemo .
Het publicatieprofiel gebruiken om de Functions-app te publiceren
Start Visual Studio.
Open de oplossing EventHubsCaptureEventGridDemo.sln, die u eerder hebt gedownload van de GitHub-opslagplaats als onderdeel van de vereisten. U kunt deze vinden in de map
/samples/e2e/EventHubsCaptureEventGridDemo
.Klik in Solution Explorer met de rechtermuisknop op het project FunctionEGDWDumper en selecteer Publiceren.
Selecteer in het volgende scherm Start of Een publicatieprofiel toevoegen.
Selecteer In het dialoogvenster Publiceren het importprofiel voor Doel en selecteer Volgende.
Selecteer op het tabblad Profiel importeren het publicatie-instellingenbestand dat u eerder in de map FunctionEGDWDumper hebt opgeslagen en selecteer vervolgens Voltooien.
Als Visual Studio het profiel heeft geconfigureerd, selecteert u Publish. Controleer of het publiceren is geslaagd.
Selecteer Functies in het middelste deelvenster in de webbrowser waarop de azure-functiepagina is geopend. Controleer of de functie EventGridTriggerMigrateData wordt weergegeven in de lijst. Als dat niet het geval is, probeer dan opnieuw te publiceren vanuit Visual Studio en vernieuw vervolgens de pagina in de portal.
Nadat de functie is gepubliceerd, kunt u zich abonneren op de gebeurtenis.
Abonneren op de gebeurtenis
Meld u in een nieuw tabblad of nieuw venster van een webbrowser aan bij Azure Portal.
Selecteer Resourcegroepen in het linkermenu van Azure Portal.
Filter de lijst met resourcegroepen door de naam van uw resourcegroep in te voeren in het zoekvak.
Selecteer uw resourcegroep in de lijst.
Selecteer de Event Hubs-naamruimte in de lijst met resources.
Selecteer op de pagina Event Hubs-naamruimte de optie Gebeurtenissen in het linkermenu en selecteer vervolgens + Gebeurtenisabonnement op de werkbalk.
Voer op de pagina Gebeurtenisabonnement maken de volgende stappen uit:
Voer een naam in voor het gebeurtenisabonnement.
Voer een naam in voor het systeemonderwerp. Een systeemonderwerp biedt een eindpunt voor het verzenden van gebeurtenissen door de afzender. Zie Systeemonderwerpen voor meer informatie
Selecteer Azure-functie als het eindpunttype.
Selecteer de koppeling voor het eindpunt.
Voer de volgende stappen uit op de pagina Azure-functie selecteren als deze niet automatisch zijn gevuld.
- Selecteer het Azure-abonnement dat de Azure-functie bevat.
- Selecteer de resourcegroep voor de functie.
- Selecteer de functie-app.
- Selecteer de implementatiesite.
- Selecteer de functie EventGridTriggerMigrateData.
Selecteer op de pagina Azure-functie selecteren de optie Selectie bevestigen.
Selecteer vervolgens Maken als u terug bent op de pagina Gebeurtenisabonnement maken.
Controleer of het gebeurtenisabonnement is gemaakt. Ga naar het tabblad Gebeurtenisabonnementen op de pagina Gebeurtenissen voor de Event Hubs-naamruimte.
De app uitvoeren om gegevens te genereren
U bent nu klaar met het instellen van uw event hub, toegewezen SQL-pool (voorheen SQL Data Warehouse), Azure-functie-app en gebeurtenisabonnement. Voordat u een toepassing gaat uitvoeren die gegevens voor Event Hub genereert, moet u nog enkele waarden configureren.
Navigeer in Azure Portal naar uw resourcegroep zoals u eerder hebt gedaan.
Selecteer de Event Hubs-naamruimte.
Op de pagina Event Hubs-naamruimte selecteert u Beleid voor gedeelde toegang in het menu links.
Selecteer RootManageSharedAccessKey in de lijst met beleidsregels.
Selecteer de knop Kopiëren naast het tekstvak Verbindingsreeks - primaire sleutel.
Ga terug naar uw Visual Studio-oplossing.
Klik met de rechtermuisknop op het project WindTurbineDataGenerator en selecteer Instellen als opstartproject.
Open program.cs in het project WindTurbineDataGenerator.
Vervang
<EVENT HUBS NAMESPACE CONNECTION STRING>
door de verbindingsreeks die u uit de portal hebt gekopieerd.Als u een andere naam hebt gebruikt voor de Event Hub dan
hubdatamigration
, vervangt u deze door<EVENT HUB NAME>
de naam van de Event Hub.private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/..."; private const string EventHubName = "hubdatamigration";
Bouw de oplossing. Voer de toepassing WindTurbineGenerator.exe uit.
Na een paar minuten kunt u in het andere browsertabblad waar u het queryvenster hebt geopend, de tabel in uw datawarehouse doorzoeken op de gemigreerde gegevens.
select * from [dbo].[Fact_WindTurbineMetrics]
Belangrijk
We gebruiken verbindingsreeks om te verifiëren bij de Azure Event Hubs-naamruimte om de zelfstudie eenvoudig te houden. U wordt aangeraden Microsoft Entra ID-verificatie te gebruiken in productieomgevingen. Wanneer u een toepassing gebruikt, kunt u beheerde identiteit voor de toepassing inschakelen en de identiteit toewijzen aan een geschikte rol (Azure Event Hubs-eigenaar, Azure Event Hubs-gegevenszender of Azure Event Hubs-gegevensontvanger) in de Event Hubs-naamruimte. Zie Toegang tot Event Hubs autoriseren met behulp van Microsoft Entra-id voor meer informatie.
De oplossing bewaken
Deze sectie helpt u bij het bewaken van de oplossing of het oplossen van problemen ermee.
Vastgelegde gegevens in het opslagaccount weergeven
Navigeer naar de resourcegroep en selecteer het opslagaccount dat wordt gebruikt voor het vastleggen van gebeurtenisgegevens.
Selecteer op de pagina Opslagaccount de optie Opslagbrowser in het menu links.
Vouw BLOBCONTAINERS uit en selecteer windturbinecapture.
Open de map met dezelfde naam als uw Event Hubs-naamruimte in het rechterdeelvenster.
Open de map met dezelfde naam als uw event hub (hubdatamigration).
Als u de mappen doorzoekt, zult u zien dat de AVRO-bestanden er zich in bevinden. Hier volgt een voorbeeld:
Controleren of de Event Grid-trigger de functie heeft aangeroepen
Ga naar de resourcegroep en selecteer de functie-app.
Selecteer het tabblad Functions in het middelste deelvenster.
Selecteer de functie EventGridTriggerMigrateData in de lijst.
Selecteer Bewaken op de pagina Functie in het linkermenu.
Selecteer Configureren om Application Insights te configureren voor het vastleggen van aanroeplogboeken.
Maak een nieuwe Application Insights-resource of gebruik een bestaande resource.
Ga terug naar de pagina Bewaken voor de functie.
Controleer of de clienttoepassing (WindTurbineDataGenerator) die de gebeurtenissen verzendt, nog steeds wordt uitgevoerd. Voer de app uit als dat niet het geval is.
Wacht enkele minuten (5 minuten of langer) en selecteer de knop Vernieuwen om functieaanroepen weer te geven.
Selecteer een aanroep om details ervan weer te geven.
Event Grid distribueert gebeurtenisgegevens naar de abonnees. In het volgende voorbeeld ziet u hoe gebeurtenisgegevens worden gegenereerd wanneer het streamen van gegevens via een gebeurtenishub wordt vastgelegd in een blob. Merk op dat de eigenschap
fileUrl
in het objectdata
-verwijst naar de blob in de opslag. De functie-app maakt gebruik van deze URL om het blob-bestand met de opgenomen gegevens op te halen.{ "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" }
Controleren of de gegevens zijn opgeslagen in de toegewezen SQL-pool
Zoek op het browsertabblad waar u het queryvenster hebt geopend, in de tabel in uw toegewezen SQL-pool naar de gemigreerde gegevens.
Volgende stappen
- Zie het Engelstalige artikel An overview, how Event Hubs Capture integrates with Event Grid voor meer informatie over het instellen en uitvoeren van het voorbeeld.
- In deze zelfstudie hebt u een gebeurtenisabonnement voor de
CaptureFileCreated
gebeurtenis gemaakt. Zie Azure Event Hubs als een Event Grid-bron voor meer informatie over deze gebeurtenis en alle gebeurtenissen die worden ondersteund door Azure Blob Storage. - Zie Capture-gebeurtenissen via Azure Event Hubs in Azure Blob Storage of Azure Data Lake Storage voor meer informatie over de functie Event Hubs Capture.