Öğretici: Azure Event Grid ve Azure İşlevleri kullanarak Event Hubs tarafından yakalanan verileri Azure Depolama'dan Azure Synapse Analytics'e geçirme

Bu öğreticide, Azure Event Grid ve Azure İşlevleri kullanarak Event Hubs'ın yakaladığı verileri Azure Blob Depolama Azure Synapse Analytics'e( özel olarak ayrılmış bir SQL havuzu) geçireceksiniz.

Uygulamaya genel bakış

Bu diyagramda, bu öğreticide oluşturduğunuz çözümün iş akışı gösterilir:

  1. Azure olay hub'ına gönderilen veriler bir Azure blob depolama alanında yakalanır.
  2. Veri yakalama işlemi tamamlandığında bir olay oluşturulur ve Azure Event Grid'e gönderilir.
  3. Azure Event Grid bu olay verilerini bir Azure işlev uygulamasına iletir.
  4. İşlev uygulaması, blobu depolama alanından almak için olay verilerindeki blob URL'sini kullanır.
  5. İşlev uygulaması blob verilerini bir Azure Synapse Analytics'e geçirir.

Bu makalede aşağıdaki adımları uygulayacaksınız:

  • Öğretici için gerekli altyapıyı dağıtma
  • Kodu bir İşlevler uygulamasında yayımlama
  • Event Grid aboneliği oluşturma
  • Örnek verileri Event Hubs'a akışla aktarma
  • Azure Synapse Analytics'te yakalanan verileri doğrulama

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdakiler gereklidir:

Altyapıyı dağıtma

Bu adımda, gerekli altyapıyı bir Resource Manager şablonuyla dağıtacaksınız. Şablonu dağıttığınızda aşağıdaki kaynaklar oluşturulur:

  • Yakalama özelliğinin etkinleştirildiği olay hub'ı.
  • Yakalanan dosyalar için depolama hesabı.
  • İşlev uygulamasını barındırmak için App Service planı
  • Olayı işlemek için işlev uygulaması
  • Veri ambarını barındırmak için SQL Server
  • Geçirilen verileri depolamak için Azure Synapse Analytics (ayrılmış SQL havuzu)

Altyapıyı dağıtmak için Azure CLI kullanma

  1. Azure Portal’ında oturum açın.

  2. Üst kısımdaki Cloud Shell düğmesini seçin.

    Cloud Shell düğmesinin seçimini gösteren Azure portalının ekran görüntüsü.

  3. Cloud Shell'in tarayıcının alt kısmında açıldığını görürsünüz.

    1. Cloud Shell'i ilk kez kullanıyorsanız:
      1. Bash ile PowerShell arasında seçim yapmak için bir seçenek görürseniz Bash'i seçin.

      2. Depolama oluştur'u seçerek bir depolama hesabı oluşturun. Azure Cloud Shell,bazı dosyaları depolamak için bir Azure depolama hesabı gerektirir.

        Cloud Shell için depolama oluşturma işlemini gösteren ekran görüntüsü.

      3. Cloud Shell başlatılana kadar bekleyin.

        Cloud Shell'in başlatıldığını gösteren ekran görüntüsü.

  4. Cloud Shell'de, yukarıdaki görüntüde gösterildiği gibi Bash'i (henüz seçili değilse) seçin.

  5. Aşağıdaki CLI komutunu çalıştırarak bir Azure kaynak grubu oluşturun:

    1. Aşağıdaki komutu kopyalayıp Cloud Shell penceresine yapıştırın. İstersen, kaynak grubu adını ve konumunu değiştirin.

      az group create -l eastus -n rgDataMigration
      
    2. ENTER'a basın.

      Bir örnek aşağıda verilmiştir:

      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. Aşağıdaki CLI komutunu çalıştırarak önceki bölümde belirtilen tüm kaynakları (olay hub'ı, depolama hesabı, işlevler uygulaması, Azure Synapse Analytics) dağıtın:

    1. Komutunu kopyalayıp Cloud Shell penceresine yapıştırın. Alternatif olarak, istediğiniz bir düzenleyiciye kopyalayabilir/yapıştırabilir, değerleri ayarlayabilir ve ardından komutu Cloud Shell'e kopyalayabilirsiniz. Azure kaynak adından kaynaklanan bir hata görürseniz kaynak grubunu silin, adı düzeltin ve komutu yeniden deneyin.

      Önemli

      Komutu çalıştırmadan önce aşağıdaki varlıklar için değerleri belirtin:

      • Daha önce oluşturduğunuz kaynak grubunun adı.
      • Olay hub'ı ad alanının adı.
      • Olay hub'ına ilişkin ad. Değeri olduğu gibi bırakabilirsiniz (hubdatamigration).
      • SQL sunucusunun adı.
      • SQL kullanıcısının ve parolasının adı.
      • Veritabanının adı.
      • Depolama hesabının adı.
      • İşlev uygulamasının adı.
      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. Komutunu çalıştırmak için Cloud Shell penceresinde ENTER tuşuna basın. Bir grup kaynak oluşturduğunuz için bu işlem biraz zaman alabilir. Komutun sonucunda hata olmadığından emin olun.

  7. Cloud Shell penceresinin sağ üst köşesindeki portalda (veya) X düğmesinde Cloud Shell düğmesini seçerek Cloud Shell'i kapatın.

Kaynakların oluşturulduğunu doğrulayın

  1. Azure portalında soldaki menüden Kaynak grupları'nı seçin.

  2. Arama kutusuna kaynak grubunuzun adını girerek kaynak grupları listesini filtreleyin.

  3. Listeden kaynak grubunuzu seçin.

    Kaynak grubunuzun seçimini gösteren ekran görüntüsü.

  4. Kaynak grubunda aşağıdaki kaynakları gördüğünüzden emin olun:

    Kaynak grubundaki kaynakları gösteren ekran görüntüsü.

Azure Synapse Analytics'te tablo oluşturma

Bu bölümde, daha önce oluşturduğunuz ayrılmış SQL havuzunda bir tablo oluşturacaksınız.

  1. Kaynak grubundaki kaynaklar listesinde ayrılmış SQL havuzunuzu seçin.

  2. Ayrılmış SQL havuzu sayfasının sol taraftaki menüden Ortak Görevler bölümünde Sorgu düzenleyicisi (önizleme) öğesini seçin.

    Azure portalındaki Ayrılmış SQL havuzu sayfasında Sorgu Düzenleyicisi seçimini gösteren ekran görüntüsü.

  3. SQL sunucusu için kullanıcı ve parola adını girin ve Tamam'ı seçin. İstemcinizin SQL sunucusuna erişmesine izin verme hakkında bir ileti görürseniz SQL sunucunuzdaki IP>< Adresinizi> IP'ye izin verin'i <seçin ve ardından Tamam'ı seçin.

  4. Sorgu penceresinde aşağıdaki SQL betiğini kopyalayıp çalıştırın:

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

    Sorgu düzenleyicisini gösteren ekran görüntüsü.

  5. Öğreticinin sonunda verilerin oluşturulduğunu doğrulayabilmeniz için bu sekmeyi veya pencereyi açık tutun.

Azure İşlevleri uygulamasını yayımlama

İlk olarak Azure portalından İşlevler uygulamasının yayımlama profilini alın. Ardından, visual studio'dan Azure İşlevleri proje veya uygulamayı yayımlamak için yayımlama profilini kullanın.

Yayımlama profilini alma

  1. Kaynak Grubu sayfasında, kaynak listesinden Azure İşlevleri uygulamasını seçin.

    Bir kaynak grubu için kaynak listesinde işlev uygulamasının seçimini gösteren ekran görüntüsü.

  2. Uygulamanızın İşlev Uygulaması sayfasında, komut çubuğunda Yayımlama profilini al'ı seçin.

    İşlev uygulaması sayfasının komut çubuğundaki **Yayımlama Profilini Al** düğmesinin seçimini gösteren ekran görüntüsü.

  3. Dosyayı indirin ve EventHubsCaptureEventGridDemo klasörünün FunctionEGDDumper alt klasörüne kaydedin.

İşlevler uygulamasını yayımlamak için yayımlama profilini kullanma

  1. Visual Studio’yu başlatın.

  2. Önkoşulların bir parçası olarak GitHub'dan indirdiğiniz EventHubsCaptureEventGridDemo.sln çözümünü açın. Klasörde bulabilirsiniz /samples/e2e/EventHubsCaptureEventGridDemo .

  3. Çözüm Gezgini functionEGDWDumper projesi'ne sağ tıklayın ve Yayımla'yı seçin.

  4. Aşağıdaki ekranda Başlat'ı veya Yayımlama profili ekle'yi seçin.

  5. Yayımla iletişim kutusunda Hedef için Profili İçeri Aktar'ı ve ardından İleri'yi seçin.

    **Yayımla** iletişim kutusundaki **Profili İçeri Aktar** seçimini gösteren ekran görüntüsü.

  6. Profili içeri aktar sekmesinde, functionEGDWDumper klasörüne daha önce kaydettiğiniz yayımlama ayarları dosyasını seçin ve ardından Son'u seçin.

  7. Visual Studio profili yapılandırdığında Yayımla’yı seçin. Yayımlamanın başarılı olduğunu onaylayın.

  8. Azure İşlevi sayfasının açık olduğu web tarayıcısında orta bölmede İşlevler'i seçin. EventGridTriggerMigrateData işlevinin listede gösterildiğini onaylayın. Bunu görmüyorsanız Visual Studio'dan yayımlamayı yeniden deneyin ve ardından portaldaki sayfayı yenileyin.

    İşlev oluşturma onayını gösteren ekran görüntüsü.

İşlevi yayımladıktan sonra olaya abone olmaya hazır olursunuz.

Olaya abone olma

  1. Web tarayıcısının yeni bir sekmesinde veya yeni penceresinde Azure portalında oturum açın.

  2. Azure portalında soldaki menüden Kaynak grupları'nı seçin.

  3. Arama kutusuna kaynak grubunuzun adını girerek kaynak grupları listesini filtreleyin.

  4. Listeden kaynak grubunuzu seçin.

  5. Kaynak listesinden Event Hubs ad alanını seçin.

  6. Event Hubs Ad Alanı sayfasında, soldaki menüden Olaylar'ı seçin ve ardından araç çubuğunda + Olay Aboneliği'ni seçin.

    Olay aboneliği ekle bağlantısının seçili olduğu bir Event Hubs ad alanının Olaylar sayfasının ekran görüntüsü.

  7. Olay Aboneliği Oluştur sayfasında şu adımları izleyin:

    1. Olay aboneliği için bir ad girin.

    2. Sistem konusu için bir ad girin. Sistem konusu, gönderenin olayları göndermesi için bir uç nokta sağlar. Daha fazla bilgi için bkz . Sistem konuları

    3. Uç Nokta Türü için Azure İşlevi'ne tıklayın.

    4. Uç Nokta için bağlantıyı seçin.

    5. Azure İşlevi Seç sayfasında, otomatik olarak doldurulmadıysa bu adımları izleyin.

      1. Azure işlevine sahip Azure aboneliğini seçin.
      2. İşlev için kaynak grubunu seçin.
      3. İşlev uygulamasını seçin.
      4. Dağıtım yuvasını seçin.
      5. EventGridTriggerMigrateData işlevini seçin.
    6. Azure İşlevi Seç sayfasında Seçimi Onayla'yı seçin.

    7. Ardından Olay Aboneliği Oluştur sayfasına dönüp Oluştur'u seçin.

      Olay aboneliği oluştur sayfasının ekran görüntüsü.

  8. Olay aboneliğinin oluşturulduğunu doğrulayın. Event Hubs ad alanının Olaylar sayfasındaki Olay Abonelikleri sekmesine geçin.

    Olaylar sayfasındaki Olay Abonelikleri sekmesini gösteren ekran görüntüsü.

Veri oluşturmak için uygulama çalıştırma

Olay hub'ınızı ayarlamayı, SQL havuzunu (eski adı SQL Veri Ambarı), Azure işlev uygulamasını ve olay aboneliğini ayırmayı tamamladınız. Olay hub’ı için veri oluşturan bir uygulamayı çalıştırmadan önce birkaç değeri yapılandırmanız gerekir.

  1. Azure portalında, daha önce yaptığınız gibi kaynak grubunuza gidin.

  2. Event Hubs ad alanını seçin.

  3. Event Hubs Ad Alanı sayfasında soldaki menüden Paylaşılan erişim ilkeleri'ni seçin.

  4. İlke listesinde RootManageSharedAccessKey öğesini seçin.

    Event Hubs ad alanının Paylaşılan erişim ilkeleri sayfasını gösteren ekran görüntüsü.

  5. Bağlantı dizesi-birincil anahtar metin kutusunun yanındaki kopyala düğmesini seçin.

  6. Visual Studio çözümünüze geri dönün.

  7. WindTurbineDataGenerator projesine sağ tıklayın ve Başlangıç projesi olarak ayarla'yı seçin.

  8. WindTurbineDataGenerator projesinde program.cs dosyasını açın.

  9. değerini portaldan kopyaladığınız bağlantı dizesi ile değiştirin<EVENT HUBS NAMESPACE CONNECTION STRING>.

  10. Olay hub'ı için dışında hubdatamigrationbir ad kullandıysanız değerini olay hub'ının adıyla değiştirin <EVENT HUB NAME> .

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. Çözümü oluşturun. WindTurbineGenerator.exe uygulamasını çalıştırın.

  12. Birkaç dakika sonra, sorgu penceresinin açık olduğu diğer tarayıcı sekmesinde, geçirilen veriler için veri ambarınızdaki tabloyu sorguleyin.

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    Sorgu sonuçlarını gösteren ekran görüntüsü.

Önemli

Öğreticiyi basit tutmak için Azure Event Hubs ad alanında kimlik doğrulaması yapmak için bağlantı dizesi kullanırız. Üretim ortamlarında Microsoft Entra Id kimlik doğrulaması kullanmanızı öneririz. Uygulama kullanırken, uygulama için yönetilen kimliği etkinleştirebilir ve kimliğe Event Hubs ad alanında uygun bir rol (Azure Event Hubs Sahibi, Azure Event Hubs Veri Göndereni veya Azure Event Hubs Veri Alıcısı) atayabilirsiniz. Daha fazla bilgi için bkz . Microsoft Entra Id kullanarak Event Hubs'a erişimi yetkilendirme.

Çözümü izleme

Bu bölüm, çözümü izlemenize veya sorun gidermenize yardımcı olur.

Yakalanan verileri depolama hesabında görüntüleme

  1. Kaynak grubuna gidin ve olay verilerini yakalamak için kullanılan depolama hesabını seçin.

  2. Depolama hesabı sayfasında, soldaki menüden Depolama tarayıcısı'nı seçin.

  3. BLOB KAPSAYICILARI'nu genişletin ve windturbinecapture öğesini seçin.

  4. Sağ bölmede Event Hubs ad alanınızla aynı adlı klasörü açın.

  5. Olay hub'ınız (hubdatamigration) ile aynı adlı klasörü açın.

  6. Klasörlerde detaya gidip AVRO dosyalarını görürsünüz. Bir örnek aşağıda verilmiştir:

    Yakalanan dosyayı depolama alanında gösteren ekran görüntüsü.

Event Grid tetikleyicisinin işlevi çağırdığını doğrulayın

  1. Kaynak grubuna gidin ve işlev uygulamasını seçin.

  2. Orta bölmede İşlevler sekmesini seçin.

  3. Listeden EventGridTriggerMigrateData işlevini seçin.

  4. İşlev sayfasında soldaki menüden İzleyici'yi seçin.

  5. Uygulama içgörülerini çağırma günlüklerini yakalayacak şekilde yapılandırmak için Yapılandır'ı seçin.

  6. Yeni bir Application Insights kaynağı oluşturun veya mevcut bir kaynağı kullanın.

  7. İşlevin İzleyici sayfasına geri dönün.

  8. Olayları gönderen istemci uygulamasının (WindTurbineDataGenerator) hala çalıştığını onaylayın. Aksi takdirde uygulamayı çalıştırın.

  9. İşlev çağrılarını görmek için birkaç dakika (5 dakika veya daha fazla) bekleyin ve Yenile düğmesini seçin.

    İşlev çağrılarını gösteren ekran görüntüsü.

  10. Ayrıntıları görmek için bir çağrı seçin.

    Event Grid, olay verilerini abonelere dağıtır. Aşağıdaki örnekte, bir olay hub'ı üzerinden veri akışı bir blobda yakalandığında oluşturulan olay verileri gösterilmektedir. Özellikle, nesnesindeki özelliğin fileUrl data depolamadaki bloba işaret eder. İşlev uygulaması, yakalanan verileri içeren blob dosyasını almak için bu URL'yi kullanır.

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

Verilerin ayrılmış SQL havuzunda depolandığını doğrulayın

Sorgu penceresinin açık olduğu tarayıcı sekmesinde, geçirilen veriler için ayrılmış SQL havuzunuzdaki tabloyu sorguleyin.

Son sorgu sonuçlarını gösteren ekran görüntüsü.

Sonraki adımlar