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.5
Penting
IoT Edge 1.5 LTS adalah rilis yang didukung. IoT Edge 1.4 LTS adalah akhir masa pakai per 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Memperbarui IoT Edge.
Tutorial ini menunjukkan cara mengembangkan dan menyebarkan kode Anda ke perangkat IoT Edge. Modul Azure IoT Edge memungkinkan Anda menyebarkan kode yang menjalankan logika bisnis Anda langsung di perangkat IoT Edge Anda. Dalam panduan memulai cepat Menyebarkan kode ke perangkat Linux, Anda menyiapkan perangkat IoT Edge dan menyebarkan modul dari Azure Marketplace.
Artikel ini menjelaskan langkah-langkah untuk dua alat pengembangan IoT Edge:
- Baris perintah Azure IoT Edge Dev Tool (CLI), yang lebih disukai untuk pengembangan.
- Alat Azure IoT Edge untuk ekstensi Visual Studio Code , yang berada dalam mode pemeliharaan.
Gunakan tombol pemilih alat di awal artikel ini untuk memilih alat Anda.
Dalam tutorial ini, Anda akan mempelajari cara:
- Menyiapkan komputer pengembangan Anda
- Menggunakan alat IoT Edge untuk membuat proyek baru
- Membangun proyek Anda sebagai kontainer Docker dan menyimpannya di registri kontainer Azure
- Menyebarkan kode Anda ke perangkat IoT Edge
Modul IoT Edge yang Anda buat dalam tutorial ini memfilter data suhu yang dihasilkan perangkat Anda. Ini mengirim pesan di hulu hanya jika suhu berada di atas ambang yang ditetapkan. Analisis semacam ini pada edge membantu mengurangi jumlah data yang dikirim dan disimpan di awan.
Prasyarat
Komputer pengembangan:
- Gunakan komputer Anda sendiri atau komputer virtual.
- Pastikan mesin pengembangan Anda mendukung virtualisasi berlapis untuk menjalankan mesin kontainer.
- Anda dapat menggunakan sebagian besar sistem operasi yang menjalankan mesin kontainer untuk mengembangkan modul IoT Edge untuk perangkat Linux. Tutorial ini menggunakan komputer Windows, tetapi juga menunjukkan perbedaan yang diketahui pada macOS atau Linux.
- Pasang Visual Studio Code.
- Instal Azure CLI.
Perangkat Azure IoT Edge:
- Jalankan IoT Edge pada perangkat terpisah. Menjaga komputer pengembangan dan perangkat IoT Edge tetap terpisah menyimulasikan skenario penyebaran nyata dan membantu menjaga konsep tetap jelas. Gunakan artikel mulai cepat Menyebarkan kode ke Perangkat Linux untuk membuat perangkat IoT Edge di Azure atau templat Azure Resource Manager untuk menyebarkan VM berkemampuan IoT Edge.
Sumber daya cloud:
- Gunakan Azure IoT Hub tingkat gratis atau standar.
Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.
Petunjuk / Saran
Untuk panduan tentang penelusuran kesalahan interaktif di Visual Studio Code atau Visual Studio 2022:
- Men-debug modul Azure IoT Edge menggunakan Visual Studio Code
- Menggunakan Visual Studio 2022 untuk mengembangkan dan men-debug modul untuk Azure IoT Edge
Tutorial ini mencakup langkah-langkah pengembangan untuk Visual Studio Code.
Konsep kunci
Tutorial ini berjalan melalui pengembangan modul IoT Edge. Modul IoT Edge adalah kontainer dengan kode yang dapat dieksekusi. Anda dapat menyebarkan satu atau beberapa modul ke perangkat Azure IoT Edge. Modul melakukan tugas tertentu seperti menyerap data dari sensor, membersihkan dan menganalisis data, atau mengirim pesan ke IoT Hub. Untuk informasi selengkapnya, lihat Memahami modul Azure IoT Edge.
Saat Mengembangkan modul IoT Edge, Anda harus memahami perbedaan antara mesin pengembangan dan perangkat IoT Edge target tempat modul disebarkan. Kontainer yang Anda buat untuk menahan kode modul Anda harus cocok dengan sistem operasi (OS) perangkat target. Misalnya, skenario yang paling umum adalah mengembangkan modul pada komputer Windows untuk menargetkan perangkat Linux yang menjalankan IoT Edge. Dalam hal ini, sistem operasi kontainer adalah Linux. Saat Anda mengikuti tutorial ini, ingatlah perbedaan antara OS komputer pengembangan dan OS kontainer.
Petunjuk / Saran
Jika Anda menggunakan IoT Edge untuk Linux di Windows, perangkat target dalam skenario Anda adalah komputer virtual Linux, bukan host Windows.
Tutorial ini menargetkan perangkat yang menjalankan Azure IoT Edge dengan kontainer Linux. Gunakan sistem operasi pilihan Anda selama mesin pengembangan Anda menjalankan kontainer Linux. Visual Studio Code direkomendasikan untuk mengembangkan dengan kontainer Linux, sehingga tutorial ini menggunakannya. Anda juga dapat menggunakan Visual Studio, meskipun ada perbedaan dukungan antara kedua alat tersebut.
Tabel berikut ini mencantumkan skenario pengembangan yang didukung untuk kontainer Linux di Visual Studio Code dan Visual Studio.
| Visual Studio Code | Visual Studio 2019/2022 | |
|---|---|---|
| Arsitektur perangkat Linux | Linux AMD64 Linux ARM32v7 Linux ARM64 |
Linux AMD64 Linux ARM32 Linux ARM64 |
| Layanan Azure | Azure Functions Azure Stream Analytics Azure Machine Learning |
|
| Bahasa | C C# Jawa Node.js Phyton |
C C# |
| Informasi selengkapnya | Azure IoT Edge untuk Visual Studio Code |
Azure IoT Edge Tools untuk Visual Studio 2019 Alat Azure IoT Edge untuk Visual Studio 2022 |
Pasang komputer kontainer
Modul IoT Edge dikemas sebagai kontainer, jadi Anda memerlukan sistem manajemen kontainer yang kompatibel dengan Docker pada komputer pengembangan Anda untuk membangun dan mengelolanya. Docker Desktop adalah pilihan populer untuk pengembangan karena memiliki dukungan fitur yang kuat. Docker Desktop di Windows memungkinkan Anda beralih antara kontainer Linux dan kontainer Windows, sehingga Anda dapat mengembangkan modul untuk berbagai jenis perangkat IoT Edge.
Gunakan dokumentasi Docker untuk menginstal Docker di komputer pengembangan Anda:
Instal Docker Desktop untuk Windows. Ketika Anda menginstal Docker Desktop untuk Windows, Anda ditanya apakah Anda ingin menggunakan kontainer Linux atau Windows. Anda dapat mengubah pengaturan ini kapan saja. Tutorial ini menggunakan kontainer Linux karena modul menargetkan perangkat Linux. Untuk informasi selengkapnya, lihat Beralih antara kontainer Windows dan Linux.
Baca Tentang Docker CE untuk informasi penginstalan di beberapa platform Linux. Untuk Subsistem Windows untuk Linux (WSL), instal Docker Desktop untuk Windows.
Menyiapkan alat
Instal Azure IoT Edge Dev Tool berbasis Python untuk membuat solusi IoT Edge Anda. Anda memiliki dua pilihan:
- Gunakan Kontainer Dev IoT Edge bawaan pilihan.
- Instal alat menggunakan pengaturan pengembangan iotedgedev.
Penting
Alat Azure IoT Edge untuk ekstensi Visual Studio Code berada dalam mode pemeliharaan. Alat pengembangan yang disukai adalah command-line (CLI) Azure IoT Edge Dev Tool.
Gunakan ekstensi IoT untuk Visual Studio Code guna mengembangkan modul Azure IoT Edge. Ekstensi ini menawarkan templat proyek, mengotomatiskan pembuatan manifes penyebaran, dan memungkinkan Anda memantau dan mengelola perangkat IoT Edge. Di bagian ini, Anda memasang Visual Studio Code dan ekstensi IoT, lalu menyiapkan akun Azure untuk mengelola sumber daya Azure IoT Hub dari dalam Visual Studio Code.
- Instal ekstensi Azure IoT Edge .
- Instal ekstensi Azure IoT Hub .
- Setelah Anda menginstal ekstensi, buka palet perintah dengan memilih Tampilkan > Palet Perintah.
- Di palet perintah, cari dan pilih Azure IoT Hub: Pilih IoT Hub. Ikuti perintah untuk memilih langganan Azure dan IoT Hub Anda.
- Buka bagian penjelajah Visual Studio Code dengan memilih ikon di bilah aktivitas atau dengan memilih Tampilkan > Penjelajah.
- Di bagian bawah penjelajah, luaskan menu Azure IoT Hub / Perangkat yang diciutkan. Anda melihat perangkat dan perangkat IoT Edge yang terkait dengan IoT Hub yang Anda pilih melalui palet perintah.
Menginstal alat khusus bahasa
Instal alat khusus untuk bahasa yang Sedang Anda kembangkan di:
Membuat registri kontainer
Dalam tutorial ini, Anda menggunakan ekstensi Azure IoT Edge dan Azure IoT Hub untuk membangun modul dan membuat gambar kontainer dari file. Kemudian Anda mendorong gambar ini ke registri yang menyimpan dan mengelola gambar Anda. Terakhir, Anda menyebarkan gambar dari registri untuk berjalan di perangkat Azure IoT Edge Anda.
Penting
Ekstensi Azure IoT Edge Visual Studio Code berada dalam mode pemeliharaan.
Anda dapat menggunakan registri yang kompatibel dengan Docker untuk menahan gambar kontainer Anda. Dua layanan registri Docker populer adalah Azure Container Registry dan Docker Hub. Tutorial ini menggunakan Azure Container Registry.
Jika Anda belum memiliki registri kontainer, ikuti langkah-langkah ini untuk membuat yang baru di Azure:
Dalam portal Microsoft Azure, pilih Buat sumber daya>Kontainer>Registri Kontainer.
Berikan nilai yang diperlukan berikut untuk membuat registri kontainer Anda:
Bidang Nilai Langganan Pilih langganan dari daftar menurun. Grup sumber daya Gunakan grup sumber daya yang sama untuk semua sumber daya uji yang Anda buat selama panduan cepat dan tutorial IoT Edge; misalnya, IoTEdgeResources. Nama registri Berikan nama yang unik. Lokasi Pilih lokasi yang dekat dengan Anda. SKU Pilih Dasar. Pilih Tinjau + buat, lalu Buat.
Pilih registri kontainer baru Anda dari bagian Sumber Daya di beranda portal Azure Anda untuk membukanya.
Di panel kiri registri kontainer Anda, pilih Kunci akses dari menu yang terletak di bawah Pengaturan.
Aktifkan pengguna Admin dengan tombol alih dan lihat Nama Pengguna dan Kata Sandi untuk registri kontainer Anda.
Salin nilai untuk Server login, Nama Pengguna, dan kata sandi dan simpan di tempat yang nyaman. Anda menggunakan nilai-nilai ini di seluruh tutorial untuk menyediakan akses ke registri kontainer.
Membuat proyek modul baru
Ekstensi Azure IoT Edge menawarkan templat proyek untuk semua bahasa modul IoT Edge yang didukung di Visual Studio Code. Templat ini mencakup semua file dan kode yang Anda butuhkan untuk menyebarkan modul kerja untuk menguji IoT Edge, atau memberi Anda titik awal untuk menyesuaikan templat dengan logika bisnis Anda sendiri.
Buat Template Proyek
IoT Edge Dev Tool menyederhanakan pengembangan Azure IoT Edge, dengan perintah yang didorong oleh variabel lingkungan. Ini membantu Anda memulai pengembangan IoT Edge menggunakan Kontainer Dev IoT Edge dan perancah solusi IoT Edge yang mencakup modul default dan semua file konfigurasi yang diperlukan.
Buat direktori untuk solusi Anda di jalur yang Anda inginkan. Pindah ke direktori
iotedgesolutionAnda.mkdir c:\dev\iotedgesolution cd c:\dev\iotedgesolutioniotedgedev solution initGunakan perintah untuk membuat solusi dan menyiapkan Azure IoT Hub Anda dalam bahasa pengembangan pilihan Anda:iotedgedev solution init --template csharp
Perintah iotedgedev solution init meminta Anda untuk menyelesaikan beberapa langkah, termasuk:
- Mengautentikasi Azure
- Memilih langganan Azure
- Memilih atau membuat grup sumber daya
- Memilih atau membuat Azure IoT Hub
- Memilih atau membuat perangkat Azure IoT Edge
Gunakan Visual Studio Code dan ekstensi Azure IoT Edge . Mulailah dengan membuat solusi, lalu hasilkan modul pertama dalam solusi tersebut. Setiap solusi dapat mencakup beberapa modul.
- Pilih Tampilkan > Palet Perintah.
- Di palet perintah, masukkan dan jalankan perintah Azure IoT Edge: Solusi IoT Edge Baru.
- Telusuri ke folder tempat Anda ingin membuat solusi baru, lalu pilih Pilih folder.
- Masukkan nama untuk solusi Anda.
- Pilih templat modul bahasa pengembangan pilihan Anda untuk menjadi modul pertama dalam solusi.
- Masukkan nama untuk modul Anda. Pilih nama yang unik dalam registri kontainer Anda.
- Masukkan nama repositori gambar modul. Visual Studio Code secara otomatis mengisi nama modul dengan localhost:5000/<nama> modul Anda. Ganti dengan informasi registri Anda sendiri. Gunakan localhost jika Anda menggunakan registri Docker lokal untuk pengujian. Jika Anda menggunakan Azure Container Registry, gunakan Server masuk dari pengaturan registri Anda. Server masuk terlihat seperti <nama> registri.azurecr.io. Hanya ganti bagian localhost:5000 dari string, sehingga hasil akhir terlihat seperti <nama registri>.azurecr.io/<nama modul Anda>.
Visual Studio Code mengambil informasi yang Anda berikan, membuat solusi IoT Edge, lalu memuatnya di jendela baru.
Setelah Anda membuat solusi, file utama ini berada dalam solusi:
Folder .vscode menyertakan file konfigurasi launch.json.
Folder modul memiliki subfolder untuk setiap modul. Di setiap subfolder, file module.json mengontrol bagaimana modul dibangun dan disebarkan.
File .env mencantumkan variabel lingkungan Anda. Variabel lingkungan untuk registri kontainer adalah localhost:5000 secara default.
Dua file penyebaran modul, deployment.template.json dan deployment.debug.template.json, mencantumkan modul untuk disebarkan ke perangkat Anda. Secara default, daftar menyertakan modul sistem IoT Edge (edgeAgent dan edgeHub) dan modul sampel seperti:
- filtermodule adalah modul sampel yang mengimplementasikan fungsi filter sederhana.
- Modul SimulatedTemperatureSensor mensimulasikan data yang dapat Anda gunakan untuk pengujian. Untuk informasi selengkapnya tentang cara kerja manifes penyebaran, lihat Pelajari cara menggunakan manifes penyebaran untuk menyebarkan modul dan menetapkan rute. Untuk informasi selengkapnya tentang cara kerja modul suhu yang disimulasikan, lihat kode sumber SimulatedTemperatureSensor.csproj.
Catatan
Modul yang tepat yang diinstal dapat bergantung pada bahasa pilihan Anda.
Menetapkan versi {i>runtime
Versi modul sistem IoT Edge stabil terbaru adalah 1.5. Atur modul sistem Anda ke versi 1.5.
Di Visual Studio Code, buka file manifes penyebaran deployment.template.json . Manifes penyebaran adalah dokumen JSON yang menjelaskan modul yang akan dikonfigurasi pada perangkat IoT Edge yang ditargetkan.
Ubah versi runtime untuk gambar
edgeAgentmodul runtime sistem danedgeHub. Misalnya, jika Anda ingin menggunakan runtime IoT Edge versi 1.5, ubah baris berikut dalam file manifes penyebaran:"systemModules": { "edgeAgent": { "image": "mcr.microsoft.com/azureiotedge-agent:1.5", "edgeHub": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
Berikan informasi masuk registri Anda kepada agen IoT Edge
File lingkungan menyimpan informasi masuk untuk repositori kontainer Anda dan membagikannya dengan runtime Azure IoT Edge. Runtime memerlukan kredensial ini untuk menarik gambar kontainer Anda ke perangkat IoT Edge.
Ekstensi Azure IoT Edge mencoba menarik info masuk registri kontainer Anda dari Azure dan mengisinya di file lingkungan.
Catatan
File lingkungan hanya dibuat jika Anda menyediakan repositori gambar untuk modul. Jika Anda menerima default localhost untuk menguji dan menelusuri kesalahan secara lokal, maka Anda tidak perlu mendeklarasikan variabel lingkungan.
Periksa apakah kredensial Anda ada. Jika belum, tambahkan sekarang:
Jika Azure Container Registry adalah registri Anda, atur nama pengguna dan kata sandi Azure Container Registry. Dapatkan nilai-nilai ini dari menu kunci Akses Pengaturan kontainer Anda di portal Azure.
Buka file .env di solusi modul Anda.
Tambahkan nilai nama pengguna dan kata sandi yang Anda salin dari registri kontainer Azure. Contohnya:
CONTAINER_REGISTRY_SERVER="myacr.azurecr.io" CONTAINER_REGISTRY_USERNAME="myacr" CONTAINER_REGISTRY_PASSWORD="<registry_password>"Simpan perubahan Anda ke file .env .
Catatan
Tutorial ini menggunakan info masuk administrator untuk Azure Container Registry yang nyaman untuk skenario pengembangan dan pengujian. Saat Anda siap untuk skenario produksi, kami merekomendasikan opsi autentikasi dengan hak istimewa terbatas seperti prinsipal layanan atau token yang ruang lingkupnya terbatas pada repositori. Untuk informasi selengkapnya, lihat Kelola akses ke registri kontainer Anda.
Arsitektur target
Pilih arsitektur yang Anda targetkan dengan setiap solusi, karena itu memengaruhi cara kontainer dibangun dan dijalankan. Defaultnya adalah Linux AMD64. Untuk tutorial ini, gunakan komputer virtual Ubuntu sebagai perangkat IoT Edge dan pertahankan amd64 default.
Jika Anda perlu mengubah arsitektur target untuk solusi Anda, ikuti langkah-langkah ini.
- Buka palet perintah dan cari Azure IoT Edge: Atur Platform Target Default untuk Solusi Edge, atau pilih ikon pintasan di bar samping di bagian bawah jendela.
- Di palet perintah, pilih arsitektur target dari daftar opsi.
Arsitektur target diatur saat Anda membuat gambar kontainer di langkah selanjutnya.
Memperbarui modul dengan kode kustom
Setiap templat menyertakan kode sampel yang mengambil data sensor simulasi dari modul SimulatedTemperatureSensor dan merutekannya ke IoT Hub. Modul sampel menerima pesan dan meneruskannya. Fungsionalitas alur menunjukkan konsep penting di IoT Edge: bagaimana modul berkomunikasi satu sama lain.
Setiap modul dapat memiliki beberapa antrean input dan output yang dideklarasikan dalam kodenya. Hub IoT Edge yang berjalan pada perangkat merutekan pesan dari output satu modul ke input satu atau beberapa modul. Kode khusus untuk mendeklarasikan input dan output bervariasi di antara bahasa, tetapi konsepnya sama untuk semua modul. Untuk informasi selengkapnya tentang perutean antar modul, lihat Mendeklarasikan rute.
Contoh kode C# yang dilengkapi dengan templat proyek menggunakan kelas ModuleClient dari IoT Hub SDK untuk .NET.
Di penjelajah Visual Studio Code, buka modul > filtermodule > ModuleBackgroundService.cs.
filtermoduleSebelum namespace, tambahkan tigausingdeklarasi untuk jenis yang digunakan nanti:using System.Collections.Generic; // For KeyValuePair<> using Microsoft.Azure.Devices.Shared; // For TwinCollection using Newtonsoft.Json; // For JsonConvertTambahkan variabel
temperatureThresholdke kelasModuleBackgroundService. Variabel ini menetapkan nilai yang harus melebihi suhu yang diukur agar data dikirim ke IoT Hub.static int temperatureThreshold { get; set; } = 25;MessageBodyTambahkan kelas ,Machine, danAmbient. Kelas ini menentukan skema yang diharapkan untuk isi pesan masuk.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;} }Temukan fungsi
ExecuteAsync. Fungsi ini membuat dan mengonfigurasiModuleClientobjek yang memungkinkan modul terhubung ke runtime Azure IoT Edge lokal untuk mengirim dan menerima pesan. Setelah membuatModuleClient, kode membaca nilaitemperatureThresholddari properti yang diinginkan kembar modul. Kode mendaftarkan panggilan balik untuk menerima pesan dari hub IoT Edge melalui titik akhir yang disebutinput1.Ganti panggilan metode
ProcessMessageAsyncdengan metode baru yang memperbarui nama titik akhir dan metode yang dipanggil ketika input tiba. Selain itu, tambahkanSetDesiredPropertyUpdateCallbackAsyncmetode untuk pembaruan pada properti yang diinginkan. Untuk membuat perubahan ini, ganti barisExecuteAsyncterakhir metode dengan kode berikut:// Register a callback for messages that are received by the module. // await _moduleClient.SetInputMessageHandlerAsync("input1", PipeMessage, cancellationToken); // Read the TemperatureThreshold value from the module twin's desired properties var moduleTwin = await _moduleClient.GetTwinAsync(); await OnDesiredPropertiesUpdate(moduleTwin.Properties.Desired, _moduleClient); // Attach a callback for updates to the module twin's desired properties. await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null); // Register a callback for messages that are received by the module. Messages received on the inputFromSensor endpoint are sent to the FilterMessages method. await _moduleClient.SetInputMessageHandlerAsync("inputFromSensor", FilterMessages, _moduleClient);Tambah metode
OnDesiredPropertiesUpdateke kelasModuleBackgroundService. Metode ini menerima pembaruan pada properti yang diinginkan dari modul kembar, dan memperbarui variabel agartemperatureThresholdcocok. Semua modul memiliki twin modulnya masing-masing, yang memungkinkan Anda mengonfigurasi kode yang berjalan di dalam modul langsung dari cloud.static Task OnDesiredPropertiesUpdate(TwinCollection desiredProperties, object userContext) { try { Console.WriteLine("Desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); if (desiredProperties["TemperatureThreshold"]!=null) temperatureThreshold = desiredProperties["TemperatureThreshold"]; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", exception); } } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", ex.Message); } return Task.CompletedTask; }FilterMessagesTambahkan metode . Metode ini digunakan setiap kali modul menerima pesan dari hub IoT Edge. Ini memfilter pesan yang melaporkan suhu di bawah ambang suhu yang ditetapkan melalui twin modul. Ini juga menambahkanMessageTypeproperti ke pesan dengan nilai yang diatur keAlert:async Task<MessageResponse> FilterMessages(Message message, object userContext) { var counterValue = Interlocked.Increment(ref _counter); try { ModuleClient moduleClient = (ModuleClient)userContext; var messageBytes = message.GetBytes(); var messageString = Encoding.UTF8.GetString(messageBytes); Console.WriteLine($"Received message {counterValue}: [{messageString}]"); // Get the message body. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { Console.WriteLine($"Machine temperature {messageBody.machine.temperature} " + $"exceeds threshold {temperatureThreshold}"); using (var filteredMessage = new Message(messageBytes)) { foreach (KeyValuePair<string, string> prop in message.Properties) { filteredMessage.Properties.Add(prop.Key, prop.Value); } filteredMessage.Properties.Add("MessageType", "Alert"); await moduleClient.SendEventAsync("output1", filteredMessage); } } // Indicate that the message treatment is completed. return MessageResponse.Completed; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", exception); } // Indicate that the message treatment is not completed. var moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); // Indicate that the message treatment is not completed. ModuleClient moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } }Simpan file ModuleBackgroundService.cs.
Di penjelajah Visual Studio Code, buka file deployment.template.json di ruang kerja solusi IoT Edge Anda.
Karena kami mengubah nama titik akhir yang didengarkan modul, kami juga perlu memperbarui rute dalam manifes penyebaran sehingga edgeHub mengirim pesan ke titik akhir baru.
Temukan bagian
routesdi modul twin $edgeHub.sensorTofiltermodulePerbarui rute untuk digantiinput1denganinputFromSensor:"sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"Tambahkan twin modul filtermodule ke manifes penyebaran. Sisipkan konten JSON berikut di bagian bawah bagian
modulesContent, setelah modul kembar $edgeHub :"filtermodule": { "properties.desired":{ "TemperatureThreshold":25 } }Simpan file deployment.template.json.
Membangun dan mendorong solusi Anda
Anda memperbarui kode modul dan templat penyebaran untuk membantu memahami beberapa konsep penyebaran utama. Sekarang, Anda siap untuk membangun gambar kontainer modul Anda dan mendorongnya ke registri kontainer Anda.
Di Visual Studio Code, buka file manifes penyebaran deployment.template.json .
Manifes penyebaran menjelaskan modul yang akan dikonfigurasi pada perangkat IoT Edge yang ditargetkan. Sebelum penerapan, Anda harus memperbarui kredensial Azure Container Registry dan gambar modul Anda dengan nilai createOptions yang tepat. Untuk informasi selengkapnya tentang createOptions nilai, lihat Cara mengonfigurasi opsi pembuatan kontainer untuk modul IoT Edge.
Jika Anda menggunakan Azure Container Registry untuk menyimpan gambar modul Anda, tambahkan kredensial Anda ke modulesContent > edgeAgent > settings > registryCredentials bagian di deployment.template.json. Ganti myacr dengan nama registri Anda sendiri dan berikan kata sandi dan alamat server masuk Anda. Contohnya:
"registryCredentials": {
"myacr": {
"username": "myacr",
"password": "<your_acr_password>",
"address": "myacr.azurecr.io"
}
}
Tambahkan atau ganti konten ter-stringifikasikan berikut ke nilai createOptions untuk setiap sistem (edgeHub dan edgeAgent) dan modul kustom (filtermodule dan tempSensor) yang disebutkan. Ubah nilai jika perlu:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
Misalnya, filtermodule konfigurasi harus mirip dengan:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
Gambar Docker modul build
Buka terminal terintegrasi Visual Studio Code dengan memilih Terminal Baru Terminal>.
dotnet publish Gunakan perintah untuk membangun gambar kontainer untuk arsitektur Linux dan amd64. Ubah direktori ke direktori filtermodule di proyek Anda dan jalankan dotnet publish perintah .
dotnet publish --os linux --arch x64 /t:PublishContainer
Saat ini, templat alat iotedgedev menargetkan .NET 7.0. Jika Anda ingin menargetkan versi .NET yang berbeda, Anda dapat mengedit file filtermodule.csproj dan mengubah nilai TargetFramework dan PackageReference. Misalnya untuk menargetkan .NET 8.0, file filtermodule.csproj Anda akan terlihat seperti ini:
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.42.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
</Project>
Tandai gambar docker dengan informasi, versi, dan arsitektur registri kontainer Anda. Ganti myacr dengan nama registri Anda sendiri:
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.1-amd64
Mendorong gambar Docker modul
Berikan kredensial registri kontainer Anda ke Docker sehingga dapat mendorong gambar kontainer Anda ke penyimpanan di registri.
Masuk ke Docker dengan kredensial Azure Container Registry (ACR):
docker login -u <ACR username> -p <ACR password> <ACR login server>Anda mungkin menerima peringatan keamanan yang merekomendasikan penggunaan
--password-stdin. Meskipun itu adalah praktik terbaik yang direkomendasikan untuk skenario produksi, itu di luar cakupan tutorial ini. Untuk mengetahui informasi selengkapnya, lihat referensi masuk docker.Masuk ke Azure Container Registry. Anda harus menginstal Azure CLI untuk menggunakan
azperintah . Perintah ini meminta nama pengguna dan kata sandi Anda yang ditemukan di registri kontainer Anda di > Pengaturan Kunci akses:az acr login -n <ACR registry name>Petunjuk / Saran
Jika Anda keluar kapan saja dalam tutorial ini, ulangi langkah-langkah masuk Docker dan Azure Container Registry untuk melanjutkan.
Dorong gambar modul Anda ke registri lokal atau registri kontainer:
docker push <ImageName>Contohnya:
# Push the Docker image to the local registry docker push localhost:5000/filtermodule:0.0.1-amd64 # Or push the Docker image to an Azure Container Registry. Replace myacr with your Azure Container Registry name. az acr login --name myacr docker push myacr.azurecr.io/filtermodule:0.0.1-amd64
Memperbarui templat penyebaran
Perbarui templat penyebaran deployment.template.json dengan lokasi gambar registri kontainer. Misalnya, jika Anda menggunakan Azure Container Registry myacr.azurecr.io dan gambar Anda filtermodule:0.0.1-amd64, perbarui konfigurasi filtermodule ke:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
}
Di penjelajah Visual Studio Code, klik kanan file deployment.template.json dan pilih Bangun dan Dorong Solusi Azure IoT Edge.
Perintah bangun dan dorong memulai tiga operasi. Pertama, perintah ini membuat folder baru dalam solusi yang disebut konfigurasi yang menyimpan manifes penyebaran penuh, yang dibangun dari informasi dalam templat penyebaran dan file solusi lainnya. Kedua, perintah ini menjalankan docker build untuk membangun file kontainer, berdasarkan dockerfile yang sesuai untuk arsitektur target Anda. Kemudian, perintah ini menjalankan docker push untuk mendorong repositori gambar ke registri kontainer Anda.
Proses ini mungkin memakan waktu beberapa menit untuk pertama kalinya, tetapi lebih cepat saat Anda menjalankan perintah berikutnya.
Opsional: Memperbarui modul dan gambar
Jika Anda membuat perubahan pada kode modul, Anda harus membangun kembali dan mendorong gambar modul ke registri kontainer Anda. Gunakan langkah-langkah di bagian ini untuk memperbarui gambar build dan kontainer. Anda dapat melewati bagian ini jika Anda tidak membuat perubahan apa pun pada kode modul Anda.
Buka file deployment.amd64.json di folder konfigurasi yang baru dibuat. Nama file mencerminkan arsitektur target, jadi berbeda jika Anda memilih arsitektur yang berbeda.
Perhatikan bahwa dua parameter yang memiliki tempat penampung sekarang berisi nilai yang tepat.
registryCredentials Bagian ini memiliki nama pengguna dan kata sandi registri Anda yang diambil dari file .env.
filtermodule memiliki repositori gambar lengkap dengan nama, versi, dan tag arsitektur dari file module.json.
Buka file module.json di folder filtermodule.
Ubah nomor versi untuk gambar modul. Misalnya, menaikkan nomor versi patch menjadi
"version": "0.0.2"seolah-olah Anda membuat perbaikan kecil dalam kode modul.Petunjuk / Saran
Versi modul mengaktifkan kontrol versi, dan memungkinkan Anda menguji perubahan pada sekumpulan kecil perangkat sebelum Anda menyebarkan pembaruan ke produksi. Jika tidak menaikkan versi modul sebelum membangun dan mendorong, maka Anda menimpa repositori di registri kontainer.
Simpan perubahan Anda ke file module.json .
Buat dan dorong gambar yang diperbarui dengan tag versi 0.0.2 . Misalnya, untuk membangun dan mendorong gambar untuk registri lokal atau registri kontainer Azure, gunakan perintah berikut:
# Build the container image for Linux and amd64 architecture.
dotnet publish --os linux --arch x64
# For local registry:
# Tag the image with version 0.0.2, x64 architecture, and the local registry.
docker tag filtermodule localhost:5000/filtermodule:0.0.2-amd64
# For Azure Container Registry:
# Tag the image with version 0.0.2, x64 architecture, and your container registry information. Replace **myacr** with your own registry name.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.2-amd64
Klik kanan file deployment.template.json lagi, dan pilih Bangun dan Dorong Solusi IoT Edge lagi.
Buka kembali file deployment.amd64.json. Perhatikan bahwa sistem build tidak membuat file baru saat Anda menjalankan perintah build dan push lagi. Sebaliknya, pembaruan file yang sama untuk mencerminkan perubahan. Gambar filtermodule sekarang menunjuk ke kontainer versi 0.0.2.
Untuk memverifikasi lebih lanjut apa yang dilakukan perintah build dan push, buka portal Microsoft Azure dan navigasikan ke registri kontainer Anda. Di registri kontainer Anda, pilih Repositori lalu filtermodule. Verifikasi bahwa kedua versi pendorongan gambar ke registri.
Pecahkan masalah
Jika mengalami kesalahan saat membangun dan mendorong gambar modul Anda, kesalahan ini sering kali berkaitan dengan konfigurasi Docker pada komputer pengembangan Anda. Gunakan pemeriksaan berikut untuk meninjau konfigurasi Anda:
- Apakah Anda menjalankan perintah
docker loginmenggunakan info masuk yang Anda salin dari registri kontainer? Info masuk ini berbeda dari yang Anda gunakan untuk masuk ke Azure. - Apakah repositori kontainer Anda benar? Apakah itu memiliki nama registri kontainer yang benar dan nama modul Anda yang benar? Buka file module.json di folder filtermodule untuk diperiksa. Nilai repositori harus mirip dengan <nama registri>.azurecr.io/filtermodule.
- Jika Anda menggunakan nama yang berbeda dari filtermodule untuk modul Anda, apakah nama tersebut konsisten di seluruh solusi?
- Apakah komputer Anda menjalankan jenis kontainer yang sama dengan yang Anda bangun? Tutorial ini untuk perangkat Azure IoT Edge Linux, jadi Visual Studio Code harus menampilkan amd64 atau arm32v7 di bilah sisi, dan Docker Desktop harus menjalankan kontainer Linux.
Menyebarkan modul ke perangkat
Anda memverifikasi bahwa ada gambar kontainer bawaan yang disimpan di registri kontainer Anda, jadi saatnya untuk menyebarkannya ke perangkat. Pastikan perangkat Azure IoT Edge Anda sudah siap dan dapat dijalankan.
Gunakan perintah set-modul IoT Edge Azure CLI untuk menyebarkan modul ke Azure IoT Hub. Misalnya, untuk menyebarkan modul yang ditentukan dalam file deployment.template.json ke IoT Hub my-iot-hub untuk perangkat IoT Edge perangkat saya, gunakan perintah berikut. Ganti nilai string koneksi hub-name, device-id, dan login IoT Hub dengan milik Anda sendiri.
az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
Petunjuk / Saran
Temukan string koneksi IoT Hub Anda, termasuk kunci akses bersama, di portal Microsoft Azure. Buka IoT Hub Anda, dan pilih Pengaturan keamanan, kebijakan akses bersama > iothubowner.
Di penjelajah Visual Studio Code, pada bagian Azure IoT Hub, luaskan Perangkat untuk melihat daftar perangkat IoT Anda.
Klik kanan perangkat Azure IoT Edge yang ingin Anda sebarkan, lalu pilih Buat Penyebaran untuk Satu Perangkat.
Di file penjelajah, navigasikan ke folder konfigurasi lalu pilih file deployment.amd64.json.
Jangan gunakan file deployment.template.json, yang tidak memiliki kredensial registri kontainer atau nilai gambar modul di dalamnya. Jika Anda menargetkan perangkat Linux ARM32, nama manifes penyebaran adalah deployment.arm32v7.json.
Pada perangkat Anda, luaskan Modul untuk melihat daftar modul yang disebarkan dan berjalan. Pilih tombol refresh. Anda akan melihat modul tempSensor dan filtermodule baru yang berjalan di perangkat Anda.
Diperlukan waktu beberapa menit agar modul dimulai. Runtime IoT Edge menerima manifes penyebaran barunya, mengunduh citra modul dari runtime kontainer, lalu memulai setiap modul baru.
Melihat pesan dari perangkat
Kode modul sampel mendapatkan pesan melalui antrean inputnya dan mengirimkannya melalui antrean outputnya. Manifes penyebaran menyiapkan rute yang mengirim pesan ke filtermodule dari tempSensor, lalu meneruskan pesan dari filtermodule ke IoT Hub. Ekstensi Azure IoT Edge dan Azure IoT Hub memungkinkan Anda melihat pesan saat tiba di IoT Hub dari perangkat Anda.
Di penjelajah Visual Studio Code, pilih perangkat IoT Edge yang ingin Anda pantau, lalu pilih Mulai Pantau Titik Akhir Peristiwa Bawaan.
Tonton jendela output di Visual Studio Code untuk melihat pesan tiba di IoT Hub Anda.
Melihat perubahan pada perangkat
Untuk melihat apa yang terjadi di perangkat Anda, gunakan perintah di bagian ini untuk memeriksa runtime dan modul IoT Edge yang berjalan di perangkat Anda.
Perintah ini untuk perangkat IoT Edge Anda, bukan komputer pengembangan Anda. Jika menggunakan komputer virtual untuk perangkat Azure IoT Edge Anda, sambungkan sekarang. Di Azure, buka halaman gambaran umum komputer virtual dan pilih Sambungkan untuk mengakses koneksi shell aman.
Lihat semua modul yang diterapkan ke perangkat Anda, dan periksa statusnya:
iotedge listAnda melihat empat modul: dua modul runtime IoT Edge, tempSensor, dan filtermodule. Keempatnya harus terdaftar sebagai beroperasi.
Periksa log untuk modul tertentu:
iotedge logs <module name>Nama modul sensitif terhadap huruf besar/kecil.
TempSensor dan log filtermodule menunjukkan pesan yang mereka pemrosesan. Modul edgeAgent memulai modul lain, sehingga lognya memiliki informasi tentang manifes penyebaran. Jika modul tidak tercantum atau tidak berjalan, periksa log edgeAgent untuk kesalahan. Modul edgeHub mengelola komunikasi antara modul dan IoT Hub. Jika modul berjalan tetapi pesan tidak tiba di IoT Hub Anda, periksa log edgeHub untuk kesalahan.
Membersihkan sumber daya
Jika Anda ingin melanjutkan ke artikel yang direkomendasikan berikutnya, pertahankan sumber daya dan konfigurasi yang Anda buat dan gunakan kembali. Anda juga dapat tetap menggunakan perangkat IoT Edge yang sama sebagai perangkat uji. Jika tidak, untuk menghindari biaya, hapus konfigurasi lokal dan sumber daya Azure yang Anda gunakan dalam artikel ini.
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 IoT Hub di dalam grup sumber daya yang ada yang memiliki sumber daya yang ingin Anda simpan, hapus hanya sumber daya IoT Hub itu sendiri, bukan grup sumber daya.
Untuk menghapus sumber daya:
- Masuk ke portal Azure, lalu pilih Grup sumber daya.
- Pilih nama grup sumber daya yang berisi sumber daya pengujian IoT Edge Anda.
- Tinjau daftar sumber daya yang dimuat grup sumber daya Anda. Jika ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika Anda hanya ingin menghapus beberapa dari mereka, Anda dapat memilih setiap sumber daya untuk menghapusnya satu per satu.
Langkah berikutnya
Dalam tutorial ini, Anda menyiapkan Visual Studio Code di komputer pengembangan dan menyebarkan modul IoT Edge pertama Anda dengan kode yang memfilter data mentah yang dihasilkan oleh perangkat IoT Edge Anda.
Lanjutkan ke tutorial berikutnya untuk mempelajari bagaimana Azure IoT Edge memungkinkan Anda menyebarkan layanan cloud Azure untuk memproses dan menganalisis data di tepi.
Debug modulAzure IoT Edge FunctionsStream AnalyticsCustom Vision Service