Öğretici: Azure Event Grid ve Azure İşlevleri kullanarak Event Hubs tarafından yakalanan verileri Azure Depolama 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.

Application overview

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 hesap Depolama.
  • İş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.

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

  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.

        Screenshot showing the creation of storage for Cloud Shell.

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

        Screenshot showing the Cloud Shell initialized.

  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.

    Screenshot showing the selection of your resource group.

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

    Screenshot showing resources in the resource group.

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.

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

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

    Screenshot showing the query editor.

  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.

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

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

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

  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.

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

  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.

    Screenshot showing the confirmation of function creation.

İş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.

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

  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.

      Screenshot of the Create an event subscription page.

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

    Screenshot showing the Event Subscriptions tab on the Events page.

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.

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

  5. Bağlan ion 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]
    

    Screenshot showing the query results.

Çö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ıyı 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:

    Screenshot showing the captured file in the storage.

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 Uygulama Analizler 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.

    Screenshot showing the Function invocations.

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

Screenshot showing the final query results.

Sonraki adımlar