Tutorial: Memigrasikan data yang diambil Azure Event Hubs dari Azure Storage ke Azure Synapse Analytics menggunakan Azure Event Grid dan Azure Functions

Dalam tutorial ini, Anda akan memigrasikan data yang diambil Azure Event Hubs dari Azure Blob Storage ke Azure Synapse Analytics, khususnya kumpulan SQL khusus, menggunakan Azure Event Grid dan Azure Functions.

Application overview

Diagram ini menggambarkan alur kerja solusi yang Anda buat dalam tutorial ini:

  1. Data yang dikirim ke hub acara Azure diambil dalam penyimpanan blob Azure.
  2. Saat pengambilan data selesai, sebuah acara telah terlaksana dan dikirim ke Azure Event Grid.
  3. Azure Event Grid kemudian meneruskan data peristiwa ini ke aplikasi fungsi Azure.
  4. Aplikasi fungsi menggunakan URL blob dalam data acara untuk mengambil blob dari penyimpanan.
  5. Aplikasi fungsi memigrasikan data blob ke Azure Synapse Analytics.

Dalam artikel ini, lakukan langkah-langkah berikut:

  • Menyebarkan infrastruktur yang diperlukan untuk tutorial ini
  • Menerbitkan kode ke Aplikasi Functions
  • Buat langganan Event Grid
  • Melakukan streaming data sampel ke Pusat Aktivitas
  • Memastikan data yang diambil dalam Azure Synapse Analytics

Prasyarat

Untuk menyelesaikan tutorial ini, Anda memerlukan:

  • Artikel ini mengasumsikan bahwa Anda terbiasa dengan Event Grid dan Event Hubs (terutama fitur Capture). Jika Anda tidak terbiasa dengan Azure Event Grid, lihat Pengantar Azure Event Grid. Untuk mempelajari tentang fitur Tangkap Azure Event Hubs, lihat Menangkap peristiwa melalui Azure Event Hubs di Azure Blob Storage atau Azure Data Lake Storage.
  • Langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
  • Studio Visual dengan beban kerja untuk: pengembangan desktop .NET, pengembangan Azure, pengembangan web dan ASP.NET, pengembangan Node.js, dan pengembangan Python.
  • Unduh proyek sampel EventHubsCaptureEventGridDemo ke komputer Anda.
    • WindTurbineDataGenerator – Penerbit sederhana yang mengirim sampel data turbin angin ke pusat aktivitas dengan fitur Capture diaktifkan.
    • FunctionDWDumper – Fungsi Azure yang menerima pemberitahuan dari Azure Event Grid saat file Avro diambil ke blob Azure Storage. Ini menerima jalur URI blob, membaca isinya, dan mendorong data ini ke Azure Synapse Analytics (kumpulan SQL khusus).

Memantau infrastruktur

Dalam langkah ini, Anda menyebarkan infrastruktur yang diperlukan dengan templat Resource Manager. Saat Anda menyebarkan templat, sumber daya berikut ini dibuat:

  • Hub acara dengan fitur Ambil diaktifkan.
  • Akun penyimpanan untuk file yang diambil.
  • Paket app service untuk menghosting aplikasi fungsi
  • Aplikasi fungsi untuk memproses acara
  • SQL Server untuk menghosting gudang data
  • Azure Synapse Analytics (kumpulan SQL khusus) untuk menyimpan data yang dimigrasikan

Menggunakan Azure CLI untuk menyebarkan infrastruktur

  1. Masuk ke portal Azure.

  2. Pilih tombol Cloud Shell di bagian atas.

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

  3. Anda melihat Cloud Shell dibuka di bagian bawah browser.

    1. Jika Anda menggunakan Cloud Shell untuk pertama kalinya:
      1. Jika Anda melihat opsi untuk memilih antara Bash dan PowerShell, pilih Bash.

      2. Buat akun penyimpanan dengan memilih Buat penyimpanan. Azure Cloud Shell memerlukan akun penyimpanan Azure untuk menyimpan beberapa file.

        Screenshot showing the creation of storage for Cloud Shell.

      3. Tunggu hingga Cloud Shell dimulai.

        Screenshot showing the Cloud Shell initialized.

  4. Dalam Cloud Shell, pilih Bash seperti yang ditunjukkan pada gambar di atas, jika memang belum dipilih.

  5. Buat grup sumber daya dengan menjalankan perintah berikut:

    1. Salin dan tempel perintah berikut ke jendela Cloud Shell. Ganti nama dan lokasi grup sumber daya jika diinginkan.

      az group create -l eastus -n rgDataMigration
      
    2. Tekan ENTER.

      Berikut contohnya:

      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. Sebarkan semua sumber daya yang disebutkan di bagian sebelumnya (hub acara, akun penyimpanan, aplikasi fungsi, Azure Synapse Analytics) dengan menjalankan perintah CLI berikut:

    1. Salin dan tempel perintah berikut ke jendela Cloud Shell. Atau, Anda dapat menyalin/menempelkan ke editor pilihan Anda, mengatur nilai, lalu menyalin perintah ke Cloud Shell. Jika Anda melihat kesalahan karena nama sumber daya Azure, hapus grup sumber daya, perbaiki nama, dan coba lagi perintah tersebut.

      Penting

      Tentukan nilai untuk entitas berikut ini sebelum menjalankan perintah:

      • Nama grup sumber daya yang Anda buat sebelumnya.
      • Nama untuk namespace hub acara.
      • Nama untuk hub acara. Anda dapat membiarkan nilai ini (hubdatamigration).
      • Nama untuk server SQL.
      • Nama pengguna dan kata sandi SQL.
      • Nama untuk database.
      • Nama akun penyimpanan.
      • Masukkan untuk aplikasi fungsi.
      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. Tekan ENTER di jendela Cloud Shell untuk menjalankan perintah. Proses ini mungkin memakan waktu cukup lama karena Anda membuat banyak sumber daya. Dalam hasil perintah, pastikan bahwa tidak ada kegagalan.

  7. Tutup Cloud Shell dengan memilih tombol Cloud Shell di portal (atau) tombol X di pojok kanan atas jendela Cloud Shell.

Pastikan sumber daya dibuat

  1. Di portal Azure, pilih Grup sumber daya di menu sebelah kiri.

  2. Filter daftar grup sumber daya dengan memasukkan nama grup sumber daya Anda di kotak pencarian.

  3. Pilih grup sumber daya Anda dalam daftar.

    Screenshot showing the selection of your resource group.

  4. Konfirmasikan bahwa Anda melihat sumber daya berikut di grup sumber daya:

    Screenshot showing resources in the resource group.

Membuat tabel di Azure Synapse Analytics

Di bagian ini, Anda membuat tabel dalam kumpulan SQL khusus yang Anda buat sebelumnya.

  1. Dalam daftar sumber daya dalam grup sumber daya, pilih kumpulan SQL khusus Anda.

  2. Pada halaman Kumpulan SQL khusus, di bagian Tugas Umum di menu sebelah kiri, pilih Editor kueri (pratinjau).

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

  3. Masukkan nama pengguna dan kata sandi untuk server SQL, dan pilih OK. Jika Anda melihat pesan tentang mengizinkan klien Anda mengakses server SQL, pilih Izinkan IP Daftar <Alamat> IP Anda di server <server> SQL Anda, lalu pilih OK.

  4. Di jendela kueri, salin, dan jalankan skrip SQL berikut ini:

    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. Jaga tab atau jendela ini terbuka sehingga Anda dapat memverifikasi bahwa data dibuat di akhir tutorial.

Menerbitkan aplikasi Azure Functions

Pertama, kelola profil penerbitan untuk aplikasi Azure Functions dari portal Microsoft Azure. Kemudian, gunakan profil penerbitan untuk menerbitkan proyek atau aplikasi Azure Functions dari Visual Studio.

Mendapatkan profil penerbitan

  1. Pada halaman Grup Sumber Daya, pilih aplikasi Azure Functions dalam daftar sumber daya.

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

  2. Pada halaman Aplikasi Azure Functions untuk aplikasi Anda, pilih Dapatkan profil penerbitan di bilah perintah.

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

  3. Unduh dan simpan file ke subfolder FunctionEGDDumper dari folder EventHubsCaptureEventGridDemo.

Menggunakan profil penerbitan untuk menerbitkan aplikasi Functions

  1. Luncurkan Visual Studio.

  2. Buka solusi EventHubsCaptureEventGridDemo.sln yang Anda unduh dari GitHub sebagai bagian dari prasyarat. Anda dapat menemukannya di folder /samples/e2e/EventHubsCaptureEventGridDemo.

  3. Di Penjelajah Solusi, klik kanan proyek FunctionEGDWDumper dan pilih Terbitkan.

  4. Di layar berikut, pilih Mulai atau Tambahkan profil penerbitan.

  5. Di kotak dialog Terbitkan, pilih Impor profil untuk Target, lalu pilih Berikutnya.

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

  6. Pada tab Impor profil, pilih file pengaturan penerbitan yang Anda simpan sebelumnya di folder FunctionEGDWDumper lalu pilih Selesai.

  7. Saat Visual Studio telah mengonfigurasi profil, pilih Terbitkan. Konfirmasikan bahwa penerbitan berhasil.

  8. Di browser web yang membuka halaman Fungsi Azure , pilih Fungsi di panel tengah. Konfirmasikan bahwa fungsi EventGridTriggerMigrateData muncul dalam daftar. Jika Anda tidak melihatnya, coba kembali menerbitkan dari Visual Studio lalu refresh halaman di portal.

    Screenshot showing the confirmation of function creation.

Setelah menerbitkan fungsi ini, Anda siap berlangganan acara tersebut.

Berlangganan ke acara

  1. Di tab baru atau jendela baru browser web, masuk ke portal Azure.

  2. Di portal Azure, pilih Grup sumber daya di menu sebelah kiri.

  3. Filter daftar grup sumber daya dengan memasukkan nama grup sumber daya Anda di kotak pencarian.

  4. Pilih grup sumber daya Anda dalam daftar.

  5. Pilih namespace Hub Acara dari daftar sumber daya.

  6. Pada halaman Namespace Hub Acara, pilih Acara di menu sebelah kiri, lalu pilih + Langganan Acara pada toolbar.

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

  7. Di halaman Membuat Langganan Peristiwa, ikuti langkah berikut:

    1. Masukkan nama untuk langganan acara.

    2. Masukkan nama untuk topik sistem. Topik sistem menyediakan titik akhir bagi pengirim untuk mengirim acara. Untuk informasi selengkapnya, lihat Topik sistem.

    3. Untuk Jenis Titik Akhir, Pilih Azure Function.

    4. Untuk Titik akhir, pilih tautan.

    5. Pada halaman Pilih Azure Function, ikuti langkah-langkah ini jika tidak diisi secara otomatis.

      1. Pilih langganan Azure yang memiliki fungsi Azure.
      2. Pilih grup sumber daya untuk fungsi tersebut.
      3. Pilih aplikasi fungsi.
      4. Pilih slot penyebaran.
      5. Pilih fungsi EventGridTriggerMigrateData.
    6. Pada halaman Pilih Fungsi Azure, pilih Konfirmasi Pilihan.

    7. Lalu, kembali ke halaman Membuat Langganan Acara, pilih Buat.

      Screenshot of the Create an event subscription page.

  8. Pastikan langganan acara dibuat. Beralih ke tab Langganan Acara pada halaman Acara untuk namespace Hub Acara.

    Screenshot showing the Event Subscriptions tab on the Events page.

Jalankan aplikasi untuk menghasilkan data

Anda telah selesai menyiapkan hub acara, kumpulan SQL khusus (sebelumnya Gudang Data SQL), aplikasi fungsi Azure, dan langganan acara. Sebelum menjalankan aplikasi yang menghasilkan data untuk hub acara, Anda perlu mengonfigurasi beberapa nilai.

  1. Di portal Azure, navigasikan ke grup sumber daya Anda seperti yang Anda lakukan sebelumnya.

  2. Pilih namespacee Pusat Aktivitas Anda.

  3. Di halaman Namespace Pusat Aktivitas, pilih Kebijakan akses bersama di menu sebelah kiri.

  4. Pilih RootManageSharedAccessKey dalam daftar kebijakan.

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

  5. Pilih tombol salin di samping kotak teks Kunci string-utama koneksi.

  6. Kembali ke solusi Visual Studio Anda.

  7. Klik kanan proyek WindTurbineDataGenerator, dan pilih Atur sebagai Proyek startup.

  8. Dalam proyek WindTurbineDataGenerator, buka program.cs.

  9. Ganti <EVENT HUBS NAMESPACE CONNECTION STRING> dengan string koneksi yang Anda salin dari portal.

  10. Jika Anda telah menggunakan nama yang berbeda untuk hub peristiwa selain hubdatamigration, ganti <EVENT HUB NAME> dengan nama hub peristiwa.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. Bangun solusinya. Jalankan aplikasi WindTurbineGenerator.exe.

  12. Setelah beberapa menit, di tab browser lain tempat Anda membuka jendela kueri, lakukan kueri tabel di gudang data Anda untuk data yang dimigrasikan.

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    Screenshot showing the query results.

Memantau solusi

Bagian ini membantu Anda memantau atau memecahkan masalah solusi.

Menampilkan data yang diambil di akun penyimpanan

  1. Navigasikan ke grup sumber daya dan pilih akun penyimpanan yang digunakan untuk mengambil data acara.

  2. Pada halaman Akun penyimpanan , pilih Browser penyimpanan di menu sebelah kiri.

  3. Perluas KONTAINER BLOB, dan pilih windturbinecapture.

  4. Buka folder yang diberi nama sama dengan namespace Hub Acara Anda di panel kanan.

  5. Buka folder bernama sama dengan hub acara Anda(hubdatamigration).

  6. Telusuri folder secara detail dan Anda melihat file AVRO. Berikut contohnya:

    Screenshot showing the captured file in the storage.

Pastikan pemicu Event Grid memanggil fungsi

  1. Navigasikan ke grup sumber daya dan pilih aplikasi fungsi.

  2. Pilih tab Fungsi di panel tengah.

  3. Pilih fungsi EventGridTriggerMigrateData dari daftar.

  4. Pada halaman Function, pilih Monitor di menu sebelah kiri.

  5. Pilih Konfigurasikan untuk mengonfigurasi application insights untuk mencatat log invokasi.

  6. Buat sumber daya Application Insights baru atau gunakan sumber daya yang ada.

  7. Navigasikan kembali ke halaman Monitor untuk fungsi tersebut.

  8. Pastikan aplikasi klien(WindTurbineDataGenerator)yang mengirimkan acara masih berjalan. Jika tidak, jalankan aplikasi.

  9. Tunggu beberapa menit (5 menit atau lebih) dan pilih tombol Refresh untuk melihat pemanggilan fungsi.

    Screenshot showing the Function invocations.

  10. Pilih pemanggilan untuk melihat detail.

    Event Grid mendistribusikan data acara kepada pelanggan. Contoh berikut menunjukkan data acara yang dihasilkan saat streaming data melalui hub pacara diambil dalam blob. Secara khusus, perhatikan fileUrlproperti dalam data objek yang menunjuk ke blob di penyimpanan. Aplikasi fungsi menggunakan URL ini untuk mengambil file blob dengan data yang diambil.

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

Pastikan data disimpan di kumpulan SQL khusus

Di tab browser tempat Anda membuka jendela kueri, lakukan kueri tabel di kumpulan SQL khusus Anda untuk data yang dimigrasikan.

Screenshot showing the final query results.

Langkah berikutnya