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 didukung. IoT Edge 1.4 LTS mencapai akhir masa pakai pada 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Update IoT Edge.
Tutorial ini menunjukkan cara mengembangkan dan menyebarkan kode Anda ke perangkat IoT Edge. Azure IoT Edge modul memungkinkan Anda menyebarkan kode yang menjalankan logika bisnis Anda langsung di perangkat IoT Edge Anda. Dalam panduan cepat Deploy 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:
- Azure IoT Edge Dev Tool baris perintah (CLI), yang lebih disukai untuk pengembangan.
- Azure IoT Edge tools 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
- Gunakan alat IoT Edge untuk membuat proyek baru
- Bangun proyek Anda sebagai kontainer Docker dan simpan dalam 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.
- Instal Visual Studio Code
- Instal Azure CLI.
Perangkat Azure IoT Edge:
- Jalankan IoT Edge pada perangkat terpisah. Menjaga komputer pengembangan dan perangkat IoT Edge terpisah mensimulasikan skenario penyebaran nyata dan membantu menjaga konsep tetap jelas. Gunakan artikel panduan cepat Deploy Kode ke Perangkat Linux untuk membuat perangkat IoT Edge di Azure atau gunakan template Azure Resource Manager untuk menyebarkan VM yang dilengkapi dengan IoT Edge .
Sumber daya cloud:
- Gunakan tingkat gratis atau standar Azure IoT Hub.
Jika Anda tidak memiliki akun Azure, buat akun free sebelum Memulai.
Petunjuk / Saran
Untuk panduan tentang penelusuran kesalahan interaktif di Visual Studio Code atau Visual Studio 2022:
- Debug modul-modul Azure IoT Edge menggunakan Visual Studio Code
- Gunakan 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 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 modul Azure IoT Edge Understand.
Saat mengembangkan modul IoT Edge, Anda harus memahami perbedaan antara komputer 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 berjalan 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 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# Java Node.js Python |
C C# |
| Informasi selengkapnya | Azure IoT Edge untuk Visual Studio Code | Alat Azure IoT Edge untuk Visual Studio 2019 alat Azure IoT Edge untuk Visual Studio 2022 |
Pasang mesin kontainer
modul IoT Edge dikemas sebagai kontainer, jadi Anda memerlukan sistem manajemen kontainer yang kompatibel dengan Docker di 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:
Install Docker Desktop untuk Windows. Saat menginstal Docker Desktop untuk Windows, Anda akan 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 Switch antara kontainer Windows dan Linux.
Baca Tentang Docker CE untuk informasi penginstalan di beberapa platform Linux. Untuk Windows Subsystem for Linux (WSL), instal Docker Desktop untuk Windows.
Menyiapkan alat
Install Azure IoT Edge Dev Tool berbasis Python untuk membuat solusi IoT Edge Anda. Anda memiliki dua pilihan:
- Gunakan IoT Edge Dev Container bawaan dan terpilih.
- Instal alat ini menggunakan penyiapan pengembangan iotedgedev.
Penting
Ekstensi Azure IoT Edge Tools untuk Visual Studio Code berada dalam mode pemeliharaan. Alat pengembangan yang disukai adalah baris perintah (CLI) Azure IoT Edge Dev Tool.
Gunakan ekstensi IoT untuk Visual Studio Code untuk mengembangkan modul IoT Edge. Ekstensi ini menawarkan templat proyek, mengotomatiskan pembuatan manifes penyebaran, dan memungkinkan Anda memantau dan mengelola perangkat IoT Edge. Di bagian ini, Anda menginstal Visual Studio Code dan ekstensi IoT, lalu menyiapkan akun Azure Anda untuk mengelola sumber daya 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 > Explorer.
- Di bagian bawah penjelajah, perluas menu Azure IoT Hub/ Perangkat yang tadinya diperkecil. 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 dijalankan di perangkat IoT Edge Anda.
Penting
Ekstensi Azure IoT Edge Visual Studio Code berada dalam mode maintenance.
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 berikut untuk membuat yang baru di Azure:
Di portal Azure, pilih Buat sumber daya>Containers>Container Registry.
Berikan nilai yang diperlukan berikut untuk membuat registri kontainer Anda:
Bidang Nilai Langganan Pilih langganan dari menu tarik-turun. Grup sumber daya Gunakan grup sumber daya yang sama untuk semua sumber daya pengujian yang Anda buat selama mulai 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 Resources halaman 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 dalam 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 IoT Edge Dev Container 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\iotedgesolutionGunakan perintah
iotedgedev solution inituntuk membuat solusi dan menyiapkan Azure IoT Hub Anda dalam bahasa pengembangan pilihan Anda:
Perintah iotedgedev solution init meminta Anda untuk menyelesaikan beberapa langkah, termasuk:
- Mengautentikasi ke Azure
- Pilih langganan Azure
- Memilih atau membuat grup sumber daya
- Memilih atau membuat Azure IoT Hub
- Memilih atau membuat perangkat Azure IoT Edge
Gunakan ekstensi Visual Studio Code dan 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 Login 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 mencakup 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 runtime IoT Edge
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. Manifest deployment adalah dokumen JSON yang menjelaskan modul yang dikonfigurasi pada perangkat IoT Edge yang ditargetkan.
Ubah versi runtime untuk modul runtime sistem gambar
edgeAgentdanedgeHub. 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 kredensial registri Anda ke agen IoT Edge
File lingkungan menyimpan kredensial untuk registri kontainer Anda dan membagikannya dengan runtime IoT Edge. Runtime memerlukan kredensial ini untuk menarik gambar kontainer Anda ke perangkat IoT Edge.
Ekstensi IoT Edge mencoba menarik kredensial registri kontainer Anda dari Azure dan mengisinya dalam 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 Settings>Akses kunci di portal Azure.
Buka file .env di solusi modul Anda.
Tambahkan username dan password nilai yang Anda salin dari registri kontainer Azure Anda. 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 kredensial 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 yang dituju
Pilih arsitektur yang Anda targetkan dengan setiap solusi, karena itu memengaruhi cara kontainer dibangun dan dijalankan. Defaultnya adalah Linux AMD64. Untuk tutorial ini, gunakan mesin virtual Ubuntu sebagai perangkat IoT Edge dan pertahankan default amd64.
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 bilah 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 dalam 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 disertakan dengan templat proyek menggunakan kelas ModuleClient dari IoT Hub SDK untuk .NET.
Di penjelajah Visual Studio Code, buka modules > 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 terukur 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 mengonfigurasi objekModuleClientyang 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 ini 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 properti kembar 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; }Tambahkan metode
FilterMessages. Metode ini dipanggil setiap kali modul menerima pesan dari hub IoT Edge. Ini memfilter pesan yang melaporkan suhu di bawah ambang batas suhu yang ditetapkan melalui modul kembar. 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 modul filtermodule twin 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 membuat gambar kontainer modul Anda dan mengunggahnya ke registri kontainer Anda.
Di Visual Studio Code, buka file manifes penyebaran deployment.template.json. Manifes deployment menjelaskan modul yang akan dikonfigurasi pada perangkat IoT Edge yang ditargetkan. Sebelum penyebaran, Anda harus memperbarui kredensial Azure Container Registry dan gambar modul Anda dengan nilai createOptions yang tepat. Untuk informasi selengkapnya tentang nilai createOptions, lihat Cara mengonfigurasi opsi pembuatan kontainer untuk modul IoT Edge.
Jika Anda menggunakan Azure Container Registry untuk menyimpan gambar modul, tambahkan kredensial Anda ke bagian modulesContent > edgeAgent > settings > registryCredentials 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 > Terminal Baru.
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, yang mencapai akhir dukungan pada Mei 2024. Perbarui proyek ke target .NET 8.0 (LTS, didukung hingga November 2026) dengan mengedit file filtermodule.csproj dan mengubah nilai TargetFramework dan PackageReference. 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 autentikasi registri kontainer produksi, gunakan perwakilan layanan atau token yang dicakup repositori alih-alih kredensial admin. Untuk informasi selengkapnya, lihat Mengelola akses ke registri kontainer Anda dan referensi masuk docker .Masuk ke Azure Container Registry. Anda harus install Azure CLI untuk menggunakan perintah
az. 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 image 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 Visual Studio Code explorer, klik kanan file deployment.template.json dan pilih Build dan Push IoT Edge Solution.
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, menjalankan docker build untuk membangun citra 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 dengan placeholder 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 Anda tidak menaikkan versi modul sebelum mengompilasi dan mengunggah, maka Anda menimpa repositori di registri kontainer.
Simpan perubahan Anda ke file module.json .
Buat dan unggah gambar versi 0.0.2 yang telah diperbarui. 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 Build dan Push IoT Edge Solution lagi.
Buka kembali file deployment.amd64.json. Perhatikan bahwa sistem build tidak membuat file baru saat Anda menjalankan perintah build dan push lagi. Sebaliknya, file yang sama diperbarui 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 Azure dan navigasikan ke registri kontainer Anda. Di registri kontainer Anda, pilih Repositori lalu filtermodule. Verifikasi bahwa kedua versi gambar berhasil didorong ke registri.
Pecahkan masalah
Jika Anda mengalami kesalahan saat membangun dan mengunggah gambar modul Anda, ini sering kali disebabkan oleh 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? Kredensial 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 IoT Edge Linux, jadi Visual Studio Code harus mengatakan amd64 atau arm32v7 di bilah samping, 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 IoT Edge Anda aktif dan berjalan.
Gunakan perintah CLI set-modules IoT Edge Azure 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 my-device, gunakan perintah berikut. Ganti hub-name, device-id, dan login IoT Hub connection string dengan nilai 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 IoT Hub connection string Anda, termasuk kunci akses bersama, di portal Azure. Buka IoT Hub Anda, dan pilih Pengaturan keamanan, Kebijakan akses bersama, iothubowner.
Di penjelajah Visual Studio Code, di bawah bagian Azure IoT Hub, perluas Devices untuk melihat daftar perangkat IoT Anda.
Klik kanan perangkat IoT Edge yang ingin Anda sebarkan, lalu pilih Buat Penyebaran untuk Perangkat Tunggal.
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.
Di bawah perangkat Anda, perluas Modul untuk melihat daftar modul yang disebarkan dan berjalan. Pilih tombol refresh. Anda seharusnya 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, menarik gambar 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 Pemantauan 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 mesin pengembangan Anda. Jika Anda menggunakan komputer virtual untuk perangkat IoT Edge Anda, sambungkan sekarang. Di Azure, buka halaman gambaran umum komputer virtual dan pilih Koneksi 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 terus menggunakan perangkat IoT Edge yang sama dengan perangkat pengujian. Jika tidak, untuk menghindari biaya, hapus konfigurasi lokal dan sumber daya Azure yang Anda gunakan dalam artikel ini.
Menghapus sumber daya Azure
Anda tidak dapat membatalkan penghapusan Azure sumber daya dan grup sumber daya. 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 Resource.
- Pilih nama grup sumber daya yang berisi sumber daya pengujian IoT Edge Anda.
- Tinjau daftar sumber daya yang dimuat grup sumber daya Anda. Jika Anda ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika Anda hanya ingin menghapus beberapa sumber daya, pilih setiap sumber daya untuk menghapusnya satu per satu.
Langkah berikutnya
Dalam tutorial ini, Anda menyiapkan Visual Studio Code pada 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.
modul Azure IoT Edge DebugFunctionsStream AnalyticsCustom Vision Service