Samouczek: migrowanie przechwyconych danych z usługi Azure Storage do usługi Azure Synapse Analytics przy użyciu usługi Azure Event Grid i usługi Azure Functions

W tym samouczku przeprowadzisz migrację przechwyconych danych z usługi Event Hubs z usługi Azure Blob Storage do usługi Azure Synapse Analytics, w szczególności dedykowanej puli SQL przy użyciu usługi Azure Event Grid i usługi Azure Functions.

Omówienie aplikacji

Ten diagram przedstawia przepływ pracy rozwiązania, które tworzysz w ramach tego samouczka:

  1. Dane wysłane do centrum zdarzeń platformy Azure są przechwytywane w magazynie obiektów blob Azure.
  2. Po zakończeniu przechwytywania danych zdarzenie jest generowane i wysyłane do usługi Azure Event Grid.
  3. Usługa Azure Event Grid przekazuje te dane zdarzeń do aplikacji funkcji platformy Azure.
  4. Aplikacja funkcji pobiera obiekt blob z magazynu, używając adresu URL obiektu blob.
  5. Aplikacja funkcji migruje dane obiektu blob do usługi Azure Synapse Analytics.

W tym artykule wykonasz następujące kroki:

  • Wdrażanie wymaganej infrastruktury na potrzeby samouczka
  • Publikowanie kodu do aplikacji usługi Functions
  • Tworzenie subskrypcji usługi Event Grid
  • Przesyłanie strumieniowe przykładowych danych do usługi Event Hubs
  • Weryfikowanie przechwyconych danych w usłudze Azure Synapse Analytics

Wymagania wstępne

Do ukończenia tego samouczka niezbędne są następujące elementy:

  • W tym artykule założono, że znasz usługę Event Grid i event hubs (zwłaszcza funkcję przechwytywania). Jeśli nie znasz usługi Azure Event Grid, zobacz Wprowadzenie do usługi Azure Event Grid. Aby dowiedzieć się więcej o funkcji przechwytywania usługi Azure Event Hubs, zobacz Przechwytywanie zdarzeń za pośrednictwem usługi Azure Event Hubs w usłudze Azure Blob Storage lub Azure Data Lake Storage.
  • Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Program Visual Studio z obciążeniami dla: programowanie aplikacji klasycznych .NET, programowanie na platformie Azure, tworzenie ASP.NET i tworzenie aplikacji internetowych, programowanie Node.js i programowanie w języku Python.
  • Pobierz na komputer przykładowy projekt EventHubsCaptureEventGridDemo.
    • WindTurbineDataGenerator — prosty wydawca, który wysyła przykładowe dane turbiny wiatrowej do centrum zdarzeń z włączoną funkcją Przechwytywanie.
    • FunctionDWDumper — funkcja platformy Azure, która odbiera powiadomienie z usługi Azure Event Grid po przechwyceniu pliku Avro do obiektu blob usługi Azure Storage. Otrzymuje ścieżkę identyfikatora URI obiektu blob, odczytuje jego zawartość i wypycha te dane do usługi Azure Synapse Analytics (dedykowana pula SQL).

Wdrażanie infrastruktury

W tym kroku wdrożysz wymaganą infrastrukturę za pomocą szablonu usługi Resource Manager. Podczas wdrażania szablonu tworzone są następujące zasoby:

  • Centrum zdarzeń z włączoną funkcją Capture
  • Konto magazynu na potrzeby przechwyconych plików
  • Plan usługi aplikacji do hostowania aplikacji funkcji
  • Aplikacja funkcji do przetwarzania zdarzeń
  • Rozwiązanie SQL Server do hostowania magazynu danych
  • Usługa Azure Synapse Analytics (dedykowana pula SQL) do przechowywania migrowanych danych

Wdrażanie infrastruktury przy użyciu interfejsu wiersza polecenia platformy Azure

  1. Zaloguj się w witrynie Azure Portal.

  2. Wybierz przycisk Cloud Shell u góry.

    Zrzut ekranu witryny Azure Portal przedstawiający wybór przycisku usługi Cloud Shell.

  3. W dolnej części przeglądarki zostanie otwarta usługa Cloud Shell.

    1. Jeśli używasz usługi Cloud Shell po raz pierwszy:
      1. Jeśli zobaczysz opcję wyboru między powłoką Bash i programem PowerShell, wybierz pozycję Bash.

      2. Utwórz konto magazynu, wybierając pozycję Utwórz magazyn. Usługa Azure Cloud Shell wymaga konta magazynu platformy Azure do przechowywania niektórych plików.

        Zrzut ekranu przedstawiający tworzenie magazynu dla usługi Cloud Shell.

      3. Zaczekaj na zainicjowanie usługi Cloud Shell.

        Zrzut ekranu przedstawiający zainicjowanie usługi Cloud Shell.

  4. W usłudze Cloud Shell wybierz pozycję Bash , jak pokazano na powyższej ilustracji, jeśli nie została jeszcze wybrana.

  5. Utwórz grupę zasobów platformy Azure, uruchamiając następujące polecenie interfejsu wiersza polecenia:

    1. Skopiuj poniższe polecenie i wklej je w oknie usługi Cloud Shell. Zmień nazwę i lokalizację grupy zasobów, jeśli chcesz.

      az group create -l eastus -n rgDataMigration
      
    2. Naciśnij klawisz ENTER.

      Oto przykład:

      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. Wdróż wszystkie zasoby wymienione w poprzedniej sekcji (centrum zdarzeń, konto magazynu, aplikację funkcji, usługę Azure Synapse Analytics), uruchamiając następujące polecenie interfejsu wiersza polecenia:

    1. Skopiuj polecenie i wklej je w oknie usługi Cloud Shell. Alternatywnie możesz skopiować/wkleić do wybranego edytora, ustawić wartości, a następnie skopiować polecenie do usługi Cloud Shell. Jeśli wystąpi błąd z powodu nazwy zasobu platformy Azure, usuń grupę zasobów, napraw nazwę i ponów próbę wykonania polecenia.

      Ważne

      Przed uruchomieniem polecenia określ wartości dla następujących jednostek:

      • Nazwa utworzonej wcześniej grupy zasobów.
      • Nazwa przestrzeni nazw centrum zdarzeń.
      • Nazwa centrum zdarzeń. Możesz pozostawić wartość bez zmian (hubdatamigration).
      • Nazwa serwera SQL.
      • Nazwa użytkownika i hasło SQL.
      • Nazwa bazy danych.
      • Nazwa konta magazynu
      • Nazwa aplikacji funkcji.
      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. W oknie usługi Cloud Shell naciśnij klawisz ENTER, aby uruchomić polecenie. Ten proces może zająć trochę czasu, ponieważ tworzysz kilka zasobów. W wyniku wykonania polecenia upewnij się, że nie wystąpiły żadne błędy.

  7. Zamknij usługę Cloud Shell, wybierając przycisk Cloud Shell w portalu (lub) X w prawym górnym rogu okna usługi Cloud Shell.

Sprawdzanie, czy są tworzone zasoby

  1. W witrynie Azure Portal wybierz pozycję Grupy zasobów w menu po lewej stronie.

  2. Przefiltruj listę grup zasobów, wprowadzając w polu wyszukiwania nazwę grupy zasobów.

  3. Wybierz grupę zasobów na liście.

    Zrzut ekranu przedstawiający wybór grupy zasobów.

  4. Sprawdź, czy w grupie zasobów są wyświetlane następujące zasoby:

    Zrzut ekranu przedstawiający zasoby w grupie zasobów.

Tworzenie tabeli w usłudze Azure Synapse Analytics

W tej sekcji utworzysz tabelę w dedykowanej puli SQL utworzonej wcześniej.

  1. Na liście zasobów w grupie zasobów wybierz dedykowaną pulę SQL.

  2. Na stronie Dedykowana pula SQL w sekcji Typowe zadania w menu po lewej stronie wybierz pozycję Edytor zapytań (wersja zapoznawcza).

    Zrzut ekranu przedstawiający wybór Edytor Power Query na stronie Dedykowanej puli SQL w witrynie Azure Portal.

  3. Wprowadź nazwę użytkownika i hasło dla serwera SQL, a następnie wybierz pozycję OK. Jeśli zostanie wyświetlony komunikat informujący o umożliwieniu klientowi dostępu do serwera SQL, wybierz pozycję Zezwalaj na adres IP> <na serwerze <programu SQL Server>, a następnie wybierz przycisk OK.

  4. W oknie zapytania skopiuj i uruchom następujący skrypt SQL:

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

    Zrzut ekranu przedstawiający edytor zapytań.

  5. Nie zamykaj tej karty lub okna, aby na końcu tego samouczka można było sprawdzić, czy dane zostały utworzone.

Publikowanie aplikacji usługi Azure Functions

Najpierw pobierz profil publikowania aplikacji Usługi Functions z witryny Azure Portal. Następnie użyj profilu publikowania, aby opublikować projekt lub aplikację usługi Azure Functions z poziomu programu Visual Studio.

Pobieranie profilu publikowania

  1. Na stronie Grupa zasobów wybierz aplikację usługi Azure Functions na liście zasobów.

    Zrzut ekranu przedstawiający wybór aplikacji funkcji na liście zasobów dla grupy zasobów.

  2. Na stronie Aplikacja funkcji dla aplikacji wybierz pozycję Pobierz profil publikowania na pasku poleceń.

    Zrzut ekranu przedstawiający wybór przycisku **Pobierz profil publikowania** na pasku poleceń strony aplikacji funkcji.

  3. Pobierz i zapisz plik w podfolderze FunctionEGDDumper folderu EventHubsCaptureEventGridDemo.

Publikowanie profilu publikowania w celu opublikowania aplikacji usługi Functions

  1. Uruchom program Visual Studio.

  2. Otwórz rozwiązanie EventHubsCaptureEventGridDemo.sln, które zostało pobrane z repozytorium GitHub w ramach wymagań wstępnych. Można go znaleźć w folderze /samples/e2e/EventHubsCaptureEventGridDemo .

  3. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt FunctionEGDWDumper, a następnie wybierz pozycję Publikuj.

  4. Na poniższym ekranie wybierz pozycję Uruchom lub Dodaj profil publikowania.

  5. W oknie dialogowym Publikowanie wybierz pozycję Importuj profil dla pozycji Cel, a następnie wybierz przycisk Dalej.

    Zrzut ekranu przedstawiający wybór **Importuj profil** w oknie dialogowym **Publikuj**.

  6. Na karcie Importowanie profilu wybierz plik ustawień publikowania zapisany wcześniej w folderze FunctionEGDWDumper, a następnie wybierz pozycję Zakończ.

  7. Gdy program Visual Studio skonfiguruje profil, wybierz pozycję Opublikuj. Upewnij się, że publikowanie zakończyło się pomyślnie.

  8. W przeglądarce internetowej z otwartą stroną funkcji platformy Azure wybierz pozycję Funkcje w środkowym okienku. Upewnij się, że na liście jest wyświetlana funkcja EventGridTriggerMigrateData . Jeśli go nie widzisz, spróbuj opublikować go ponownie w programie Visual Studio, a następnie odśwież stronę w portalu.

    Zrzut ekranu przedstawiający potwierdzenie utworzenia funkcji.

Po opublikowaniu funkcji możesz przystąpić do subskrybowania zdarzenia.

Subskrybowanie zdarzenia

  1. W nowej karcie lub nowym oknie przeglądarki internetowej zaloguj się do witryny Azure Portal.

  2. W witrynie Azure Portal wybierz pozycję Grupy zasobów w menu po lewej stronie.

  3. Przefiltruj listę grup zasobów, wprowadzając w polu wyszukiwania nazwę grupy zasobów.

  4. Wybierz grupę zasobów na liście.

  5. Wybierz przestrzeń nazw usługi Event Hubs z listy zasobów.

  6. Na stronie Przestrzeń nazw usługi Event Hubs wybierz pozycję Zdarzenia w menu po lewej stronie, a następnie wybierz pozycję + Subskrypcja zdarzeń na pasku narzędzi.

    Zrzut ekranu przedstawiający stronę Zdarzenia dla przestrzeni nazw usługi Event Hubs z wybranym linkiem Dodaj subskrypcję zdarzeń.

  7. Na stronie Tworzenie subskrypcji zdarzeń wykonaj następujące kroki:

    1. Wprowadź nazwę subskrypcji zdarzeń.

    2. Wprowadź nazwę tematu systemowego. Temat systemowy zawiera punkt końcowy nadawcy do wysyłania zdarzeń. Aby uzyskać więcej informacji, zobacz Tematy systemowe

    3. W polu Typ punktu końcowego wybierz pozycję Funkcja platformy Azure.

    4. W polu Punkt końcowy wybierz link.

    5. Na stronie Wybieranie funkcji platformy Azure wykonaj następujące kroki, jeśli nie zostaną wypełnione automatycznie.

      1. Wybierz subskrypcję platformy Azure z funkcją platformy Azure.
      2. Wybierz grupę zasobów dla funkcji.
      3. Wybierz aplikację funkcji.
      4. Wybierz miejsce wdrożenia.
      5. Wybierz funkcję EventGridTriggerMigrateData.
    6. Na stronie Wybieranie funkcji platformy Azure wybierz pozycję Potwierdź wybór.

    7. Następnie ponownie na stronie Tworzenie subskrypcji zdarzeń wybierz pozycję Utwórz.

      Zrzut ekranu przedstawiający stronę Tworzenie subskrypcji zdarzeń.

  8. Sprawdź, czy subskrypcja zdarzeń została utworzona. Przejdź do karty Subskrypcje zdarzeń na stronie Zdarzenia dla przestrzeni nazw usługi Event Hubs.

    Zrzut ekranu przedstawiający kartę Subskrypcje zdarzeń na stronie Zdarzenia.

Uruchamianie aplikacji w celu wygenerowania danych

Zakończono konfigurowanie centrum zdarzeń, dedykowaną pulę SQL (dawniej SQL Data Warehouse), aplikację funkcji platformy Azure i subskrypcję zdarzeń. Przed uruchomieniem aplikacji, która generuje dane dla centrum zdarzeń, należy skonfigurować kilka wartości.

  1. W witrynie Azure Portal jak poprzednio przejdź do grupy zasobów.

  2. Wybierz przestrzeń nazw usługi Event Hubs.

  3. Na stronie Przestrzeń nazw usługi Event Hubs wybierz pozycję Zasady dostępu współużytkowanego w menu po lewej stronie.

  4. Z listy zasad wybierz pozycję RootManageSharedAccessKey.

    Zrzut ekranu przedstawiający stronę Zasady dostępu współdzielonego dla przestrzeni nazw usługi Event Hubs.

  5. Wybierz przycisk kopiowania obok pola tekstowego Parametry połączenia — klucz podstawowy.

  6. Wróć do rozwiązania programu Visual Studio.

  7. Kliknij prawym przyciskiem myszy projekt WindTurbineDataGenerator i wybierz polecenie Ustaw jako projekt startowy.

  8. W projekcie WindTurbineDataGenerator otwórz plik program.cs.

  9. Zastąp ciąg <EVENT HUBS NAMESPACE CONNECTION STRING> parametry połączenia skopiowanymi z portalu.

  10. Jeśli użyto innej nazwy centrum zdarzeń niż hubdatamigration, zastąp <EVENT HUB NAME> ciąg nazwą centrum zdarzeń.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. Stwórz rozwiązanie. Uruchom aplikację WindTurbineGenerator.exe.

  12. Po kilku minutach na drugiej karcie przeglądarki, na której jest otwarte okno zapytania, wykonaj zapytanie dotyczące tabeli w magazynie danych dla zmigrowanych danych.

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    Zrzut ekranu przedstawiający wyniki zapytania.

Ważne

Używamy parametry połączenia do uwierzytelniania w przestrzeni nazw usługi Azure Event Hubs, aby zachować prostotę samouczka. Zalecamy używanie uwierzytelniania microsoft Entra ID w środowiskach produkcyjnych. W przypadku korzystania z aplikacji można włączyć tożsamość zarządzaną dla aplikacji i przypisać tożsamość odpowiednią rolę (właściciel usługi Azure Event Hubs, nadawca danych usługi Azure Event Hubs lub odbiornik danych usługi Azure Event Hubs) w przestrzeni nazw usługi Event Hubs. Aby uzyskać więcej informacji, zobacz Autoryzowanie dostępu do usługi Event Hubs przy użyciu identyfikatora Entra firmy Microsoft.

Monitorowanie rozwiązania

Ta sekcja ułatwia monitorowanie rozwiązania lub rozwiązywanie problemów z tym rozwiązaniem.

Wyświetlanie przechwyconych danych na koncie magazynu

  1. Przejdź do grupy zasobów i wybierz konto magazynu używane do przechwytywania danych zdarzeń.

  2. Na stronie Konto magazynu wybierz pozycję Przeglądarka magazynu w menu po lewej stronie.

  3. Rozwiń węzeł KONTENERY OBIEKTÓW BLOB i wybierz pozycję windturbinecapture.

  4. Otwórz folder o takiej samej nazwie jak przestrzeń nazw usługi Event Hubs w okienku po prawej stronie.

  5. Otwórz folder o takiej samej nazwie jak centrum zdarzeń (hubdatamigration).

  6. Przejdź do szczegółów folderów i zobaczysz pliki AVRO. Oto przykład:

    Zrzut ekranu przedstawiający przechwycony plik w magazynie.

Sprawdź, czy wyzwalacz usługi Event Grid wywołał funkcję

  1. Przejdź do grupy zasobów i wybierz aplikację funkcji.

  2. Wybierz kartę Funkcje w środkowym okienku.

  3. Wybierz z listy funkcję EventGridTriggerMigrateData .

  4. Na stronie Funkcja wybierz pozycję Monitor w menu po lewej stronie.

  5. Wybierz pozycję Konfiguruj , aby skonfigurować usługę Application Insights w celu przechwytywania dzienników wywołań.

  6. Utwórz nowy zasób usługi Application Insights lub użyj istniejącego zasobu.

  7. Wróć do strony Monitorowanie dla funkcji.

  8. Upewnij się, że aplikacja kliencka (WindTurbineDataGenerator), która wysyła zdarzenia, jest nadal uruchomiona. Jeśli nie, uruchom aplikację.

  9. Poczekaj kilka minut (co najmniej 5 minut) i wybierz przycisk Odśwież , aby wyświetlić wywołania funkcji.

    Zrzut ekranu przedstawiający wywołania funkcji.

  10. Wybierz wywołanie, aby wyświetlić szczegóły.

    Usługa Event Grid dystrybuuje dane zdarzenia do subskrybentów. Poniższy przykład przedstawia dane zdarzeń wygenerowane po przechwyceniu w obiekcie blob danych przesyłanych strumieniowo za pośrednictwem centrum zdarzeń. W szczególności zwróć uwagę, że właściwość fileUrl w obiekcie data wskazuje obiekt blob w magazynie. Aplikacja funkcji używa tego adresu URL do pobierania pliku obiektu blob zawierającego przechwycone dane.

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

Sprawdź, czy dane są przechowywane w dedykowanej puli SQL

Na karcie przeglądarki, na której jest otwarte okno zapytania, wykonaj zapytanie dotyczące tabeli w dedykowanej puli SQL dla zmigrowanych danych.

Zrzut ekranu przedstawiający końcowe wyniki zapytania.

Następne kroki