Tutorial: Mengembangkan modul IoT Edge menggunakan Visual Studio Code

Berlaku untuk:Tanda centang IoT Edge 1.5 IoT Edge 1.5 Tanda centang IoT Edge 1.4 IoT Edge 1.4

Penting

IoT Edge 1.5 LTS dan IoT Edge 1.4 LTS adalah rilis yang didukung. IoT Edge 1.4 LTS adalah akhir masa pakai pada 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Memperbarui IoT Edge.

Tutorial ini menjelaskan pengembangan dan penyebaran kode Anda sendiri ke perangkat Azure IoT Edge. Anda dapat menggunakan modul Azure IoT Edge untuk menyebarkan kode yang menerapkan logika bisnis langsung ke perangkat IoT Edge. Dalam mulai cepat Menyebarkan kode ke perangkat Linux, Anda membuat perangkat IoT Edge dan menyebarkan modul dari Marketplace Azure.

Artikel ini mencakup langkah-langkah untuk dua alat pengembangan IoT Edge.

  • Baris perintah (CLI) Azure IoT Edge Dev Tool . Alat ini lebih disukai untuk pengembangan.
  • Alat Azure IoT Edge untuk ekstensi Visual Studio Code . Ekstensi dalam mode pemeliharaan.

Gunakan tombol pemilih alat di awal artikel ini untuk memilih versi alat.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Siapkan komputer pengembangan Anda.
  • Gunakan alat IoT Edge untuk membuat proyek baru.
  • Buat proyek Anda sebagai kontainer Docker dan simpan di registri kontainer Azure.
  • Sebarkan kode Anda ke perangkat Azure IoT Edge.

Modul IoT Edge yang Anda buat dalam tutorial ini memfilter data suhu yang dihasilkan perangkat Anda. Modul ini hanya mengirim upstram pesan jika suhu di atas ambang tertentu. Jenis analisis di tepi ini berguna untuk mengurangi jumlah data yang dikirim ke dan disimpan di cloud.

Prasyarat

Komputer pengembangan:

  • Gunakan komputer Anda sendiri atau komputer virtual.
  • Komputer pengembangan Anda harus mendukung virtualisasi berlapis untuk menjalankan mesin kontainer.
  • Sebagian besar sistem operasi yang dapat menjalankan mesin kontainer dapat digunakan untuk mengembangkan modul Azure IoT Edge untuk perangkat Linux. Tutorial ini menggunakan komputer Windows, tetapi menunjukkan perbedaan yang diketahui pada macOS atau Linux.
  • Pasang Visual Studio Code.
  • Instal Azure CLI.

Perangkat Azure IoT Edge:

Sumber daya cloud:

  • IoT Hub gratis atau standar di Azure.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Tip

Untuk panduan tentang penelusuran kesalahan interaktif di Visual Studio Code atau Visual Studio 2022:

Tutorial ini mengajarkan langkah-langkah pengembangan untuk Visual Studio Code.

Konsep kunci

Tutorial ini membahas pengembangan modul Azure 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 hub IoT. Untuk informasi selengkapnya, lihat Memahami modul Azure IoT Edge.

Saat mengembangkan modul IoT Edge, penting untuk memahami perbedaan antara mesin pengembangan dan perangkat IoT Edge target tempat modul disebarkan. Kontainer yang Anda bangun untuk menampung kode modul harus cocok dengan sistem operasi (OS) perangkat target. Misalnya, skenario paling umum adalah seseorang mengembangkan modul di komputer Windows yang bermaksud menargetkan perangkat Linux yang menjalankan Azure IoT Edge. Dalam kasus ini, sistem operasi kontainer adalah Linux. Saat Anda mengikuti tutorial ini, ingatlah perbedaan antara OS komputer pengembangan dan OS kontainer.

Tip

Jika Anda menggunakan Azure IoT Edge untuk Linux di Windows, maka perangkat target dalam skenario Anda adalah komputer virtual Linux, bukan host Windows.

Tutorial ini menargetkan perangkat yang menjalankan Azure IoT Edge dengan kontainer Linux. Anda dapat menggunakan sistem operasi pilihan Anda selama komputer pengembangan menjalankan kontainer Linux. Sebaiknya gunakan Visual Studio Code untuk mengembangkan dengan kontainer Linux, jadi itulah yang digunakan tutorial ini. 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
Pembelajaran Mesin Azure
Bahasa C
C#
Java
Node.js
Python
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. Kami menyarankan Docker Desktop untuk pengembangan karena dukungan fitur dan popularitasnya. 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 dipasang di komputer pengembangan Anda:

Menyiapkan alat

Instal Azure IoT Edge Dev Tool berbasis Python untuk membuat solusi IoT Edge Anda. Ada dua opsi:

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.

  1. Instal ekstensi Azure IoT Edge .

  2. Instal ekstensi Azure IoT Hub .

  3. Setelah Anda menginstal ekstensi, buka palet perintah dengan memilih Tampilkan>Palet Perintah.

  4. Di palet perintah lagi, cari dan pilih Azure IoT Hub: pilih Azure IoT Hub. Ikuti perintah untuk memilih langganan Azure dan IoT Hub Anda.

  5. Buka bagian penjelajah dari Visual Studio Code dengan memilih ikon di bilah aktivitas di sebelah kiri, atau dengan memilih Lihat>Penjelajah.

  6. Di bagian bawah penjelajah, luaskan menu Azure IoT Hub / Perangkat yang diciutkan. Anda akan 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:

  1. Dalam portal Microsoft Azure, pilih Buat sumber daya>Kontainer>Registri Kontainer.

  2. 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 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.
  3. Pilih Tinjau + buat, lalu Buat.

  4. Pilih registri kontainer baru Anda dari bagian Sumber Daya di beranda portal Azure Anda untuk membukanya.

  5. Di panel kiri registri kontainer Anda, pilih Kunci akses dari menu yang terletak di bawah Pengaturan.

    Cuplikan layar lokasi menu Kunci Akses.

  6. Aktifkan pengguna Admin dengan tombol alih dan lihat Nama Pengguna dan Kata Sandi untuk registri kontainer Anda.

  7. 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 memiliki semua file dan kode yang Anda perlukan untuk menyebarkan modul kerja untuk menguji Azure IoT Edge, atau memberi titik awal untuk menyesuaikan templat dengan logika bisnis Anda sendiri.

Buat Template Proyek

IoT Edge Dev Tool menyederhanakan pengembangan Azure IoT Edge ke perintah yang didorong oleh variabel lingkungan. Ini membuat Anda mulai dengan pengembangan IoT Edge dengan Kontainer Dev IoT Edge dan perancah solusi IoT Edge yang memiliki modul default dan semua file konfigurasi yang diperlukan.

  1. Buat direktori untuk solusi Anda dengan jalur pilihan Anda. Ubah ke direktori Anda iotedgesolution .

    mkdir c:\dev\iotedgesolution
    cd c:\dev\iotedgesolution
    
  2. Gunakan perintah init solusi iotedgedev untuk membuat solusi dan menyiapkan Azure IoT Hub Anda dalam bahasa pengembangan pilihan Anda.

    iotedgedev solution init --template csharp
    

Skrip init solusi iotedgedev 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 . Anda mulai dengan membuat solusi, kemudian menghasilkan modul pertama dalam solusi itu. Setiap solusi dapat berisi beberapa modul.

  1. Pilih Lihat>Pallet Perintah.
  2. Di palet perintah, masukkan dan jalankan perintah Azure IoT Edge: Solusi IoT Edge Baru.
  3. Jelajahi folder tempat Anda ingin membuat solusi baru, lalu klik Pilih folder.
  4. Masukkan nama untuk solusi Anda.
  5. Pilih templat modul bahasa pengembangan pilihan Anda untuk menjadi modul pertama dalam solusi.
  6. Masukkan nama untuk modul Anda. Pilih nama yang unik dalam registri kontainer Anda.
  7. Berikan 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 pembuatan solusi, file utama ini berada dalam solusi:

  • Folder .vscode berisi file konfigurasi launch.json.

  • Folder modul yang memiliki subfolder untuk setiap modul. Dalam subfolder untuk setiap modul, 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 bernama 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 yang 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 terinstal 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.

  1. 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.

  2. Ubah versi runtime untuk gambar modul runtime sistem edgeAgent dan edgeHub. 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 info masuk ini untuk menarik gambar kontainer Anda ke perangkat Azure 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 untuk melihat apakah kredensial Anda ada. Jika belum, tambahkan sekarang:

  1. Jika Azure Container Registry adalah registri Anda, atur nama pengguna dan kata sandi Azure Container Registry. Dapatkan nilai-nilai ini dari menu kunci Pengaturan> Access registri kontainer Anda di portal Azure.

  2. Buka file .env di solusi modul Anda.

  3. 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>"
    
  4. 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 terendah seperti perwakilan layanan atau token yang dicakup repositori. Untuk informasi selengkapnya, lihat Kelola akses ke registri kontainer Anda.

Arsitektur target

Anda perlu memilih arsitektur yang Anda targetkan dengan setiap solusi, karena itu memengaruhi cara kontainer dibangun dan dijalankan. Defaultnya adalah Linux AMD64. Untuk tutorial ini, kami menggunakan komputer virtual Ubuntu sebagai perangkat IoT Edge dan menyimpan amd64 default.

Jika Anda perlu mengubah arsitektur target untuk solusi Anda, gunakan langkah-langkah berikut.

  1. Buka palet perintah dan cari Azure IoT Edge: Tetapkan Platform Target Default untuk Solusi Edge, atau pilih ikon pintasan di bilang samping di bagian bawah jendela.

  2. 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 hub IoT. Modul sampel menerima pesan lalu meneruskannya. Fungsionalitas alur menunjukkan konsep penting di Azure IoT Edge, yaitu bagaimana modul berkomunikasi satu sama lain.

Setiap modul dapat memiliki beberapa antrean input dan output yang dideklarasikan dalam kode modul. Hub Azure IoT Edge yang berjalan pada perangkat merutekan pesan dari output satu modul ke input satu atau lebih modul. Kode spesifik untuk mendeklarasikan input dan output bervariasi antar bahasa, tetapi konsepnya sama di semua modul. Untuk informasi selengkapnya tentang perutean antar modul, lihat Mendeklarasikan rute.

Contoh kode C# yang disertakan dengan template project menggunakan Class ModuleClient dari IoT Hub SDK untuk .NET.

  1. Di penjelajah Visual Studio Code, buka modul>filtermodule>ModuleBackgroundService.cs.

  2. Sebelum namespace filtermodule, tambahkan tiga pernyataan penggunaan untuk jenis yang digunakan nanti:

    using System.Collections.Generic;     // For KeyValuePair<>
    using Microsoft.Azure.Devices.Shared; // For TwinCollection
    using Newtonsoft.Json;                // For JsonConvert
    
  3. Tambahkan variabel temperatureThreshold ke kelas ModuleBackgroundService. Variabel ini menetapkan nilai ambang suhu yang diukur untuk data yang akan dikirim ke hub IoT Anda.

    static int temperatureThreshold { get; set; } = 25;
    
  4. Tambahkan kelas MessageBody, Machine, dan Ambient. 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;}
    }
    
  5. Temukan fungsi ExecuteAsync. Fungsi ini membuat dan mengonfigurasi objek ModuleClient yang memungkinkan modul terhubung ke runtime Azure IoT Edge lokal untuk mengirim dan menerima pesan. Setelah membuat ModuleClient, kode membaca nilai temperatureThreshold dari properti yang diinginkan twin modul. Kode tersebut juga mendaftarkan panggilan balik untuk menerima pesan dari hub Azure IoT Edge melalui titik akhir yang bernama input1.

    Ganti panggilan ke metode ProcessMessageAsync dengan yang baru yang memperbarui nama titik akhir dan metode yang dipanggil saat input tiba. Selain itu, tambahkan metode SetDesiredPropertyUpdateCallbackAsync untuk pembaruan ke properti yang diinginkan. Untuk membuat perubahan ini, ganti baristerakhir metode ExecuteAsync 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);
    
  6. Tambahkan metode onDesiredPropertiesUpdate ke kelas ModuleBackgroundService. Metode ini menerima pembaruan terkait properti yang diinginkan dari modul twin, dan memperbarui variabel temperatureThreshold agar sesuai. 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;
    }
    
  7. Tambahkan metode FilterMessages. 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. Metode ini juga menambahkan properti MessageType ke pesan dengan nilai yang diatur ke Pemberitahuan.

    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;
        }
    }
    
  8. Simpan file ModuleBackgroundService.cs.

  9. Di penjelajah Visual Studio Code, buka file deployment.template.json di ruang kerja solusi IoT Edge Anda.

  10. 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 rute di modul kembar $edgeHub. Perbarui rute sensorTofiltermodule untuk diganti input1 dengan inputFromSensor:

    "sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"
    
  11. Tambahkan twin modul filtermodule ke manifes penyebaran. Sisipkan konten JSON berikut di bawah bagian moduleContent, setelah twin modul $edgeHub:

       "filtermodule": {
           "properties.desired":{
               "TemperatureThreshold":25
           }
       }
    
  12. 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 penyebaran, Anda perlu memperbarui kredensial Azure Container Registry dan gambar modul Anda dengan nilai yang tepat createOptions . Untuk informasi selengkapnya tentang nilai createOption, 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 bagian registri pengaturan>edgeAgent>modul>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 string berikut ke nilai createOptions untuk setiap sistem (edgeHub dan edgeAgent) dan modul kustom (filtermodule dan tempSensor) tercantum. Ubah nilai jika perlu.

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"

Misalnya, konfigurasi filtermodule 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 perintah terbitkan dotnet.

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.

  1. 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.

  2. Masuk ke Azure Container Registry. Anda perlu Menginstal Azure CLI untuk menggunakan az perintah . Perintah ini meminta nama pengguna dan kata sandi Anda yang ditemukan di registri kontainer Anda di kunci Pengaturan> Access.

    az acr login -n <ACR registry name>
    

    Tip

    Jika Anda keluar kapan saja dalam tutorial ini, ulangi langkah-langkah masuk Docker dan Azure Container Registry untuk melanjutkan.

  3. 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 adalah 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 saat pertama kali, tetapi menjadi lebih cepat saat Anda menjalankan perintah berikutnya.

Opsional: Memperbarui modul dan gambar

Jika Anda membuat perubahan pada kode modul, Anda perlu 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. Bagian registryCredentials memiliki nama pengguna dan kata sandi registri Anda yang ditarik dari file .env . Filtermodule memiliki repositori gambar lengkap dengan nama, versi, dan tag arsitektur dari file module.json.

  1. Buka file module.json di folder filtermodule.

  2. 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.

    Tip

    Versi modul mengaktifkan kontrol versi, dan memungkinkan Anda menguji perubahan pada sejumlah kecil perangkat sebelum menyebarkan pembaruan ke produksi. Jika tidak menaikkan versi modul sebelum membangun dan mendorong, maka Anda menimpa repositori di registri kontainer.

  3. 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 lagi file deployment.template.json, dan pilih lagi Bangun dan Dorong Solusi Azure IoT Edge.

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.

Cuplikan layar tempat melihat kedua versi gambar di registri kontainer Anda.

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 login menggunakan 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 akan terlihat seperti <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 untuk hub-name, device-id, dan login IoT Hub string koneksi 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>"

Tip

Anda dapat menemukan string koneksi IoT Hub Anda termasuk kunci akses bersama di portal Azure. Buka pengaturan>Keamanan IoT Hub >Anda Kebijakan>akses bersama iothubowner.

  1. Di penjelajah Visual Studio Code, pada bagian Azure IoT Hub, luaskan Perangkat untuk melihat daftar perangkat IoT Anda.

  2. Klik kanan perangkat Azure IoT Edge yang ingin Anda sebarkan, lalu pilih Buat Penyebaran untuk Satu Perangkat.

  3. 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.

  4. 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.

    Mungkin perlu beberapa menit agar modul dimulai. Runtime Azure IoT Edge perlu menerima manifes penyebaran barunya, menarik gambar modul dari runtime kontainer, lalu memulai setiap modul baru.

Melihat pesan dari perangkat

Kode modul sampel menerima pesan melalui antrean inputnya dan meneruskannya melalui antrean outputnya. Manifes penyebaran mendeklarasikan rute yang meneruskan 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 masing-masing perangkat Anda.

  1. Di penjelajah Visual Studio Code, klik kanan perangkat Azure IoT Edge yang ingin Anda pantau, lalu pilih Mulai Memantau Titik Akhir Kejadian Bawaan.

  2. Perhatikan jendela output di Visual Studio Code untuk melihat pesan yang tiba di hub IoT Anda.

    Cuplikan layar memperlihatkan tempat menampilkan perangkat masuk ke pesan cloud.

Melihat perubahan pada perangkat

Jika ingin melihat apa yang terjadi pada perangkat Anda sendiri, gunakan perintah di bagian ini untuk memeriksa runtime Azure IoT Edge dan modul yang berjalan di perangkat Anda.

Perintah di bagian ini adalah untuk perangkat Azure IoT Edge Anda, bukan komputer pengembangan. 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 list
    

    Anda akan melihat empat modul: dua modul runtime IoT Edge, tempSensor, dan filtermodule. Anda akan melihat keempatnya terdaftar sebagai berjalan.

  • Periksa log untuk modul tertentu:

    iotedge logs <module name>
    

    Modul IoT Edge peka huruf besar/kecil.

    TempSensor dan log filtermodule harus menampilkan pesan yang mereka pemrosesan. Modul edgeAgent bertanggung jawab untuk memulai modul lain, sehingga lognya memiliki informasi tentang menerapkan manifes penyebaran. Jika Anda menemukan modul tidak tercantum atau tidak berjalan, log edgeAgent kemungkinan memiliki kesalahan. Modul edgeHub bertanggung jawab untuk komunikasi antara modul dan Azure IoT Hub. Jika modul aktif dan berjalan, tetapi pesan tidak tiba di hub IoT Anda, log edgeHub kemungkinan memiliki kesalahan.

Membersihkan sumber daya

Jika berencana untuk melanjutkan ke artikel yang disarankan berikutnya, Anda dapat menyimpan sumber daya dan konfigurasi yang Anda buat dan menggunakannya kembali. Anda juga dapat tetap menggunakan perangkat IoT Edge yang sama sebagai perangkat uji.

Jika tidak, Anda dapat menghapus konfigurasi lokal dan sumber daya Azure yang Anda gunakan dalam artikel ini untuk menghindari tagihan.

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 sudah ada yang berisi sumber daya yang ingin Anda simpan, hapus hanya sumber daya hub IoT itu sendiri, bukan grup sumber daya.

Untuk menghapus sumber daya:

  1. Masuk ke portal Azure, lalu pilih Grup sumber daya.

  2. Pilih nama grup sumber daya yang berisi sumber daya pengujian IoT Edge Anda.

  3. Tinjau daftar sumber daya yang terdapat dalam grup sumber daya Anda. Jika ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika hanya ingin menghapus beberapa sumber daya, Anda dapat mengklik 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 yang berisi kode untuk memfilter data mentah yang dihasilkan oleh perangkat IoT Edge Anda.

Anda dapat melanjutkan ke tutorial berikutnya, untuk mempelajari cara Azure IoT Edge dapat membantu Anda menyebarkan layanan cloud Azure untuk memproses dan menganalisis data di tepi.