Share via


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.

Overzicht van toepassing

In dit diagram ziet u de werkstroom van de oplossing die u in deze zelfstudie maakt:

  1. Gegevens die worden verzonden naar een Azure Event Hub worden opgenomen in een Azure Blob-opslag.
  2. Wanneer de gegevensopname is voltooid, wordt er een gebeurtenis gegenereerd en verzonden naar Azure Event Grid.
  3. Azure Event Grid stuurt deze gebeurtenisgegevens door naar een Azure-functie-app.
  4. De functie-app maakt gebruik van de blob-URL in de gebeurtenisgegevens om de blob op te halen uit de opslag.
  5. 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

  1. Meld u aan bij het Azure-portaal.

  2. Selecteer de knop Cloud Shell bovenaan.

    Schermopname van Azure Portal met de knop Cloud Shell.

  3. U ziet onderin de browser dat Cloud Shell wordt geopend.

    1. Als u Cloud Shell voor het eerst gebruikt:
      1. Als u een optie ziet om te selecteren tussen Bash en PowerShell, selecteert u Bash.

      2. Maak een opslagaccount door Opslag maken te selecteren. Voor het opslaan van sommige bestanden in Azure Cloud Shell is een Azure-opslagaccount vereist.

        Schermopname van het maken van opslag voor Cloud Shell.

      3. Wacht totdat Cloud Shell is geïnitialiseerd.

        Schermopname van cloud shell geïnitialiseerd.

  4. Selecteer in Cloud Shell Bash , zoals wordt weergegeven in de bovenstaande afbeelding, als deze nog niet is geselecteerd.

  5. Maak een Azure-resourcegroep door de volgende CLI-opdracht uit te voeren:

    1. 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
      
    2. 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
      }
      
  6. 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:

    1. 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>
      
    2. 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.

  7. 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

  1. Selecteer Resourcegroepen in het linkermenu van Azure Portal.

  2. Filter de lijst met resourcegroepen door de naam van uw resourcegroep in te voeren in het zoekvak.

  3. Selecteer uw resourcegroep in de lijst.

    Schermopname van de selectie van uw resourcegroep.

  4. Controleer of u de volgende resources in de resourcegroep ziet:

    Schermopname van resources in de resourcegroep.

Een tabel maken in Azure Synapse Analytics

In deze sectie maakt u een tabel in de toegewezen SQL-pool die u eerder hebt gemaakt.

  1. Selecteer uw toegewezen SQL-pool in de lijst met resources in de resourcegroep.

  2. Selecteer op de pagina Toegewezen SQL-pool in de sectie Algemene taken in het linkermenu Query-editor (preview).

    Schermopname van de selectie van Power Query-editor op een pagina van een toegewezen SQL-pool in Azure Portal.

  3. 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.

  4. 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);
    

    Schermopname van de queryeditor.

  5. 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

  1. Selecteer op de pagina Resourcegroep de Azure Functions-app in de lijst met resources.

    Schermopname van de selectie van de functie-app in de lijst met resources voor een resourcegroep.

  2. Selecteer Op de pagina Functie-app voor uw app het publicatieprofiel ophalen op de opdrachtbalk.

    Schermopname van de selectie van de knop **Publicatieprofiel ophalen** op de opdrachtbalk van de pagina van de functie-app.

  3. Download en sla het bestand op in de submap FunctionEGDDumper van de map EventHubsCaptureEventGridDemo .

Het publicatieprofiel gebruiken om de Functions-app te publiceren

  1. Start Visual Studio.

  2. 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.

  3. Klik in Solution Explorer met de rechtermuisknop op het project FunctionEGDWDumper en selecteer Publiceren.

  4. Selecteer in het volgende scherm Start of Een publicatieprofiel toevoegen.

  5. Selecteer In het dialoogvenster Publiceren het importprofiel voor Doel en selecteer Volgende.

    Schermopname van de selectie **Profiel importeren** in het dialoogvenster **Publiceren**.

  6. Selecteer op het tabblad Profiel importeren het publicatie-instellingenbestand dat u eerder in de map FunctionEGDWDumper hebt opgeslagen en selecteer vervolgens Voltooien.

  7. Als Visual Studio het profiel heeft geconfigureerd, selecteert u Publish. Controleer of het publiceren is geslaagd.

  8. 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.

    Schermopname van de bevestiging van het maken van een functie.

Nadat de functie is gepubliceerd, kunt u zich abonneren op de gebeurtenis.

Abonneren op de gebeurtenis

  1. Meld u in een nieuw tabblad of nieuw venster van een webbrowser aan bij Azure Portal.

  2. Selecteer Resourcegroepen in het linkermenu van Azure Portal.

  3. Filter de lijst met resourcegroepen door de naam van uw resourcegroep in te voeren in het zoekvak.

  4. Selecteer uw resourcegroep in de lijst.

  5. Selecteer de Event Hubs-naamruimte in de lijst met resources.

  6. Selecteer op de pagina Event Hubs-naamruimte de optie Gebeurtenissen in het linkermenu en selecteer vervolgens + Gebeurtenisabonnement op de werkbalk.

    Schermopname van de pagina Gebeurtenissen voor een Event Hubs-naamruimte met de koppeling Gebeurtenisabonnement toevoegen geselecteerd.

  7. Voer op de pagina Gebeurtenisabonnement maken de volgende stappen uit:

    1. Voer een naam in voor het gebeurtenisabonnement.

    2. 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

    3. Selecteer Azure-functie als het eindpunttype.

    4. Selecteer de koppeling voor het eindpunt.

    5. Voer de volgende stappen uit op de pagina Azure-functie selecteren als deze niet automatisch zijn gevuld.

      1. Selecteer het Azure-abonnement dat de Azure-functie bevat.
      2. Selecteer de resourcegroep voor de functie.
      3. Selecteer de functie-app.
      4. Selecteer de implementatiesite.
      5. Selecteer de functie EventGridTriggerMigrateData.
    6. Selecteer op de pagina Azure-functie selecteren de optie Selectie bevestigen.

    7. Selecteer vervolgens Maken als u terug bent op de pagina Gebeurtenisabonnement maken.

      Schermopname van de pagina Een gebeurtenisabonnement maken.

  8. Controleer of het gebeurtenisabonnement is gemaakt. Ga naar het tabblad Gebeurtenisabonnementen op de pagina Gebeurtenissen voor de Event Hubs-naamruimte.

    Schermopname van het tabblad Gebeurtenisabonnementen op de pagina Gebeurtenissen.

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.

  1. Navigeer in Azure Portal naar uw resourcegroep zoals u eerder hebt gedaan.

  2. Selecteer de Event Hubs-naamruimte.

  3. Op de pagina Event Hubs-naamruimte selecteert u Beleid voor gedeelde toegang in het menu links.

  4. Selecteer RootManageSharedAccessKey in de lijst met beleidsregels.

    Schermopname van de pagina Beleid voor gedeelde toegang voor een Event Hubs-naamruimte.

  5. Selecteer de knop Kopiëren naast het tekstvak Verbindingsreeks - primaire sleutel.

  6. Ga terug naar uw Visual Studio-oplossing.

  7. Klik met de rechtermuisknop op het project WindTurbineDataGenerator en selecteer Instellen als opstartproject.

  8. Open program.cs in het project WindTurbineDataGenerator.

  9. Vervang <EVENT HUBS NAMESPACE CONNECTION STRING> door de verbindingsreeks die u uit de portal hebt gekopieerd.

  10. 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";
    
  11. Bouw de oplossing. Voer de toepassing WindTurbineGenerator.exe uit.

  12. 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]
    

    Schermopname van de queryresultaten.

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

  1. Navigeer naar de resourcegroep en selecteer het opslagaccount dat wordt gebruikt voor het vastleggen van gebeurtenisgegevens.

  2. Selecteer op de pagina Opslagaccount de optie Opslagbrowser in het menu links.

  3. Vouw BLOBCONTAINERS uit en selecteer windturbinecapture.

  4. Open de map met dezelfde naam als uw Event Hubs-naamruimte in het rechterdeelvenster.

  5. Open de map met dezelfde naam als uw event hub (hubdatamigration).

  6. Als u de mappen doorzoekt, zult u zien dat de AVRO-bestanden er zich in bevinden. Hier volgt een voorbeeld:

    Schermopname van het vastgelegde bestand in de opslag.

Controleren of de Event Grid-trigger de functie heeft aangeroepen

  1. Ga naar de resourcegroep en selecteer de functie-app.

  2. Selecteer het tabblad Functions in het middelste deelvenster.

  3. Selecteer de functie EventGridTriggerMigrateData in de lijst.

  4. Selecteer Bewaken op de pagina Functie in het linkermenu.

  5. Selecteer Configureren om Application Insights te configureren voor het vastleggen van aanroeplogboeken.

  6. Maak een nieuwe Application Insights-resource of gebruik een bestaande resource.

  7. Ga terug naar de pagina Bewaken voor de functie.

  8. Controleer of de clienttoepassing (WindTurbineDataGenerator) die de gebeurtenissen verzendt, nog steeds wordt uitgevoerd. Voer de app uit als dat niet het geval is.

  9. Wacht enkele minuten (5 minuten of langer) en selecteer de knop Vernieuwen om functieaanroepen weer te geven.

    Schermopname van de functie-aanroepen.

  10. 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 object data-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.

Schermopname van de uiteindelijke queryresultaten.

Volgende stappen