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.

Application overview

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.

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

  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.

        Screenshot showing the creation of storage for Cloud Shell.

      3. Wacht totdat Cloud Shell is geïnitialiseerd.

        Screenshot showing the Cloud Shell initialized.

  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.

    Screenshot showing the selection of your resource group.

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

    Screenshot showing resources in the resource group.

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

    Screenshot showing the selection of Query Editor on a Dedicated SQL pool page in the 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);
    

    Screenshot showing the query editor.

  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.

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

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

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

  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.

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

  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.

    Screenshot showing the confirmation of function creation.

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.

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

  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.

      Screenshot of the Create an event subscription page.

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

    Screenshot showing the Event Subscriptions tab on the Events page.

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.

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

  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]
    

    Screenshot showing the query results.

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:

    Screenshot showing the captured file in the storage.

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.

    Screenshot showing the Function invocations.

  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.

Screenshot showing the final query results.

Volgende stappen