Bagikan melalui


Tutorial: Mengembangkan modul IoT Edge menggunakan Visual Studio Code

Berlaku untuk:Tanda centang IoT Edge 1.5 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:

Sumber daya cloud:

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:

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:

Menyiapkan alat

Instal Azure IoT Edge Dev Tool berbasis Python untuk membuat solusi IoT Edge Anda. Anda memiliki dua pilihan:

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, cari dan pilih Azure IoT Hub: Pilih IoT Hub. Ikuti perintah untuk memilih langganan Azure dan IoT Hub Anda.
  5. Buka bagian penjelajah Visual Studio Code dengan memilih ikon di bilah aktivitas atau dengan memilih Tampilkan > Penjelajah.
  6. 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:

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

  1. Buat direktori untuk solusi Anda di jalur yang Anda inginkan. Pindah ke direktori iotedgesolution Anda.

    mkdir c:\dev\iotedgesolution
    cd c:\dev\iotedgesolution
    
  2. iotedgedev solution init Gunakan 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.

  1. Pilih Tampilkan > Palet Perintah.
  2. Di palet perintah, masukkan dan jalankan perintah Azure IoT Edge: Solusi IoT Edge Baru.
  3. Telusuri ke folder tempat Anda ingin membuat solusi baru, lalu pilih 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. 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:

    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.

  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 edgeAgent modul runtime sistem 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 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:

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

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

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

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

  2. filtermodule Sebelum namespace, tambahkan tiga using deklarasi 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 yang harus melebihi suhu yang diukur agar data dikirim ke IoT Hub.

    static int temperatureThreshold { get; set; } = 25;
    
  4. MessageBodyTambahkan kelas , 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 ModuleClient objek 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 kembar modul. Kode mendaftarkan panggilan balik untuk menerima pesan dari hub IoT Edge melalui titik akhir yang disebut input1.

    Ganti panggilan metode ProcessMessageAsync dengan metode baru yang memperbarui nama titik akhir dan metode yang dipanggil ketika input tiba. Selain itu, tambahkan SetDesiredPropertyUpdateCallbackAsync metode untuk pembaruan pada properti yang diinginkan. Untuk membuat perubahan ini, ganti baris ExecuteAsync terakhir 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);
    
  6. Tambah metode OnDesiredPropertiesUpdate ke kelas ModuleBackgroundService. Metode ini menerima pembaruan pada properti yang diinginkan dari modul kembar, dan memperbarui variabel agar temperatureThreshold cocok. 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. FilterMessages Tambahkan 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 menambahkan MessageType properti ke pesan dengan nilai yang diatur ke Alert:

    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 routes di modul twin $edgeHub. sensorTofiltermodule Perbarui rute 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 bagian bawah bagian modulesContent , setelah modul kembar $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 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.

  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 harus menginstal Azure CLI untuk menggunakan az perintah . 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.

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

  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.

    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.

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

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

  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.

    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.

  1. Di penjelajah Visual Studio Code, pilih perangkat IoT Edge yang ingin Anda pantau, lalu pilih Mulai Pantau Titik Akhir Peristiwa Bawaan.

  2. Tonton jendela output di Visual Studio Code untuk melihat pesan tiba di IoT Hub Anda.

    Cuplikan layar jendela output Visual Studio Code memperlihatkan pesan perangkat-ke-cloud masuk.

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 list
    

    Anda 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:

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