Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
IoT Edge 1.4
Penting
IoT Edge 1.5 LTS dan IoT Edge 1.4 adalah rilis yang didukung. Jika Anda berada di rilis sebelumnya, lihat Memperbarui IoT Edge.
Sebarkan modul SQL Server untuk menyimpan data di perangkat yang menjalankan Azure IoT Edge dengan kontainer Linux.
Gunakan Azure IoT Edge dan SQL Server untuk menyimpan dan mengkueri data di tepi. Azure IoT Edge memiliki kemampuan penyimpanan dasar untuk menyimpan pesan cache jika perangkat offline, lalu meneruskannya saat koneksi diterbitkan kembali. Namun, Anda mungkin menginginkan kemampuan penyimpanan yang lebih canggih, seperti dapat mengkueri data secara lokal. Perangkat IoT Edge Anda dapat menggunakan database lokal untuk melakukan komputasi yang lebih kompleks tanpa harus mempertahankan koneksi ke IoT Hub.
Artikel ini menyediakan instruksi untuk menyebarkan database SQL Server ke perangkat IoT Edge. Azure Functions, yang berjalan pada perangkat IoT Edge, menyusun data masuk lalu mengirimkannya ke database. Langkah-langkah dalam artikel ini juga dapat diterapkan ke database lain yang berfungsi dalam kontainer, seperti MySQL atau PostgreSQL.
Dalam tutorial ini, Anda akan belajar cara:
- Menggunakan Visual Studio Code untuk membuat Azure Function
- Menyebarkan database SQL ke perangkat IoT Edge Anda
- Menggunakan Visual Studio Code untuk membangun modul dan menyebarkannya ke perangkat IoT Edge Anda
- Menampilkan data yang dihasilkan
Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.
Prasyarat
Sebelum memulai tutorial ini, Anda harus telah melalui tutorial sebelumnya untuk menyiapkan lingkungan pengembangan Anda untuk pengembangan kontainer Linux: Mengembangkan modul Azure IoT Edge menggunakan Visual Studio Code. Dengan menyelesaikan tutorial tersebut, Anda harus memiliki prasyarat berikut:
- IoT Hub tingkat gratis atau standar di Azure.
- Perangkat AMD64 yang menjalankan Azure IoT Edge dengan kontainer Linux. Anda dapat menggunakan mulai cepat untuk menyiapkan perangkat Linux atau perangkat Windows.
- Perangkat ARM, seperti Raspberry Pis, tidak dapat menjalankan SQL Server. Jika Anda ingin menggunakan SQL pada perangkat ARM, Anda dapat menggunakan Azure SQL Edge.
- Registri kontainer, seperti Azure Container Registry.
- Visual Studio Code dikonfigurasi dengan ekstensi Azure IoT Edge dan Azure IoT Hub . Alat Azure IoT Edge untuk ekstensi Visual Studio Code berada dalam mode pemeliharaan.
- Unduh dan instal sistem manajemen kontainer yang kompatibel dengan Docker di komputer pengembangan Anda. Konfigurasikan untuk menjalankan kontainer Linux.
Tutorial ini menggunakan modul Azure Functions untuk mengirim data ke SQL Server. Untuk mengembangkan modul IoT Edge dengan Azure Functions, instal prasyarat tambahan berikut pada komputer pengembangan Anda:
- C# untuk ekstensi Visual Studio Code (didukung oleh OmniSharp) untuk Visual Studio Code.
- .NET Core SDK.
Membuat proyek fungsi
Untuk mengirim data ke dalam database, Anda memerlukan modul yang dapat menyusun data dengan benar lalu menyimpannya dalam tabel.
Membuat proyek baru
Langkah-langkah berikut menunjukkan kepada Anda cara membuat fungsi IoT Edge menggunakan Visual Studio Code dan ekstensi Azure IoT Edge.
Buka Visual Studio Code.
Buka palet perintah Visual Studio Code dengan memilih Tampilkan>palet Perintah.
Di palet perintah, ketik dan jalankan perintah Azure IoT Edge: Solusi IoT Edge baru. Di palet perintah, berikan informasi berikut untuk membuat solusi Anda:
Bidang Nilai Pilih folder Pilih lokasi di komputer pengembangan Anda untuk Visual Studio Code untuk membuat file solusi. Berikan nama solusi Masukkan nama deskriptif untuk solusi Anda, seperti SqlSolution, atau terima default. Pilih templat modul Pilih Azure Functions - C#. Berikan nama modul Beri nama modul Anda sqlFunction. Menyediakan repositori gambar Docker untuk modul Repositori gambar menyertakan nama registri kontainer Anda dan nama gambar kontainer Anda. Gambar kontainer Anda telah diisi sebelumnya dari langkah terakhir. Ganti localhost:5000 dengan nilai Server masuk dari registri kontainer Azure Anda. Anda dapat mengambil server Masuk dari halaman Gambaran Umum registri kontainer Anda di portal Microsoft Azure.
String akhir terlihat seperti <nama> registri.azurecr.io/sqlfunction.Jendela Visual Studio Code memuat ruang kerja solusi IoT Edge Anda.
Menambahkan kredensial registri Anda
File lingkungan menyimpan kredensial untuk registri kontainer Anda dan membagikannya dengan runtime IoT Edge. Runtime memerlukan kredensial ini untuk menarik gambar privat Anda ke perangkat IoT Edge.
Ekstensi IoT Edge mencoba menarik kredensial registri kontainer Anda dari Azure dan mengisinya dalam file lingkungan. Periksa untuk melihat apakah kredensial Anda sudah disertakan. Jika tidak, tambahkan sekarang:
- Di penjelajah Visual Studio Code, buka file .env.
- Perbarui bidang dengan nilai nama pengguna dan kata sandi yang Anda salin dari registri kontainer Azure Anda.
- Simpan file ini.
Nota
Tutorial ini menggunakan info masuk admin untuk Azure Container Registry, yang nyaman untuk skenario pengembangan dan pengujian. Saat Anda siap untuk skenario produksi, kami merekomendasikan opsi autentikasi hak istimewa paling sedikit seperti perwakilan layanan. Untuk informasi selengkapnya, lihat Mengelola akses ke registri kontainer Anda.
Pilih arsitektur target Anda
Anda perlu memilih arsitektur mana yang Anda targetkan dengan setiap solusi, karena kontainer dibangun dan dijalankan secara berbeda untuk setiap jenis arsitektur. Defaultnya adalah Linux AMD64.
Buka palet perintah dan cari Azure IoT Edge: Atur Platform Target Default untuk Solusi Edge, atau pilih ikon pintasan di bilah samping di bagian bawah jendela.
Di palet perintah, pilih arsitektur target dari daftar opsi. Untuk tutorial ini, kami menggunakan komputer virtual Ubuntu sebagai perangkat IoT Edge, jadi akan mempertahankan amd64 default.
Memperbarui modul dengan kode kustom
Di penjelajah Visual Studio Code, buka modul>sqlFunction>sqlFunction.csproj.
Temukan grup referensi paket, dan tambahkan yang baru untuk menyertakan SqlClient.
<PackageReference Include="System.Data.SqlClient" Version="4.5.1"/>Simpan file sqlFunction.csproj .
Buka file sqlFunction.cs .
Ganti seluruh konten file dengan kode berikut:
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;} } }Di baris 35, ganti string> koneksi sql string< dengan string berikut. Properti Sumber Data mereferensikan kontainer SQL Server, yang belum ada. Anda akan membuatnya dengan nama SQL di bagian berikutnya. Pilih kata sandi yang kuat untuk kata kunci Kata Sandi .
Data Source=tcp:sql,1433;Initial Catalog=MeasurementsDB;User Id=SA;Password=<YOUR-STRONG-PASSWORD>;TrustServerCertificate=False;Connection Timeout=30;Simpan file sqlFunction.cs .
Menambahkan kontainer SQL Server
Manifes Penyebaran mendeklarasikan modul mana yang akan diinstal runtime IoT Edge di perangkat IoT Edge Anda. Anda menyediakan kode untuk membuat modul Fungsi yang disesuaikan di bagian sebelumnya, tetapi modul SQL Server sudah dibuat dan tersedia di Microsoft Artifact Registry. Anda hanya perlu memberi tahu runtime IoT Edge untuk menyertakannya, lalu mengonfigurasinya di perangkat Anda.
Di Visual Studio Code, buka palet perintah dengan memilih Tampilkan>Palet Perintah.
Di palet perintah, ketik dan jalankan perintah Azure IoT Edge: Tambahkan modul IoT Edge. Di palet perintah, berikan informasi berikut untuk menambahkan modul baru:
Bidang Nilai Pilih file templat penyebaran Palet perintah menyoroti file deployment.template.json di folder solusi Anda saat ini. Pilih file tersebut. Pilih templat modul Pilih Modul yang Ada (Masukkan URL Gambar Lengkap). Berikan Nama Modul Masukkan sql. Nama ini cocok dengan nama kontainer yang dideklarasikan dalam string koneksi dalam file sqlFunction.cs. Menyediakan Gambar Docker untuk Modul Masukkan URI berikut untuk menarik gambar kontainer SQL Server dari Microsoft Artifact Registry. Untuk gambar berbasis Ubuntu, gunakan mcr.microsoft.com/mssql/server:latest. Untuk gambar berbasis Red Hat Enterprise Linux (RHEL), gunakanmcr.microsoft.com/mssql/rhel/server:latest.Gambar kontainer Azure SQL Edge adalah versi SQL Server kontainer ringan yang dapat berjalan pada perangkat IoT Edge. Ini dioptimalkan untuk skenario tepi dan dapat berjalan pada perangkat ARM dan AMD64.
Di folder solusi Anda, buka file deployment.template.json .
Temukan bagian modul . Anda akan melihat tiga modul. Modul SimulatedTemperatureSensor disertakan secara default dalam solusi baru, dan menyediakan data pengujian untuk digunakan dengan modul Anda yang lain. Modul sqlFunction adalah modul yang awalnya Anda buat dan perbarui dengan kode baru. Terakhir, modul sql diimpor dari Microsoft Artifact Registry.
Petunjuk / Saran
Modul SQL Server dilengkapi dengan kata sandi default yang diatur dalam variabel lingkungan manifes penyebaran. Setiap kali Anda membuat kontainer SQL Server di lingkungan produksi, Anda harus mengubah kata sandi administrator sistem default.
Tutup file deployment.template.json .
Membangun solusi IoT Edge Anda
Di bagian sebelumnya, Anda membuat solusi dengan satu modul, lalu menambahkan yang lain ke templat manifes penyebaran. Modul SQL Server dihosting secara publik oleh Microsoft, tetapi Anda perlu mengkontainerisasi kode dalam modul Functions. Di bagian ini, Anda membangun solusi, membuat gambar kontainer untuk modul sqlFunction, dan mendorong gambar ke registri kontainer Anda.
Di Visual Studio Code, buka terminal terintegrasi dengan memilih Tampilkan>Terminal.
Masuk ke registri kontainer Anda di Visual Studio Code sehingga Anda dapat mendorong gambar ke registri Anda. Gunakan kredensial Azure Container Registry (ACR) yang sama dengan yang Anda tambahkan ke file .env. Masukkan perintah berikut di terminal terintegrasi:
docker login -u <ACR username> -p <ACR password> <ACR login server>Anda mungkin melihat peringatan keamanan yang merekomendasikan penggunaan parameter --password-stdin. Meskipun penggunaannya berada di luar cakupan artikel ini, sebaiknya ikuti praktik terbaik ini. Untuk informasi selengkapnya, lihat referensi perintah masuk docker .
Di penjelajah Visual Studio Code, klik kanan file deployment.template.json dan pilih Buat dan Dorong solusi IoT Edge.
Perintah build dan push memulai tiga operasi. Pertama, ini membuat folder baru dalam solusi yang disebut konfigurasi yang menyimpan manifes penyebaran lengkap, yang dibangun dari informasi dalam templat penyebaran dan file solusi lainnya. Kedua, ini berjalan
docker builduntuk membangun gambar kontainer berdasarkan dockerfile yang sesuai untuk arsitektur target Anda. Kemudian, ia berjalan untuk mendorong repositori gambar ke registridocker pushkontainer Anda.Proses ini mungkin memakan waktu beberapa menit untuk pertama kalinya, tetapi lebih cepat saat Anda menjalankan perintah berikutnya.
Anda dapat memverifikasi bahwa modul sqlFunction berhasil didorong ke registri kontainer Anda. Di portal Microsoft Azure, navigasikan ke registri kontainer Anda. Pilih repositori dan cari sqlFunction. Dua modul lainnya, SimulatedTemperatureSensor dan sql, tidak akan didorong ke registri kontainer Anda karena repositorinya sudah ada di registri Microsoft.
Menyebarkan solusi ke perangkat
Anda dapat mengatur modul pada perangkat melalui IoT Hub, tetapi Anda juga dapat mengakses IoT Hub dan perangkat Anda melalui Visual Studio Code. Di bagian ini, Anda menyiapkan akses ke IoT Hub, lalu menggunakan Visual Studio Code untuk menyebarkan solusi Anda ke perangkat IoT Edge Anda.
Di penjelajah Visual Studio Code, di bawah bagian Azure IoT Hub , perluas Perangkat untuk melihat daftar perangkat IoT Anda.
Klik kanan pada perangkat yang ingin Anda targetkan dengan penyebaran Anda dan pilih Buat Penyebaran untuk Perangkat Tunggal.
Pilih file deployment.amd64.json di folder konfigurasi lalu klik Pilih Manifes Penyebaran Edge. Jangan gunakan file deployment.template.json.
Di bawah perangkat Anda, perluas Modul untuk melihat daftar modul yang disebarkan dan berjalan. Klik tombol refresh. Anda akan melihat modul sql dan sqlFunction baru yang berjalan bersama dengan modul SimulatedTemperatureSensor dan $edgeAgent dan $edgeHub.
Anda juga dapat memeriksa untuk melihat bahwa semua modul aktif dan berjalan di perangkat Anda. Di perangkat IoT Edge Anda, jalankan perintah berikut untuk melihat status modul.
iotedge listMungkin perlu waktu beberapa menit agar modul dimulai. Runtime IoT Edge perlu menerima manifes penyebaran barunya, menarik gambar modul dari runtime kontainer, lalu memulai setiap modul baru.
Membuat database SQL
Saat menerapkan manifes penyebaran ke perangkat, Anda akan menjalankan tiga modul. Modul SimulatedTemperatureSensor menghasilkan data lingkungan yang disimulasikan. Modul sqlFunction mengambil data dan memformatnya untuk database. Bagian ini memandu Anda menyiapkan database SQL untuk menyimpan data suhu.
Jalankan perintah berikut di perangkat IoT Edge Anda. Perintah ini terhubung ke modul sql yang berjalan di perangkat Anda dan membuat database dan tabel untuk menahan data suhu yang dikirim ke dalamnya. Ganti <YOUR-STRONG-PASSWORD> dengan kata sandi kuat yang Anda pilih dalam string koneksi Anda.
Di alat baris perintah di perangkat IoT Edge Anda, sambungkan ke database Anda.
sudo docker exec -it sql bashBuka alat perintah SQL.
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YOUR-STRONG-PASSWORD>'Buat database Anda:
CREATE DATABASE MeasurementsDB ON (NAME = MeasurementsDB, FILENAME = '/var/opt/mssql/measurementsdb.mdf') GOTentukan tabel Anda.
CREATE TABLE MeasurementsDB.dbo.TemperatureMeasurements (measurementTime DATETIME2, location NVARCHAR(50), temperature FLOAT) GO
Anda dapat menyesuaikan file docker SQL Server anda untuk menyiapkan SQL Server Anda secara otomatis untuk disebarkan di beberapa perangkat IoT Edge. Untuk informasi selengkapnya, lihat proyek demo kontainer Microsoft SQL Server.
Menampilkan data lokal
Setelah tabel Anda dibuat, modul sqlFunction mulai menyimpan data dalam database SQL Server 2017 lokal di perangkat IoT Edge Anda.
Dari dalam alat perintah SQL, jalankan perintah berikut untuk melihat data tabel yang diformat:
SELECT * FROM MeasurementsDB.dbo.TemperatureMeasurements
GO
Membersihkan sumber daya
Jika Anda berencana untuk melanjutkan ke artikel yang direkomendasikan berikutnya, Anda dapat menyimpan sumber daya dan konfigurasi yang Anda buat dan menggunakannya kembali. Anda juga dapat terus menggunakan perangkat IoT Edge yang sama dengan perangkat pengujian.
Jika tidak, Anda dapat menghapus konfigurasi lokal dan sumber daya Azure yang Anda buat dalam artikel ini untuk menghindari biaya.
Menghapus sumber daya Azure
Menghapus sumber daya Azure dan grup sumber daya tidak dapat diubah. Pastikan Anda tidak menghapus grup atau sumber daya yang salah secara tidak sengaja. Jika Anda membuat hub IoT di dalam grup sumber daya yang ada yang memiliki sumber daya yang ingin Anda simpan, hapus hanya sumber daya hub IoT itu sendiri, bukan grup sumber daya.
Untuk menghapus sumber daya:
Masuk ke portal Microsoft Azure, lalu pilih Grup sumber daya.
Pilih nama grup sumber daya yang berisi sumber daya pengujian IoT Edge Anda.
Tinjau daftar sumber daya yang terkandung dalam grup sumber daya Anda. Jika Anda ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika Anda hanya ingin menghapus beberapa dari mereka, Anda dapat mengklik setiap sumber daya untuk menghapusnya satu per satu.
Dalam tutorial ini, Anda membuat modul Azure Functions yang berisi kode untuk memfilter data mentah yang dihasilkan oleh perangkat IoT Edge Anda. Saat Anda siap untuk membangun modul Anda sendiri, Anda dapat mempelajari selengkapnya tentang cara Mengembangkan modul Azure IoT Edge menggunakan Visual Studio Code.
Langkah selanjutnya
Jika Anda ingin mencoba metode penyimpanan lain di tepi, baca tentang cara menggunakan Azure Blob Storage di IoT Edge.