Självstudie: Migrera Event Hubs-insamlade data från Azure Storage till Azure Synapse Analytics med hjälp av Azure Event Grid och Azure Functions

I den här självstudien migrerar du Event Hubs-insamlade data från Azure Blob Storage till Azure Synapse Analytics, särskilt en dedikerad SQL-pool, med hjälp av Azure Event Grid och Azure Functions.

Application overview

Diagrammet visar arbetsflödet för lösningen som du skapar i självstudien:

  1. Data som skickas till en Azure-händelsehubb samlas i en Azure-blobblagring.
  2. När datainsamlingen är klar genereras en händelse och skickas till Azure Event Grid.
  3. Azure Event Grid vidarebefordrar dessa händelsedata till en Azure-funktionsapp.
  4. Funktionsappen använder blobb-URL:en i händelsedatan till att hämta blobben från lagringen.
  5. Funktionsappen migrerar blobdata till en Azure Synapse Analytics.

I den här självstudien gör du följande:

  • Distribuera den infrastruktur som krävs för självstudien
  • Publicera kod till en Functions-app
  • Skapa en Event Grid-prenumeration
  • Strömma exempeldata till Event Hubs
  • Verifiera insamlade data i Azure Synapse Analytics

Förutsättningar

Du behöver följande för att kunna slutföra den här självstudiekursen:

  • Den här artikeln förutsätter att du är bekant med Event Grid och Event Hubs (särskilt capture-funktionen). Om du inte är bekant med Azure Event Grid kan du läsa Introduktion till Azure Event Grid. Mer information om capture-funktionen i Azure Event Hubs finns i Avbilda händelser via Azure Event Hubs i Azure Blob Storage eller Azure Data Lake Storage.
  • En Azure-prenumeration. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
  • Visual Studio med arbetsbelastningar för: .NET-skrivbordsutveckling, Azure-utveckling, ASP.NET och webbutveckling, Node.js utveckling och Python-utveckling.
  • Ladda ned exempelprojektet EventHubsCaptureEventGridDemo till din dator.
    • WindTurbineDataGenerator – en enkel utgivare som skickar exempeldata från vindkraftverk till en händelsehubb med funktionen Capture aktiverad.
    • FunctionDWDumper – en Azure-funktion som tar emot ett meddelande från Azure Event Grid när en Avro-fil registreras i Azure Storage-bloben. Den tar emot blobens URI-sökväg, läser dess innehåll och skickar dessa data till Azure Synapse Analytics (dedikerad SQL-pool).

Distribuera infrastrukturen

I det här steget distribuerar du den infrastruktur som krävs med en Resource Manager-mall. När du distribuerar mallen skapas följande resurser:

  • Händelsehubb med Capture-funktionen aktiverad.
  • Lagringskonto för hämtade filer.
  • Apptjänstplan som är värd för funktionsappen
  • Funktionsapp för bearbetning av händelsen
  • SQL Server som värd för informationslagret
  • Azure Synapse Analytics (dedikerad SQL-pool) för lagring av migrerade data

Använda Azure CLI för att distribuera infrastrukturen

  1. Logga in på Azure-portalen.

  2. Välj Cloud Shell-knappen överst.

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

  3. Du ser att Cloud Shell öppnas längst ned i webbläsaren.

    1. Om du använder Cloud Shell för första gången:
      1. Om du ser ett alternativ för att välja mellan Bash och PowerShell väljer du Bash.

      2. Skapa ett lagringskonto genom att välja Skapa lagring. Det måste finnas ett Azure-lagringskonto i Azure Cloud Shell för att vissa filer ska kunna lagras.

        Screenshot showing the creation of storage for Cloud Shell.

      3. Vänta tills Cloud Shell har initierats.

        Screenshot showing the Cloud Shell initialized.

  4. I Cloud Shell väljer du Bash enligt bilden ovan, om den inte redan är markerad.

  5. Skapa en Azure-resursgrupp genom att köra följande CLI-kommando:

    1. Kopiera och klistra in följande kommando i Cloud Shell-fönstret. Ändra resursgruppens namn och plats om du vill.

      az group create -l eastus -n rgDataMigration
      
    2. Tryck på RETUR.

      Här är ett exempel:

      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. Distribuera alla resurser som nämns i föregående avsnitt (händelsehubb, lagringskonto, funktionsapp, Azure Synapse Analytics) genom att köra följande CLI-kommando:

    1. Kopiera och klistra in kommandot i Cloud Shell-fönstret. Du kan också kopiera/klistra in i valfri redigerare, ange värden och sedan kopiera kommandot till Cloud Shell. Om du ser ett fel på grund av ett Azure-resursnamn tar du bort resursgruppen, åtgärdar namnet och försöker sedan igen.

      Viktigt!

      Ange värden för följande entiteter innan du kör kommandot:

      • Namn på den resursgrupp som du skapade tidigare.
      • Namn på händelsehubbens namnområde.
      • Namn på händelsehubben. Du kan lämna värdet som det är (hubdatamigration).
      • Namn på SQL-servern.
      • Namn på SQL-användaren och lösenordet.
      • Namnet på databasen.
      • Namn på lagringskontot.
      • Namn på funktionsappen.
      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. Tryck på Retur-tangenten i Cloud Shell-fönstret för att köra kommandot. Den här processen kan ta ett tag eftersom du skapar en massa resurser. Kontrollera att det inte finns några fel i kommandoresultatet.

  7. Stäng Cloud Shell genom att välja knappen Cloud Shell i portalen (eller) X-knappen i det övre högra hörnet i Cloud Shell-fönstret.

Kontrollera att resurserna har skapats

  1. I Azure Portal väljer du Resursgrupper i den vänstra menyn.

  2. Filtrera listan över resursgrupper genom att ange namnet på resursgruppen i sökrutan.

  3. Välj din resursgrupp i listan.

    Screenshot showing the selection of your resource group.

  4. Kontrollera att du ser följande resurser i resursgruppen:

    Screenshot showing resources in the resource group.

Skapa en tabell i Azure Synapse Analytics

I det här avsnittet skapar du en tabell i den dedikerade SQL-pool som du skapade tidigare.

  1. I listan över resurser i resursgruppen väljer du din dedikerade SQL-pool.

  2. På sidan Dedikerad SQL-pool går du till avsnittet Vanliga uppgifter på den vänstra menyn och väljer Frågeredigeraren (förhandsversion).

    Screenshot showing the selection of Query Editor on a Dedicated SQL pool page in the Azure portal.

  3. Ange namnet på användare och lösenord för SQL-servern och välj OK. Om du ser ett meddelande om att tillåta att klienten får åtkomst till SQL-servern väljer du Tillåtlista IP-adress <för DIN IP-adress> på servern <din SQL-server> och väljer sedan OK.

  4. Kopiera och kör följande SQL-skript i frågefönstret:

    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. Låt den här fliken eller fönstret vara öppet så att du kan kontrollera att data har skapats i slutet av självstudien.

Publicera Azure Functions-appen

Hämta först publiceringsprofilen för Functions-appen från Azure-portalen. Använd sedan publiceringsprofilen för att publicera Azure Functions-projektet eller appen från Visual Studio.

Hämta publiceringsprofilen

  1. På sidan Resursgrupp väljer du Azure Functions-appen i listan över resurser.

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

  2. På sidan Funktionsapp för din app väljer du Hämta publiceringsprofil i kommandofältet.

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

  3. Ladda ned och spara filen i undermappen FunctionEGDDumper i mappen EventHubsCaptureEventGridDemo .

Använda publiceringsprofilen för att publicera Functions-appen

  1. Starta Visual Studio.

  2. Öppna lösningen EventHubsCaptureEventGridDemo.sln som du laddade ned från GitHub som en del av förutsättningarna. Du hittar den i /samples/e2e/EventHubsCaptureEventGridDemo mappen .

  3. Högerklicka på FunctionEGDWDumper-projektet i Solution Explorer och välj Publicera.

  4. På följande skärm väljer du Start eller Lägg till en publiceringsprofil.

  5. I dialogrutan Publicera väljer du Importera profil för Mål och väljer Nästa.

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

  6. På fliken Importera profil väljer du den fil för publiceringsinställningar som du sparade tidigare i mappen FunctionEGDWDumper och väljer sedan Slutför.

  7. När profilen har konfigurerats i Visual Studio väljer du Publicera. Bekräfta att publiceringen lyckades.

  8. I webbläsaren där sidan Azure-funktion är öppen väljer du Funktioner i det mellersta fönstret. Bekräfta att funktionen EventGridTriggerMigrateData visas i listan. Om du inte ser det kan du försöka publicera från Visual Studio igen och sedan uppdatera sidan i portalen.

    Screenshot showing the confirmation of function creation.

När du har publicerat funktionen är du redo att prenumerera på händelsen.

Prenumerera på händelsen

  1. Logga in på Azure-portalen på en ny flik eller ett nytt fönster i en webbläsare.

  2. I Azure Portal väljer du Resursgrupper i den vänstra menyn.

  3. Filtrera listan över resursgrupper genom att ange namnet på resursgruppen i sökrutan.

  4. Välj din resursgrupp i listan.

  5. Välj Event Hubs-namnområdet i listan över resurser.

  6. På sidan Event Hubs-namnområde väljer du Händelser på den vänstra menyn och väljer sedan + Händelseprenumeration i verktygsfältet.

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

  7. Följ dessa steg på sidan Skapa händelseprenumeration :

    1. Ange ett namn för händelseprenumerationen.

    2. Ange ett namn för systemämnet. Ett systemavsnitt innehåller en slutpunkt där avsändaren kan skicka händelser. Mer information finns i Systemavsnitt

    3. För Slutpunktstyp väljer du Azure-funktion.

    4. För Slutpunkt väljer du länken.

    5. På sidan Välj Azure-funktion följer du de här stegen om de inte fylls i automatiskt.

      1. Välj den Azure-prenumeration som har Azure-funktionen.
      2. Välj resursgruppen för funktionen.
      3. Välj funktionsappen.
      4. Välj distributionsfacket.
      5. Välj funktionen EventGridTriggerMigrateData.
    6. På sidan Välj Azure-funktion väljer du Bekräfta markering.

    7. Gå sedan tillbaka till sidan Skapa händelseprenumeration och välj Skapa.

      Screenshot of the Create an event subscription page.

  8. Kontrollera att händelseprenumerationen har skapats. Växla till fliken Händelseprenumerationersidan Händelser för Event Hubs-namnområdet.

    Screenshot showing the Event Subscriptions tab on the Events page.

Kör appen för att generera data

Du har konfigurerat din händelsehubb, dedikerat SQL-pool (tidigare SQL Data Warehouse), Azure-funktionsapp och händelseprenumeration. Innan du kör ett program som genererar data för händelsehubben måste du konfigurera några värden.

  1. Gå till resursgruppen som du gjorde tidigare i Azure Portal.

  2. Välj Event Hubs-namnområde.

  3. På sidan Event Hubs-namnområde väljer du Principer för delad åtkomst i den vänstra menyn.

  4. Välj RootManageSharedAccessKey i listan med principer.

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

  5. Välj kopieringsknappen intill textrutan Primärnyckel för anslutningssträng.

  6. Gå tillbaka till Visual Studio-lösningen.

  7. Högerklicka på Projektet WindTurbineDataGenerator och välj Ange som startprojekt.

  8. Öppna program.cs i projektet WindTurbineDataGenerator.

  9. Ersätt <EVENT HUBS NAMESPACE CONNECTION STRING> med anslutningssträng som du kopierade från portalen.

  10. Om du har använt ett annat namn för händelsehubben än hubdatamigrationersätter <EVENT HUB NAME> du med namnet på händelsehubben.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. Skapa lösningen. Kör programmet WindTurbineGenerator.exe.

  12. Efter ett par minuter, på den andra webbläsarfliken där du har frågefönstret öppet, frågar du tabellen i informationslagret efter migrerade data.

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    Screenshot showing the query results.

Övervaka lösningen

Det här avsnittet hjälper dig att övervaka eller felsöka lösningen.

Visa insamlade data i lagringskontot

  1. Gå till resursgruppen och välj det lagringskonto som används för att samla in händelsedata.

  2. På sidan Lagringskonto väljer du Lagringswebbläsare på den vänstra menyn.

  3. Expandera BLOBCONTAINRAR och välj windturbinecapture.

  4. Öppna mappen med namnet samma som Event Hubs-namnområdet i den högra rutan.

  5. Öppna mappen med namnet samma som din händelsehubb (hubdatamigration).

  6. Granska mapparna så ser du AVRO-filerna. Här är ett exempel:

    Screenshot showing the captured file in the storage.

Kontrollera att Event Grid-utlösaren anropade funktionen

  1. Gå till resursgruppen och välj funktionsappen.

  2. Välj fliken Funktioner i det mellersta fönstret.

  3. Välj funktionen EventGridTriggerMigrateData i listan.

  4. På sidan Funktion väljer du Övervaka på den vänstra menyn.

  5. Välj Konfigurera för att konfigurera application insights för att samla in anropsloggar.

  6. Skapa en ny Application Insights-resurs eller använd en befintlig resurs.

  7. Gå tillbaka till sidan Övervaka för funktionen.

  8. Bekräfta att klientprogrammet (WindTurbineDataGenerator) som skickar händelserna fortfarande körs. Annars kör du appen.

  9. Vänta några minuter (5 minuter eller mer) och välj knappen Uppdatera för att se funktionsanrop.

    Screenshot showing the Function invocations.

  10. Välj ett anrop för att visa information.

    Event Grid distribuerar händelsedata till prenumeranterna. I följande exempel visar genererade händelsedata när data som strömmas via en händelsehubb hämtas i en blobb. Observera särskilt att egenskapen fileUrl i data-objektet pekar på blobben i lagringen. Funktionsappen använder den här URL:en för att hämta blobbfilen med insamlade data.

    {
      "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"
    }
    

Kontrollera att data lagras i den dedikerade SQL-poolen

På webbläsarfliken där frågefönstret är öppet frågar du tabellen i din dedikerade SQL-pool efter migrerade data.

Screenshot showing the final query results.

Nästa steg