Öğ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.
Bu diyagramda, bu öğreticide oluşturduğunuz çözümün iş akışı gösterilir:
- Azure olay hub'ına gönderilen veriler bir Azure blob depolama alanında yakalanır.
- Veri yakalama işlemi tamamlandığında bir olay oluşturulur ve Azure Event Grid'e gönderilir.
- Azure Event Grid bu olay verilerini bir Azure işlev uygulamasına iletir.
- İşlev uygulaması, blobu depolama alanından almak için olay verilerindeki blob URL'sini kullanır.
- İş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:
- Bu makalede Event Grid ve Event Hubs (özellikle Yakalama özelliği) hakkında bilgi sahibi olduğunuz varsayılır. Azure Event Grid hakkında bilginiz yoksa bkz . Azure Event Grid'e giriş. Azure Event Hubs'ın Yakalama özelliği hakkında bilgi edinmek için bkz. Azure Blob Depolama veya Azure Data Lake Storage'da Azure Event Hubs aracılığıyla olayları yakalama.
- Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- .NET masaüstü geliştirme, Azure geliştirme, ASP.NET ve web geliştirme, Node.js geliştirme ve Python geliştirme için iş yüklerine sahip Visual Studio .
- EventHubsCaptureEventGridDemo örnek projesini bilgisayarınıza indirin.
- WindTurbineDataGenerator – Yakalama özelliğinin etkinleştirildiği bir olay hub'ına örnek rüzgar türbini verileri gönderen basit bir yayımcı.
- FunctionDWDumper : Bir Avro dosyası Azure Depolama blobuna yakalandığında Azure Event Grid'den bildirim alan bir Azure işlevidir. Blobun URI yolunu alır, içeriğini okur ve bu verileri Azure Synapse Analytics'e (ayrılmış SQL havuzu) yönlendirir.
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
Azure Portal’ında oturum açın.
Üst kısımdaki Cloud Shell düğmesini seçin.
Cloud Shell'in tarayıcının alt kısmında açıldığını görürsünüz.
- Cloud Shell'i ilk kez kullanıyorsanız:
Cloud Shell'de, yukarıdaki görüntüde gösterildiği gibi Bash'i (henüz seçili değilse) seçin.
Aşağıdaki CLI komutunu çalıştırarak bir Azure kaynak grubu oluşturun:
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
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 }
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:
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>
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.
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
Azure portalında soldaki menüden Kaynak grupları'nı seçin.
Arama kutusuna kaynak grubunuzun adını girerek kaynak grupları listesini filtreleyin.
Listeden kaynak grubunuzu seçin.
Kaynak grubunda aşağıdaki kaynakları gördüğünüzden emin olun:
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.
Kaynak grubundaki kaynaklar listesinde ayrılmış SQL havuzunuzu seçin.
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.
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.
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);
Öğ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
Kaynak Grubu sayfasında, kaynak listesinden Azure İşlevleri uygulamasını seçin.
Uygulamanızın İşlev Uygulaması sayfasında, komut çubuğunda Yayımlama profilini al'ı seçin.
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
Visual Studio’yu başlatın.
Önkoşulların bir parçası olarak GitHub'dan indirdiğiniz EventHubsCaptureEventGridDemo.sln çözümünü açın. Klasörde bulabilirsiniz
/samples/e2e/EventHubsCaptureEventGridDemo
.Çözüm Gezgini functionEGDWDumper projesi'ne sağ tıklayın ve Yayımla'yı seçin.
Aşağıdaki ekranda Başlat'ı veya Yayımlama profili ekle'yi seçin.
Yayımla iletişim kutusunda Hedef için Profili İçeri Aktar'ı ve ardından İleri'yi seçin.
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.
Visual Studio profili yapılandırdığında Yayımla’yı seçin. Yayımlamanın başarılı olduğunu onaylayın.
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.
İşlevi yayımladıktan sonra olaya abone olmaya hazır olursunuz.
Olaya abone olma
Web tarayıcısının yeni bir sekmesinde veya yeni penceresinde Azure portalında oturum açın.
Azure portalında soldaki menüden Kaynak grupları'nı seçin.
Arama kutusuna kaynak grubunuzun adını girerek kaynak grupları listesini filtreleyin.
Listeden kaynak grubunuzu seçin.
Kaynak listesinden Event Hubs ad alanını seçin.
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 Oluştur sayfasında şu adımları izleyin:
Olay aboneliği için bir ad girin.
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ı
Uç Nokta Türü için Azure İşlevi'ne tıklayın.
Uç Nokta için bağlantıyı seçin.
Azure İşlevi Seç sayfasında, otomatik olarak doldurulmadıysa bu adımları izleyin.
- Azure işlevine sahip Azure aboneliğini seçin.
- İşlev için kaynak grubunu seçin.
- İşlev uygulamasını seçin.
- Dağıtım yuvasını seçin.
- EventGridTriggerMigrateData işlevini seçin.
Azure İşlevi Seç sayfasında Seçimi Onayla'yı seçin.
Ardından Olay Aboneliği Oluştur sayfasına dönüp Oluştur'u seçin.
Olay aboneliğinin oluşturulduğunu doğrulayın. Event Hubs ad alanının Olaylar sayfasındaki Olay Abonelikleri sekmesine geçin.
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.
Azure portalında, daha önce yaptığınız gibi kaynak grubunuza gidin.
Event Hubs ad alanını seçin.
Event Hubs Ad Alanı sayfasında soldaki menüden Paylaşılan erişim ilkeleri'ni seçin.
İlke listesinde RootManageSharedAccessKey öğesini seçin.
Bağlantı dizesi-birincil anahtar metin kutusunun yanındaki kopyala düğmesini seçin.
Visual Studio çözümünüze geri dönün.
WindTurbineDataGenerator projesine sağ tıklayın ve Başlangıç projesi olarak ayarla'yı seçin.
WindTurbineDataGenerator projesinde program.cs dosyasını açın.
değerini portaldan kopyaladığınız bağlantı dizesi ile değiştirin
<EVENT HUBS NAMESPACE CONNECTION STRING>
.Olay hub'ı için dışında
hubdatamigration
bir 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";
Çözümü oluşturun. WindTurbineGenerator.exe uygulamasını çalıştırın.
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]
Ö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
Kaynak grubuna gidin ve olay verilerini yakalamak için kullanılan depolama hesabını seçin.
Depolama hesabı sayfasında, soldaki menüden Depolama tarayıcısı'nı seçin.
BLOB KAPSAYICILARI'nu genişletin ve windturbinecapture öğesini seçin.
Sağ bölmede Event Hubs ad alanınızla aynı adlı klasörü açın.
Olay hub'ınız (hubdatamigration) ile aynı adlı klasörü açın.
Klasörlerde detaya gidip AVRO dosyalarını görürsünüz. Bir örnek aşağıda verilmiştir:
Event Grid tetikleyicisinin işlevi çağırdığını doğrulayın
Kaynak grubuna gidin ve işlev uygulamasını seçin.
Orta bölmede İşlevler sekmesini seçin.
Listeden EventGridTriggerMigrateData işlevini seçin.
İşlev sayfasında soldaki menüden İzleyici'yi seçin.
Uygulama içgörülerini çağırma günlüklerini yakalayacak şekilde yapılandırmak için Yapılandır'ı seçin.
Yeni bir Application Insights kaynağı oluşturun veya mevcut bir kaynağı kullanın.
İşlevin İzleyici sayfasına geri dönün.
Olayları gönderen istemci uygulamasının (WindTurbineDataGenerator) hala çalıştığını onaylayın. Aksi takdirde uygulamayı çalıştırın.
İşlev çağrılarını görmek için birkaç dakika (5 dakika veya daha fazla) bekleyin ve Yenile düğmesini seçin.
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.
Sonraki adımlar
- Örneği ayarlama ve çalıştırma hakkında daha fazla bilgi için bkz. Event Hubs Capture ve Event Grid örneği.
- Bu öğreticide, olay için
CaptureFileCreated
bir olay aboneliği oluşturdunuz. Bu olay ve Azure Blob Depolama tarafından desteklenen tüm olaylar hakkında daha fazla bilgi için bkz. Event Grid kaynağı olarak Azure Event Hubs. - Event Hubs Yakalama özelliği hakkında daha fazla bilgi edinmek için bkz. Azure Blob Depolama veya Azure Data Lake Storage'da Azure Event Hubs aracılığıyla olayları yakalama.