Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:
IoT Edge 1.4
Önemli
IoT Edge 1.5 LTS ve IoT Edge 1.4 desteklenen sürümlerdir. Önceki bir sürümdeyseniz bkz. IoT Edge'i güncelleştirme.
Linux kapsayıcıları ile Azure IoT Edge çalıştıran bir cihazda veri depolamak için bir SQL Server modülü dağıtın.
Verileri uçta depolamak ve sorgulamak için Azure IoT Edge ve SQL Server'ı kullanın. Azure IoT Edge, bir cihaz çevrimdışı olduğunda iletileri önbelleğe almak ve bağlantı yeniden başlatıldığında bunları iletmek için temel depolama özelliklerine sahiptir. Ancak verileri yerel olarak sorgulayabilme gibi daha gelişmiş depolama özelliklerine sahip olmak isteyebilirsiniz. IoT Edge cihazlarınız, IoT Hub bağlantısını sürdürmek zorunda kalmadan daha karmaşık bilgi işlem gerçekleştirmek için yerel veritabanlarını kullanabilir.
Bu makalede, IOT Edge cihazına SQL Server veritabanı dağıtma yönergeleri sağlanır. IoT Edge cihazında çalışan Azure İşlevleri, gelen verileri yapılar ve ardından veritabanına gönderir. Bu makaledeki adımlar, MySQL veya PostgreSQL gibi kapsayıcılarda çalışan diğer veritabanlarına da uygulanabilir.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Azure İşlevi oluşturmak için Visual Studio Code kullanma
- IoT Edge cihazınıza SQL veritabanı dağıtma
- Visual Studio Code kullanarak modül oluşturma ve bunları IoT Edge cihazınıza dağıtma
- Oluşturulan verileri görüntüleme
Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.
Önkoşullar
Bu öğreticiye başlamadan önce, Linux kapsayıcı geliştirme için geliştirme ortamınızı ayarlamak için önceki öğreticiyi incelemiş olmanız gerekir: Visual Studio Code kullanarak Azure IoT Edge modülleri geliştirme. Bu öğreticiyi tamamladığınızda aşağıdaki önkoşullara sahip olmanız gerekir:
- Azure'da ücretsiz veya standart katmanlı bir IoT Hub .
- Linux kapsayıcıları ile Azure IoT Edge çalıştıran bir AMD64 cihazı.
Linux cihazı veya Windows cihazı ayarlamak için hızlı başlangıçları kullanabilirsiniz.
- Raspberry gibi ARM cihazları SQL Server'ı çalıştıramaz. SQL'i bir ARM cihazında kullanmak istiyorsanız Azure SQL Edge'i kullanabilirsiniz.
- Azure Container Registry gibi bir kapsayıcı kayıt defteri.
- Azure IoT Edge ve Azure IoTHub uzantılarıyla yapılandırılmış Visual Studio Code. Visual Studio Code uzantısı için Azure IoT Edge araçlarıbakım modundadır.
- Geliştirme makinenize Docker uyumlu bir kapsayıcı yönetim sistemi indirip yükleyin. Linux kapsayıcılarını çalıştıracak şekilde yapılandırın.
Bu öğreticide SQL Server'a veri göndermek için bir Azure İşlevleri modülü kullanılır. Azure İşlevleri ile bir IoT Edge modülü geliştirmek için geliştirme makinenize aşağıdaki ek önkoşulları yükleyin:
- Visual Studio Code için C# (OmniSharp ile desteklenir) Visual Studio Code uzantısı.
- .NET Core SDK'sı.
İşlev projesi oluşturma
Veritabanına veri göndermek için verileri düzgün yapılandırabilen ve sonra bir tabloda depolayan bir modüle ihtiyacınız vardır.
Yeni proje oluşturma
Aşağıdaki adımlarda Visual Studio Code ve Azure IoT Edge uzantısını kullanarak IoT Edge işlevinin nasıl oluşturulacağı gösterilmektedir.
Visual Studio Code'yu açın.
Komut paletiniGörüntüle'yi> seçerek Visual Studio Code komut paletini açın.
Komut paletinde Azure IoT Edge: Yeni IoT Edge çözümü komutunu yazın ve çalıştırın. Komut paletinde çözümünüzü oluşturmak için aşağıdaki bilgileri sağlayın:
Field Değer Klasör seç Çözüm dosyalarını oluşturmak için Visual Studio Code geliştirme makinenizde konumu seçin. Çözüm adı belirtin Çözümünüz için SqlSolution gibi açıklayıcı bir ad girin veya varsayılanı kabul edin. Modül şablonunu seçme Azure İşlevleri - C# öğesini seçin. Modül adı sağlayın Modülünüze sqlFunction adını verin. Modül için Docker görüntü deposu sağlama Görüntü deposu, kapsayıcı kayıt defterinizin adını ve kapsayıcı görüntünüzün adını içerir. Kapsayıcı görüntünüz son adımda önceden doldurulur. localhost:5000 değerini Azure kapsayıcı kayıt defterinizdeki Oturum açma sunucusu değeriyle değiştirin. Oturum açma sunucusunu Azure portalındaki kapsayıcı kayıt defterinizin Genel Bakış sayfasından alabilirsiniz.
Son dize kayıt defteri adı.azurecr.io/sqlfunction> gibi <görünür.Visual Studio Code penceresi IoT Edge çözüm çalışma alanınızı yükler.
Kayıt defteri kimlik bilgilerinizi ekleme
Ortam dosyası, kapsayıcı kayıt defterinizin kimlik bilgilerini depolar ve bunları IoT Edge çalışma zamanıyla paylaşır. Çalışma zamanı, özel görüntülerinizi IoT Edge cihazına çekmek için bu kimlik bilgilerine ihtiyaç duyar.
IoT Edge uzantısı, kapsayıcı kayıt defteri kimlik bilgilerinizi Azure'dan çekmeye çalışır ve bunları ortam dosyasına doldurur. Kimlik bilgilerinizin zaten dahil olup olmadığını denetleyin. Yoksa, şimdi ekleyin:
- Visual Studio Code gezgininde .env dosyasını açın.
- Alanları Azure kapsayıcı kayıt defterinizden kopyaladığınız kullanıcı adı ve parola değerleriyle güncelleştirin.
- Bu dosyayı kaydedin.
Uyarı
Bu öğreticide, geliştirme ve test senaryoları için uygun olan Azure Container Registry için yönetici oturum açma kimlik bilgileri kullanılır. Üretim senaryolarına hazır olduğunuzda, hizmet sorumluları gibi en az ayrıcalıklı bir kimlik doğrulama seçeneği öneririz. Daha fazla bilgi için bkz. Kapsayıcı kayıt defterinize erişimi yönetme.
Hedef mimarinizi seçin
Kapsayıcı her mimari türü için farklı şekilde oluşturulduğundan ve çalıştırıldığından, her çözümle hedeflediğiniz mimariyi seçmeniz gerekir. Varsayılan değer Linux AMD64'dür.
Komut paletini açın ve Azure IoT Edge: Edge Çözümü için Varsayılan Hedef Platformu Ayarla'yı arayın veya pencerenin alt kısmındaki yan çubuktaki kısayol simgesini seçin.
Komut paletinde, seçenekler listesinden hedef mimariyi seçin. Bu öğreticide IoT Edge cihazı olarak bir Ubuntu sanal makinesi kullanıyoruz, dolayısıyla varsayılan amd64'ü kullanmaya devam edeceğiz.
Modülü özel kodla güncelleştirme
Visual Studio Code gezginindesqlFunction sqlFunction.csproj>modüllerini> açın.
Paket başvuruları grubunu bulun ve SqlClient'ı içerecek yeni bir başvuru ekleyin.
<PackageReference Include="System.Data.SqlClient" Version="4.5.1"/>sqlFunction.csproj dosyasını kaydedin.
sqlFunction.cs dosyasını açın.
Dosyanın tüm içeriğini aşağıdaki kodla değiştirin:
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using Microsoft.Azure.Devices.Client; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.EdgeHub; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Sql = System.Data.SqlClient; namespace Functions.Samples { public static class sqlFunction { [FunctionName("sqlFunction")] public static async Task FilterMessageAndSendMessage( [EdgeHubTrigger("input1")] Message messageReceived, [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output, ILogger logger) { const int temperatureThreshold = 20; byte[] messageBytes = messageReceived.GetBytes(); var messageString = System.Text.Encoding.UTF8.GetString(messageBytes); if (!string.IsNullOrEmpty(messageString)) { logger.LogInformation("Info: Received one non-empty message"); // Get the body of the message and deserialize it. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); //Store the data in SQL db const string str = "<sql connection string>"; using (Sql.SqlConnection conn = new Sql.SqlConnection(str)) { conn.Open(); var insertMachineTemperature = "INSERT INTO MeasurementsDB.dbo.TemperatureMeasurements VALUES (CONVERT(DATETIME2,'" + messageBody.timeCreated + "', 127), 'machine', " + messageBody.machine.temperature + ");"; var insertAmbientTemperature = "INSERT INTO MeasurementsDB.dbo.TemperatureMeasurements VALUES (CONVERT(DATETIME2,'" + messageBody.timeCreated + "', 127), 'ambient', " + messageBody.ambient.temperature + ");"; using (Sql.SqlCommand cmd = new Sql.SqlCommand(insertMachineTemperature + "\n" + insertAmbientTemperature, conn)) { //Execute the command and log the # rows affected. var rows = await cmd.ExecuteNonQueryAsync(); logger.LogInformation($"{rows} rows were updated"); } } if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { // Send the message to the output as the temperature value is greater than the threshold. using (var filteredMessage = new Message(messageBytes)) { // Copy the properties of the original message into the new Message object. foreach (KeyValuePair<string, string> prop in messageReceived.Properties) {filteredMessage.Properties.Add(prop.Key, prop.Value);} // Add a new property to the message to indicate it is an alert. filteredMessage.Properties.Add("MessageType", "Alert"); // Send the message. await output.AddAsync(filteredMessage); logger.LogInformation("Info: Received and transferred a message with temperature above the threshold"); } } } } } //Define the expected schema for the body of incoming messages. class MessageBody { public Machine machine {get; set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} } }35. satırda sql bağlantı dizesini<> aşağıdaki dizeyle değiştirin. Veri Kaynağı özelliği henüz mevcut olmayan SQL Server kapsayıcısını başvurur. Sonraki bölümde SQL adıyla oluşturacaksınız. Password anahtar sözcüğü için güçlü bir parola seçin.
Data Source=tcp:sql,1433;Initial Catalog=MeasurementsDB;User Id=SA;Password=<YOUR-STRONG-PASSWORD>;TrustServerCertificate=False;Connection Timeout=30;sqlFunction.cs dosyasını kaydedin.
SQL Server kapsayıcısını ekleme
Dağıtım bildirimi, IoT Edge çalışma zamanının IoT Edge cihazınıza yükleneceği modülleri bildirir. Önceki bölümde özelleştirilmiş bir İşlev modülü oluşturmak için kodu sağladınız, ancak SQL Server modülü zaten Microsoft Artifact Registry'de oluşturulmuş ve kullanılabilir durumda. IoT Edge çalışma zamanına bunu dahil etmelerini söylemeniz ve ardından cihazınızda yapılandırmanız yeterlidir.
Visual Studio Code'da Komut paletini Görüntüle'yi> seçerekkomut paletini açın.
Komut paletinde Azure IoT Edge: IoT Edge modülü ekleme komutunu yazın ve çalıştırın. Komut paletinde, yeni bir modül eklemek için aşağıdaki bilgileri sağlayın:
Field Değer Dağıtım şablonu dosyasını seçin Komut paleti, geçerli çözüm klasörünüzdeki deployment.template.json dosyasını vurgular. Bu dosyayı seçin. Modül şablonunu seçme Var Olan Modül (Tam Görüntü URL'sini Girin) öğesini seçin. Modül Adı Sağlayın sql girin. Bu ad, sqlFunction.cs dosyasındaki bağlantı dizesinde bildirilen kapsayıcı adıyla eşleşir. Modül için Docker Görüntüsü Sağlama Microsoft Artifact Registry'den SQL Server kapsayıcı görüntüsünü çekmek için aşağıdaki URI'yi girin. Ubuntu tabanlı görüntüler için kullanın mcr.microsoft.com/mssql/server:latest. Red Hat Enterprise Linux (RHEL) tabanlı görüntüler için kullanınmcr.microsoft.com/mssql/rhel/server:latest.Azure SQL Edge kapsayıcı görüntüsü, Sql Server'ın IoT Edge cihazlarında çalışabilen basit ve kapsayıcılı bir sürümüdür. Uç senaryoları için en iyi duruma getirilmiştir ve ARM ve AMD64 cihazlarında çalıştırılabilir.
Çözüm klasörünüzde deployment.template.json dosyasını açın.
Modüller bölümünü bulun. Üç modül görmeniz gerekir. SimulatedTemperatureSensor modülü yeni çözümlere varsayılan olarak eklenir ve diğer modüllerinizle birlikte kullanılacak test verilerini sağlar. sqlFunction modülü, başlangıçta oluşturduğunuz ve yeni kodla güncelleştirdiğiniz modüldür. Son olarak sql modülü Microsoft Artifact Registry'den içeri aktarıldı.
Tavsiye
SQL Server modülü, dağıtım bildiriminin ortam değişkenlerinde ayarlanmış bir varsayılan parola ile birlikte gelir. Üretim ortamında bir SQL Server kapsayıcısı oluşturduğunuzda , varsayılan sistem yöneticisi parolasını değiştirmeniz gerekir.
deployment.template.json dosyasını kapatın.
IoT Edge çözümünüzü oluşturma
Önceki bölümlerde, bir modülle bir çözüm oluşturdunuz ve ardından dağıtım bildirimi şablonuna başka bir çözüm eklediniz. SQL Server modülü Microsoft tarafından genel olarak barındırılır, ancak kodu İşlevler modülünde kapsayıcılı hale getirmelisiniz. Bu bölümde çözümü derleyip sqlFunction modülü için kapsayıcı görüntüleri oluşturacak ve görüntüyü kapsayıcı kayıt defterinize göndereceksiniz.
Visual Studio Code'da Terminali Görüntüle'yi> seçerek tümleşik terminaliaçın.
Görüntülerinizi kayıt defterinize gönderebilmek için Visual Studio Code'da kapsayıcı kayıt defterinizde oturum açın. .env dosyasına eklediğiniz Azure Container Registry (ACR) kimlik bilgilerini kullanın. Tümleşik terminale aşağıdaki komutu girin:
docker login -u <ACR username> -p <ACR password> <ACR login server>--password-stdin parametresinin kullanılmasını öneren bir güvenlik uyarısı görebilirsiniz. Kullanımı bu makalenin kapsamı dışında olsa da, bu en iyi yöntemin izlenmesini öneririz. Daha fazla bilgi için docker oturum açma komutu başvurusuna bakın.
Visual Studio Code gezgininde deployment.template.json dosyasına sağ tıklayın ve IoT Edge çözümü oluştur ve gönder'i seçin.
Derleme ve gönderme komutu üç işlem başlatır. İlk olarak, çözümde, dağıtım şablonundaki ve diğer çözüm dosyalarındaki bilgilerle oluşturulmuş olan tam dağıtım bildirimini tutan yapılandırma adlı yeni bir klasör oluşturur. İkincisi, hedef mimariniz için uygun dockerfile'ı temel alarak kapsayıcı görüntüsünü derlemek için çalışır
docker build. Ardından, görüntü deposunu kapsayıcı kayıt defterinize göndermek için çalışırdocker push.Bu işlem ilk kez birkaç dakika sürebilir, ancak komutları bir sonraki çalıştırmanızda daha hızlıdır.
sqlFunction modülünün kapsayıcı kayıt defterinize başarıyla gönderildiğini doğrulayabilirsiniz. Azure portalında kapsayıcı kayıt defterinize gidin. Depoları seçin ve sqlFunction araması yapın. SimulatedTemperatureSensor ve sql adlı diğer iki modül, depoları zaten Microsoft kayıt defterlerinde olduğundan kapsayıcı kayıt defterinize gönderilmez.
Çözümü bir cihaza dağıtma
IoT Hub aracılığıyla bir cihazda modül ayarlayabilirsiniz, ancak IoT Hub'ınıza ve cihazlarınıza Visual Studio Code aracılığıyla da erişebilirsiniz. Bu bölümde IoT Hub'ınıza erişimi ayarlayıp Visual Studio Code kullanarak çözümünüzü IoT Edge cihazınıza dağıtacaksınız.
Visual Studio Code gezginindeki Azure IoT Hub bölümünün altında , IoT cihazları listenizi görmek için Cihazlar'ı genişletin.
Dağıtımınızla hedeflemek istediğiniz cihaza sağ tıklayın ve Tek Cihaz için Dağıtım Oluştur'u seçin.
Yapılandırma klasöründekideployment.amd64.json dosyasını seçin ve ardından Edge Dağıtım Bildirimini Seç'e tıklayın. deployment.template.json dosyasını kullanmayın.
Dağıtılan ve çalışan modüllerin listesini görmek için cihazınızın altında Modüller'i genişletin. Yenile düğmesine tıklayın. SimulatedTemperatureSensor modülü ve $edgeAgent ve $edgeHub ile birlikte çalışan yeni sql ve sqlFunction modüllerini görmeniz gerekir.
Ayrıca tüm modüllerin cihazınızda çalışır durumda olup olmadığını kontrol edebilirsiniz. IoT Edge cihazınızda, modüllerin durumunu görmek için aşağıdaki komutu çalıştırın.
iotedge listModüllerin başlatılması birkaç dakika sürebilir. IoT Edge çalışma zamanının yeni dağıtım bildirimini alması, kapsayıcı çalışma zamanından modül görüntülerini çekmesi ve ardından her yeni modülü başlatması gerekir.
SQL veritabanını oluşturma
Dağıtım bildirimini cihazınıza uyguladığınızda çalışan üç modül elde edersiniz. SimulatedTemperatureSensor modülü, sanal ortam verileri oluşturur. sqlFunction modülü verileri alır ve bir veritabanı için biçimlendirır. Bu bölüm, sıcaklık verilerini depolamak için SQL veritabanını ayarlama işleminde size yol gösterir.
IoT Edge cihazınızda aşağıdaki komutları çalıştırın. Bu komutlar cihazınızda çalışan SQL modülüne bağlanır ve gönderilen sıcaklık verilerini tutmak için bir veritabanı ve tablo oluşturur. YOUR-STRONG-PASSWORD> yerine bağlantı dizenizde seçtiğiniz güçlü parolayı yazın<.
IoT Edge cihazınızdaki bir komut satırı aracında veritabanınıza bağlanın.
sudo docker exec -it sql bashSQL komut aracını açın.
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YOUR-STRONG-PASSWORD>'Veritabanınızı oluşturun:
CREATE DATABASE MeasurementsDB ON (NAME = MeasurementsDB, FILENAME = '/var/opt/mssql/measurementsdb.mdf') GOTablonuzu tanımlayın.
CREATE TABLE MeasurementsDB.dbo.TemperatureMeasurements (measurementTime DATETIME2, location NVARCHAR(50), temperature FLOAT) GO
SQL Server docker dosyanızı özelleştirerek SQL Server'ınızı birden çok IoT Edge cihazına dağıtılacak şekilde otomatik olarak ayarlayabilirsiniz. Daha fazla bilgi için bkz. Microsoft SQL Server kapsayıcı tanıtım projesi.
Yerel verileri görüntüleme
Tablonuz oluşturulduktan sonra sqlFunction modülü IoT Edge cihazınızdaki yerel bir SQL Server 2017 veritabanında veri depolamaya başlar.
Biçimlendirilmiş tablo verilerinizi görüntülemek için SQL komut aracının içinden aşağıdaki komutu çalıştırın:
SELECT * FROM MeasurementsDB.dbo.TemperatureMeasurements
GO
Kaynakları temizle
Bir sonraki önerilen makaleye devam etmek istiyorsanız, oluşturduğunuz kaynakları ve yapılandırmaları tutabilir ve yeniden kullanabilirsiniz. Ayrıca test cihazı olarak aynı IoT Edge cihazını kullanmaya devam edebilirsiniz.
Aksi takdirde, ücretlerden kaçınmak için bu makalede oluşturduğunuz yerel yapılandırmaları ve Azure kaynaklarını silebilirsiniz.
Azure kaynaklarını silme
Azure kaynaklarını ve kaynak gruplarını silme işlemi geri alınamaz. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. IoT hub'ını tutmak istediğiniz kaynakların yer aldığı mevcut bir kaynak grubunda oluşturduysanız, kaynak grubunu değil yalnızca IoT hub kaynağını silin.
Kaynakları silmek için:
Azure portalında oturum açın ve kaynak grupları'nı seçin.
IoT Edge test kaynaklarınızı içeren kaynak grubunun adını seçin.
Kaynak grubunuzda bulunan kaynakların listesini gözden geçirin. Tümünü silmek istiyorsanız Kaynak grubunu sil'i seçebilirsiniz. Yalnızca bazılarını silmek istiyorsanız, her kaynağa tıklayarak bunları tek tek silebilirsiniz.
Bu öğreticide, IoT Edge cihazınız tarafından oluşturulan ham verileri filtrelemek için kod içeren bir Azure İşlevleri modülü oluşturdunuz. Kendi modüllerinizi oluşturmaya hazır olduğunuzda Visual Studio Code kullanarak Azure IoT Edge modülleri geliştirme hakkında daha fazla bilgi edinebilirsiniz.
Sonraki Adımlar
Uçta başka bir depolama yöntemi denemek istiyorsanız IoT Edge'de Azure Blob Depolama'yı kullanma hakkında bilgi edinin.