Menggunakan Visual Studio 2022 untuk mengembangkan dan men-debug modul untuk Azure IoT Edge

Berlaku untuk:IoT Edge 1.4 checkmark IoT Edge 1.4

Penting

IoT Edge 1.4 adalah rilis yang didukung Jika Anda menggunakan rilis sebelumnya, lihat Memperbarui IoT Edge.

Artikel ini memperlihatkan kepada Anda cara menggunakan Visual Studio 2022 untuk mengembangkan, men-debug, dan menyebarkan modul Azure IoT Edge kustom. Visual Studio 2022 menyediakan templat untuk modul IoT Edge yang ditulis dalam C dan C#. Arsitektur perangkat yang didukung adalah Windows x64, Linux x64, ARM32, dan ARM64 (pratinjau). Untuk informasi selengkapnya tentang sistem operasi, bahasa, dan arsitektur yang didukung, lihat Dukungan bahasa dan arsitektur.

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

  • Antarmuka baris perintah (CLI) adalah alat pilihan untuk pengembangan.
  • Alat Azure IoT Edge untuk ekstensi Visual Studio . Ekstensi dalam mode pemeliharaan.

Gunakan tombol pemilih alat di awal untuk memilih opsi alat Anda untuk artikel ini. Kedua alat memberikan manfaat berikut:

  • Buat, edit, bangun, jalankan, dan debug solusi dan modul IoT Edge di komputer pengembangan lokal Anda.
  • Kode modul Azure IoT Anda di C atau C# dengan manfaat pengembangan Visual Studio.
  • Menyebarkan solusi IoT Edge Anda ke perangkat IoT Edge melalui Azure IoT Hub.

Prasyarat

Artikel ini mengasumsikan bahwa Anda menggunakan mesin yang menjalankan Windows sebagai mesin pengembangan Anda.

  • Instal atau ubah Visual Studio 2022 di komputer pengembangan Anda. Pilih pengembangan Azure dan Pengembangan desktop dengan opsi beban kerja C++.

  • Unduh dan instal Azure IoT Edge Tools dari Visual Studio Marketplace. Anda dapat menggunakan ekstensi Azure IoT Edge Tools untuk membuat dan membangun solusi IoT Edge Anda. Alat pengembangan yang disukai adalah command-line (CLI) Azure IoT Edge Dev Tool. Ekstensi ini mencakup templat proyek Azure IoT Edge yang digunakan untuk membuat proyek Visual Studio. Saat ini, Anda memerlukan ekstensi yang diinstal terlepas dari alat pengembangan yang Anda gunakan.

    Penting

    Ekstensi Azure IoT Edge Tools untuk VS 2022 berada dalam mode pemeliharaan. Alat pengembangan yang disukai adalah command-line (CLI) Azure IoT Edge Dev Tool.

    Tip

    Jika Anda menggunakan Visual Studio 2019, unduh dan instal Azure IoT Edge Tools untuk VS 2019 dari marketplace Visual Studio.

  • Menginstal manajer pustaka Vcpkg

    git clone https://github.com/Microsoft/vcpkg
    cd vcpkg
    bootstrap-vcpkg.bat
    

    Menginstal paket azure-iot-sdk-c untuk Windows

    vcpkg.exe install azure-iot-sdk-c:x64-windows
    vcpkg.exe --triplet x64-windows integrate install
    
  • Unduh dan instal sistem manajemen kontainer yang kompatibel dengan Docker di komputer pengembangan Anda untuk membangun dan menjalankan gambar modul Anda. Misalnya, instal Docker Community Edition.

  • Untuk mengembangkan modul dengan kontainer Linux, gunakan komputer Windows yang memenuhi persyaratan untuk Dekstop Docker.

  • Buat Azure Container Registry atau Docker Hub untuk menyimpan gambar modul Anda.

    Tip

    Anda dapat menggunakan registri Docker lokal untuk tujuan prototipe dan pengujian alih-alih registri cloud.

  • Instal Azure CLI.

  • Untuk menguji modul di perangkat, Anda memerlukan IoT Hub aktif dengan setidaknya satu perangkat IoT Edge. Untuk membuat perangkat IoT Edge untuk pengujian, Anda dapat membuatnya di portal Azure atau dengan CLI:

    • Membuatnya di portal Azure adalah yang tercepat. Dari portal Azure, buka sumber daya IoT Hub Anda. Pilih Perangkat di bawah menu Manajemen perangkat lalu pilih Tambahkan Perangkat.

      Di Buat perangkat, beri nama perangkat Anda menggunakan ID Perangkat, periksa Perangkat IoT Edge, lalu pilih Simpan di kiri bawah.

      Terakhir, konfirmasikan bahwa perangkat baru Anda ada di IoT Hub Anda, dari menu Perangkat Manajemen > perangkat. Untuk informasi selengkapnya tentang membuat perangkat IoT Edge melalui portal Azure, baca Membuat dan memprovisikan perangkat IoT Edge di Linux menggunakan kunci konten.

    • Untuk membuat perangkat IoT Edge dengan CLI, ikuti langkah-langkah dalam mulai cepat untuk Linux atau Windows. Dalam proses mendaftarkan perangkat IoT Edge, Anda membuat perangkat IoT Edge.

    Jika Menjalankan daemon IoT Edge di komputer pengembangan, Anda mungkin perlu menghentikan EdgeHub dan EdgeAgent sebelum memulai pengembangan di Visual Studio.

Buat perangkat Azure IoT Edge

Templat proyek IoT Edge di Visual Studio membuat solusi untuk disebarkan ke perangkat IoT Edge. Pertama, Anda membuat solusi Azure IoT Edge. Kemudian, Anda membuat modul dalam solusi tersebut. Setiap solusi IoT Edge dapat berisi lebih dari satu modul.

Dalam solusi kami, kami akan membangun tiga proyek. Modul utama yang berisi EdgeAgent dan EdgeHub, selain modul sensor suhu. Selanjutnya, Anda menambahkan dua modul IoT Edge lagi.

Penting

Struktur proyek IoT Edge yang dibuat oleh Visual Studio tidak sama dengan yang ada di Visual Studio Code.

Saat ini, Azure IoT Edge Dev Tool CLI tidak mendukung pembuatan jenis proyek Visual Studio. Anda perlu menggunakan ekstensi Visual Studio IoT Edge untuk membuat proyek Visual Studio.

  1. Di Visual Studio, buat proyek baru.

  2. Di Buat proyek baru, cari Azure IoT Edge. Pilih proyek yang cocok dengan platform dan arsitektur untuk perangkat IoT Edge Anda, dan pilih Berikutnya.

    Create New Project

  3. Di Konfigurasikan proyek baru Anda, masukkan nama untuk proyek Anda, tentukan lokasi, dan pilih Buat.

  4. Di Tambahkan Modul, pilih jenis modul yang ingin Anda kembangkan. Jika Anda memiliki modul yang sudah ada yang ingin Anda tambahkan ke penyebaran, pilih Modul yang sudah ada.

  5. Di Nama Modul, masukkan nama untuk modul Anda. Pilih nama yang unik dalam registri kontainer Anda.

  6. Di Url Repositori, berikan nama repositori gambar modul. Visual Studio 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.

  7. Pilih Tambahkan untuk menambahkan modul Anda ke proyek.

    Screenshot of how to add Application and Module.

    Catatan

    Jika Anda memiliki proyek IoT Edge yang sudah ada, Anda dapat mengubah URL repositori dengan membuka file module.json . URL repositori terletak di properti repositori file JSON.

Sekarang, Anda memiliki proyek IoT Edge dan modul IoT Edge di solusi Visual Studio Anda.

Struktur proyek

Dalam solusi Anda, ada dua folder tingkat proyek termasuk folder proyek utama dan satu folder modul. Misalnya, Anda mungkin memiliki folder proyek utama bernama AzureIotEdgeApp1 dan folder modul bernama IotEdgeModule1. Folder proyek utama berisi manifes penyebaran Anda.

Folder proyek modul berisi file untuk kode modul Anda bernama atau Program.csmain.c tergantung pada bahasa yang Anda pilih. Folder ini juga berisi file bernama module.json yang menjelaskan metadata modul Anda. Berbagai file Docker yang disertakan di sini menyediakan informasi yang diperlukan untuk membangun modul Anda sebagai kontainer Windows atau Linux.

Manifes penyebaran proyek Anda

Manifes penyebaran yang Anda edit diberi nama deployment.debug.template.json. File ini adalah templat manifes penyebaran IoT Edge yang menentukan semua modul yang berjalan pada perangkat bersama dengan cara mereka berkomunikasi satu sama lain. Untuk informasi selengkapnya tentang manifes penyebaran, lihat Pelajari cara menyebarkan modul dan menetapkan rute.

Jika Anda membuka templat penyebaran ini, Anda akan melihat bahwa dua modul runtime, edgeAgent dan edgeHub disertakan, bersama dengan modul kustom yang Anda buat dalam proyek Visual Studio ini. Modul keempat bernama SimulatedTemperatureSensor juga disertakan. Modul default ini menghasilkan data simulasi yang dapat Anda gunakan untuk menguji modul Anda, atau menghapusnya jika tidak diperlukan. Untuk melihat cara kerja sensor suhu yang disimulasikan, lihat kode sumber SimulatedTemperatureSensor.csproj.

Menetapkan versi {i>runtime

Saat ini, versi runtime stabil terbaru adalah 1.4. Anda harus memperbarui versi runtime IoT Edge ke rilis stabil terbaru atau versi yang ingin Anda targetkan untuk perangkat Anda.

  1. Di Penjelajah Solusi, klik kanan nama proyek utama Anda dan pilih Atur versi runtime IoT Edge.

    Screenshot of how to find and select the menu item named 'Set IoT Edge Runtime version'.

  2. Gunakan menu drop-down untuk memilih versi runtime yang dijalankan perangkat IoT Edge Anda, lalu pilih OK untuk menyimpan perubahan Anda. Jika tidak ada perubahan yang dilakukan, pilih Batal untuk keluar.

    Saat ini, ekstensi tidak menyertakan pilihan untuk versi runtime terbaru. Jika Anda ingin mengatur versi runtime yang lebih tinggi dari 1.2, buka file manifes penyebaran deployment.debug.template.json . Ubah versi runtime untuk gambar modul runtime sistem edgeAgent dan edgeHub. Misalnya, jika Anda ingin menggunakan runtime IoT Edge versi 1.4, ubah baris berikut dalam file manifes penyebaran:

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.4"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
       //...
    
  3. Jika Anda mengubah versi, regenerasi manifes penyebaran Anda dengan mengklik kanan nama proyek Anda dan pilih Buat penyebaran untuk IoT Edge. Ini menghasilkan manifes penyebaran berdasarkan templat penyebaran Anda dan muncul di folder konfigurasi proyek Visual Studio Anda.

  1. Buka file manifes penyebaran deployment.debug.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.4, ubah baris berikut dalam file manifes penyebaran:

    "systemModules": {
        "edgeAgent": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-agent:1.4",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
        //...
    

Opsi infrastruktur & pengembangan modul

Saat Anda menambahkan modul baru, modul ini dilengkapi dengan kode default yang siap dibuat dan disebarkan ke perangkat sehingga Anda dapat memulai pengujian tanpa menyentuh kode apa pun. Kode modul terletak di dalam folder modul dalam file bernama Program.cs (untuk C#) atau main.c (untuk C).

Solusi default dibuat sehingga data simulasi dari modul SimulatedTemperatureSensor dirutekan ke modul Anda, yang mengambil input dan mengirimkannya ke IoT Hub.

Ketika Anda siap untuk menyesuaikan templat modul dengan kode Anda sendiri, gunakan Azure IoT Hub SDKs untuk membangun modul yang menangani kebutuhan utama untuk solusi IoT seperti keamanan, manajemen perangkat, dan keandalan.

Debug menggunakan simulator

Azure IoT EdgeHub Dev Tool memberikan pengalaman pengembangan dan debug lokal. Alat ini membantu memulai modul IoT Edge tanpa runtime IoT Edge sehingga Anda dapat membuat, mengembangkan, menguji, menjalankan, dan men-debug modul dan solusi IoT Edge secara lokal. Anda tidak perlu mendorong gambar ke registri kontainer dan menyebarkannya ke perangkat untuk pengujian.

Untuk informasi selengkapnya, lihat Alat Pengembang Azure IoT EdgeHub.

Untuk menginisialisasi alat di Visual Studio:

  1. Ambil string koneksi perangkat IoT Edge Anda (ditemukan di IoT Hub Anda) dari portal Azure atau dari Azure CLI.

    Jika menggunakan CLI untuk mengambil string koneksi Anda, gunakan perintah ini, ganti "[device_id]" dan "[hub_name]" dengan nilai Anda sendiri:

    az iot hub device-identity connection-string show --device-id [device_id] --hub-name [hub_name]
    
  2. Dari menu Alat di Visual Studio, pilih Azure IoT Edge Tools>Setup IoT Edge Simulator.

  3. Tempelkan string koneksi dan pilih OK.

Catatan

Anda hanya perlu mengikuti langkah-langkah ini sekali di komputer pengembangan Anda karena hasilnya secara otomatis diterapkan ke semua solusi Azure IoT Edge berikutnya. Prosedur ini dapat diikuti lagi jika Anda perlu mengubah ke string koneksi yang berbeda.

Membangun dan men-debug satu modul

Biasanya, Anda ingin menguji dan men-debug setiap modul sebelum menjalankannya dalam seluruh solusi dengan beberapa modul. Alat simulator IoT Edge memungkinkan Anda menjalankan satu modul dalam isolasi mengirim pesan melalui port 53000.

  1. Di Penjelajah Solusi, pilih dan sorot folder proyek modul (misalnya, IotEdgeModule1). Atur modul kustom sebagai proyek startup. Pilih Project>Set sebagai StartUp Project dari menu.

  2. Tekan F5 atau pilih tombol toolbar jalankan untuk memulai simulator IoT Edge untuk satu modul. Mungkin perlu waktu 10 hingga 20 detik pada awalnya.

    Screenshot of how to run a module.

  3. Anda akan melihat jendela aplikasi konsol .NET Core muncul jika modul telah berhasil diinisialisasi.

  4. Tetapkan titik henti untuk memeriksa modul.

    • Jika mengembangkan di C#, atur titik henti dalam PipeMessage() fungsi di ModuleBackgroundService.cs.
    • Jika menggunakan C, setel titik henti dalam fungsi InputQueue1Callback() di main.c.
  5. Uji modul dengan mengirim pesan. Saat Anda men-debug satu modul, simulator mendengarkan port default 53000 untuk pesan. Untuk mengirim pesan ke modul Anda, jalankan perintah curl berikut dari shell perintah seperti Git Bash atau WSL Bash.

    curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messages
    

    Jika Anda mendapatkan kesalahan close brace/bracket yang tidak cocok di URL, coba perintah berikut sebagai gantinya:

    curl --header "Content-Type: application/json" --request POST --data "{\"inputName\": \"input1\", \"data\", \"hello world\"}"  http://localhost:53000/api/v1/messages
    

    Screenshot of the output console, Visual Studio project, and Bash window.

    Titik henti harus dipicu. Anda dapat menonton variabel di jendela Visual Studio Locals , yang ditemukan saat debugger berjalan. Buka Debug>Windows>Locals.

    Di Bash atau shell Anda, Anda akan melihat {"message":"accepted"} konfirmasi.

    Di konsol .NET, Anda akan melihat:

    IoT Hub module client initialized.
    Received message: 1, Body: [hello world]
    

    Tip

    Anda juga dapat menggunakan PostMan atau alat API lainnya untuk mengirim pesan, bukan curl.

  6. Tekan Ctrl + F5 atau plih tombol stop untuk menghentikan penelusuran kesalahan.

Membangun dan men-debug beberapa modul

Setelah selesai mengembangkan satu modul, Anda mungkin ingin menjalankan dan melakukan debug seluruh solusi dengan beberapa modul. Alat simulator IoT Edge memungkinkan Anda menjalankan semua modul yang ditentukan dalam manifes penyebaran termasuk edgeHub simulasi untuk perutean pesan. Dalam contoh ini, Anda menjalankan dua modul kustom dan modul sensor suhu yang disimulasikan. Pesan dari modul sensor suhu yang disimulasikan dirutekan ke setiap modul kustom.

  1. Di Penjelajah Solusi, tambahkan modul kedua ke solusi dengan mengklik kanan folder proyek utama. Pada menu, pilih Tambahkan>Modul IoT Edge Baru.

    Screenshot of how to add a 'New IoT Edge Module' from the menu.

  2. Di jendela Add module beri nama modul baru Anda dan ganti localhost:5000 bagian URL repositori dengan server masuk Azure Container Registry Anda, seperti yang Anda lakukan sebelumnya.

  3. Buka file deployment.debug.template.json untuk melihat bahwa modul baru telah ditambahkan di bagian modul . Rute baru juga ditambahkan ke bagian rute di EdgeHub untuk mengirim pesan dari modul baru ke IoT Hub. Untuk mengirim data dari sensor suhu yang disimulasikan ke modul baru, tambahkan rute lain dengan baris berikut .JSON Ganti <NewModuleName> (di dua tempat) dengan nama modul Anda sendiri.

    "sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"
    
  4. Klik kanan proyek utama (misalnya, AzureIotEdgeApp1) dan pilih Atur sebagai Proyek StartUp. Dengan mengatur proyek utama sebagai proyek startup, semua modul dalam solusi berjalan. Ini termasuk kedua modul yang Anda tambahkan ke solusi, modul sensor suhu yang disimulasikan, dan hub Edge yang disimulasikan.

  5. Tekan F5 atau pilih tombol jalankan toolbar untuk menjalankan solusi. Mungkin perlu waktu 10 hingga 20 detik pada awalnya. Pastikan Anda tidak memiliki kontainer Docker lain yang berjalan yang mungkin mengikat port yang Anda butuhkan untuk proyek ini.

  6. Anda akan melihat dua jendela aplikasi konsol .NET Core muncul satu untuk setiap modul.

  7. Atur titik henti untuk memeriksa modul.

    • Jika mengembangkan di C#, atur titik henti dalam PipeMessage() fungsi di ModuleBackgroundService.cs.
    • Jika menggunakan C, setel titik henti dalam fungsi InputQueue1Callback() di main.c.
  8. Buat titik henti di setiap modul lalu tekan F5 untuk menjalankan dan men-debug beberapa modul secara bersamaan. Anda akan melihat beberapa jendela aplikasi konsol .NET Core, dengan setiap jendela mewakili modul yang berbeda.

    Screenshot of Visual Studio with two output consoles.

  9. Tekan Ctrl + F5 atau plih tombol stop untuk menghentikan penelusuran kesalahan.

Membangun dan mendorong gambar ke registri

Setelah mengembangkan dan men-debug modul, Anda dapat membuat dan mendorong gambar modul ke Azure Container Registry Anda. Anda kemudian dapat menyebarkan modul ke perangkat IoT Edge Anda.

  1. Atur proyek IoT Edge utama sebagai proyek start-up, bukan salah satu modul individual.

  2. Pilih Debug atau Rilis sebagai konfigurasi yang akan dibangun untuk gambar modul Anda.

    Catatan

    Saat memilih Debug, Visual Studio menggunakan Dockerfile.(amd64|windows-amd64).debug untuk membuat gambar Docker. Ini termasuk debugger baris perintah .NET Core VSDBG dalam gambar kontainer Anda saat membangunnya. Untuk modul IoT Edge siap produksi, kami sarankan Anda menggunakan konfigurasi Rilis, yang menggunakan Dockerfile.(amd64|windows-amd64) tanpa VSDBG.

  3. Jika Anda menggunakan registri pribadi seperti Azure Container Registry (ACR), gunakan perintah Docker berikut untuk masuk ke dalamnya. Anda bisa mendapatkan nama pengguna dan kata sandi dari halaman Kunci akses registri Anda di portal Azure.

    docker login <ACR login server>
    
  4. Mari kita tambahkan informasi masuk Azure Container Registry ke pengaturan runtime yang ditemukan dalam file deployment.debug.template.json. Ada dua cara untuk melakukannya. Anda dapat menambahkan kredensial registri ke file Anda .env (paling aman) atau menambahkannya langsung ke file Anda deployment.debug.template.json .

    Tambahkan kredensial ke file Anda .env :

    Di Penjelajah Solusi, pilih tombol toolbar Perlihatkan Semua File. File .env muncul. Tambahkan nama pengguna dan kata sandi Azure Container Registry Anda ke file Anda .env . Kredensial ini dapat ditemukan di halaman Kunci Akses Azure Container Registry Anda di portal Azure.

    Screenshot of button that shows all files in the Solution Explorer.

        DEFAULT_RT_IMAGE=1.2
        CONTAINER_REGISTRY_USERNAME_myregistry=<my-registry-name>
        CONTAINER_REGISTRY_PASSWORD_myregistry=<my-registry-password>
    

    Menambahkan kredensial langsung ke deployment.debug.template.json

    Jika Anda lebih suka menambahkan kredensial langsung ke templat penyebaran, ganti tempat penampung dengan nama pengguna, kata sandi, dan nama registri admin ACR Anda.

          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "registry1": {
                "username": "<username>",
                "password": "<password>",
                "address": "<registry name>.azurecr.io"
              }
            }
          }
    

    Catatan

    Artikel ini menggunakan kredensial login admin untuk Azure Container Registry, yang sesuai untuk skenario pengembangan dan pengujian. Saat Anda siap untuk skenario produksi, kami merekomendasikan opsi autentikasi dengan hak paling rendah seperti perwakilan layanan. Untuk informasi selengkapnya, lihat Kelola akses ke registri kontainer Anda.

  5. Jika Anda menggunakan registri lokal, Anda dapat menjalankan registri lokal.

  6. Terakhir, di Penjelajah Solusi, klik kanan folder proyek utama dan pilih Bangun dan Dorong Modul IoT Edge untuk membangun dan mendorong gambar Docker untuk setiap modul. Ini mungkin memakan waktu satu menit. Saat Anda melihat Finished Build and Push IoT Edge Modules. di konsol Output Visual Studio, Anda selesai.

Menyebarkan solusi

Setelah membuat dan mendorong gambar modul ke Azure Container Registry, Anda dapat menyebarkan solusi ke perangkat IoT Edge Anda. Anda sudah memiliki templat manifes penyebaran yang telah Anda amati sepanjang tutorial ini. Mari kita buat manifes penyebaran dari itu, lalu gunakan perintah Azure CLI untuk menyebarkan modul Anda ke perangkat IoT Edge Anda di Azure.

  1. Klik kanan pada proyek utama Anda di Visual Studio Penjelajah Solusi dan pilih Buat Penyebaran untuk IoT Edge.

    Screenshot of location of the 'generate deployment' menu item.

  2. Buka folder proyek utama Visual Studio lokal Anda dan lihat di config folder . Jalur file mungkin terlihat seperti ini: C:\Users\<YOUR-USER-NAME>\source\repos\<YOUR-IOT-EDGE-PROJECT-NAME>\config. Di sini Anda menemukan manifes penyebaran yang dihasilkan seperti deployment.amd64.debug.json.

  3. Periksa file Anda deployment.amd64.debug.json untuk mengonfirmasi edgeHub versi skema diatur ke 1.2.

     "$edgeHub": {
         "properties.desired": {
           "schemaVersion": "1.2",
           "routes": {
             "IotEdgeModule2022ToIoTHub": "FROM /messages/modules/IotEdgeModule2022/outputs/* INTO $upstream",
             "sensorToIotEdgeModule2022": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/IotEdgeModule2022/inputs/input1\")",
             "IotEdgeModule2022bToIoTHub": "FROM /messages/modules/IotEdgeModule2022b/outputs/* INTO $upstream"
           },
           "storeAndForwardConfiguration": {
             "timeToLiveSecs": 7200
           }
         }
       }
    

    Tip

    Templat penyebaran untuk Visual Studio 2022 memerlukan versi skema 1.2. Jika Anda membutuhkannya menjadi 1.1 atau 1.0, tunggu hingga setelah penyebaran dihasilkan (jangan ubah di deployment.debug.template.json). Membuat penyebaran akan membuat skema 1.2 secara default. Namun, Anda dapat mengubah deployment.amd64.debug.jsonsecara manual , manifes yang dihasilkan, jika diperlukan sebelum menyebarkannya ke Azure.

    Penting

    Setelah perangkat IoT Edge Anda disebarkan, perangkat saat ini tidak akan ditampilkan dengan benar di portal Azure dengan skema versi 1.2 (versi 1.1 akan baik-baik saja). Ini adalah bug yang diketahui dan akan segera diperbaiki. Namun, ini tidak akan memengaruhi perangkat Anda, karena masih terhubung di IoT Hub dan dapat dikomunikasikan kapan saja menggunakan Azure CLI.

    Screenshot of Azure portal error on the IoT Edge device page.

  4. Sekarang mari kita sebarkan manifes kita dengan perintah Azure CLI. Buka Perintah Pengembang Visual Studio dan ubah ke direktori konfigurasi.

        cd config
    
  5. Sebarkan manifes untuk perangkat IoT Edge Anda ke IoT Hub. Perintah mengonfigurasi perangkat untuk menggunakan modul yang dikembangkan dalam solusi Anda. Manifes penyebaran dibuat pada langkah sebelumnya dan disimpan di folder konfigurasi . Dari folder konfigurasi Anda, jalankan perintah penyebaran berikut. [device id]Ganti , [hub name], dan [file path] dengan nilai Anda. Jika ID perangkat IoT Edge tidak ada di IoT Hub, ID tersebut harus dibuat.

        az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [file path]
    

    Misalnya, perintah Anda mungkin terlihat seperti ini:

    az iot edge set-modules --device-id my-device-name --hub-name my-iot-hub-name --content deployment.amd64.debug.json
    
  6. Setelah menjalankan perintah, Anda akan melihat konfirmasi penyebaran yang dicetak di JSON prompt perintah Anda.

Gambar Docker modul build

Setelah mengembangkan modul, Anda dapat membuat gambar modul untuk disimpan dalam registri kontainer untuk penyebaran ke perangkat IoT Edge Anda.

Gunakan Dockerfile modul untuk membangun gambar Docker modul.

docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 

Misalnya, mari kita asumsikan shell perintah Anda ada di direktori proyek Anda dan nama modul Anda adalah IotEdgeModule1. Untuk membangun gambar untuk registri lokal atau registri kontainer Azure, gunakan perintah berikut:

# Build the image for the local registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

# Or build the image for an Azure Container Registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

Mendorong gambar Docker modul

Dorong gambar modul Anda ke registri lokal atau registri kontainer.

docker push <ImageName>

Misalnya:

# Push the Docker image to the local registry

docker push localhost:5000/iotedgemodule1:0.0.1-amd64

# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64

Sebarkan modul ke perangkat IoT Edge.

Di Visual Studio, buka file manifes penyebaran deployment.debug.template.json di proyek utama. Manifes penyebaran adalah dokumen JSON yang menjelaskan modul yang akan dikonfigurasi pada perangkat IoT Edge yang ditargetkan. Sebelum penyebaran, Anda perlu memperbarui kredensial Azure Container Registry, gambar modul, dan nilai yang tepat createOptions . Untuk informasi selengkapnya tentang nilai createOption, lihat Cara mengonfigurasi opsi pembuatan kontainer untuk modul IoT Edge.

  1. Jika Anda menggunakan Azure Container Registry untuk menyimpan gambar modul, Anda perlu menambahkan kredensial Anda ke deployment.debug.template.json di pengaturan edgeAgent . Contohnya,

    "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "myacr": {
                "username": "myacr",
                "password": "<your_acr_password>",
                "address": "myacr.azurecr.io"
              }
            }
          }
        },
    //...
    
  2. Ganti nilai properti gambar dengan nama gambar modul yang Anda dorong ke registri. Misalnya, jika Anda mendorong gambar yang ditandai myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 untuk modul kustom IotEdgeModule1, ganti nilai properti gambar dengan nilai tag.

  3. Tambahkan atau ganti nilai createOptions dengan konten yang di string untuk setiap sistem dan modul kustom dalam templat penyebaran.

    Misalnya, gambar IotEdgeModule1 dan pengaturan createOptions akan mirip dengan yang berikut ini:

    "IotEdgeModule1": {
    "version": "1.0.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    

Gunakan perintah set-modul IoT Edge Azure CLI untuk menyebarkan modul ke Azure IoT Hub. Misalnya, untuk menyebarkan modul yang ditentukan dalam file deployment.debug.amd64.json ke IoT Hub my-iot-hub untuk perangkat IoT Edge perangkat saya, gunakan perintah berikut:

az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"

Tip

Anda dapat menemukan string koneksi IoT Hub Anda di portal Azure di bawah pengaturan>Keamanan Azure IoT Hub >Kebijakan akses bersama.

Mengonfirmasi penyebaran ke perangkat Anda

Untuk memeriksa apakah modul IoT Edge Anda disebarkan ke Azure, masuk ke perangkat Anda (atau komputer virtual), misalnya melalui SSH atau Azure Bastion, dan jalankan perintah daftar IoT Edge.

   iotedge list

Anda akan melihat daftar modul yang berjalan di perangkat atau komputer virtual Anda.

   NAME                        STATUS           DESCRIPTION      CONFIG
   SimulatedTemperatureSensor  running          Up a minute      mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
   edgeAgent                   running          Up a minute      mcr.microsoft.com/azureiotedge-agent:1.2
   edgeHub                     running          Up a minute      mcr.microsoft.com/azureiotedge-hub:1.2
   IotEdgeModule1              running          Up a minute      myacr.azurecr.io/iotedgemodule1:0.0.1-amd64.debug
   myIotEdgeModule2            running          Up a minute      myacr.azurecr.io/myiotedgemodule2:0.0.1-amd64.debug

Debug menggunakan Docker Remote SSH

Mesin Docker dan Moby mendukung koneksi SSH ke kontainer yang memungkinkan Anda melampirkan dan men-debug kode pada perangkat jarak jauh menggunakan Visual Studio.

  1. Koneksi dari jarak jauh ke Docker memerlukan hak istimewa tingkat akar. Ikuti langkah-langkah dalam Mengelola docker sebagai pengguna non-root untuk mengizinkan koneksi ke daemon Docker di perangkat jarak jauh. Setelah selesai men-debug, Anda mungkin ingin menghapus pengguna dari grup Docker.

  2. Ikuti langkah-langkah untuk menggunakan Visual Studio untuk Melampirkan ke proses yang berjalan pada kontainer Docker di perangkat jarak jauh Anda.

  3. Di Visual Studio, atur titik henti di modul kustom Anda.

  4. Saat titik henti tertembak, Anda dapat memeriksa variabel, menelusuri kode, dan men-debug modul Anda.

    Screenshot of Visual Studio attached to remote docker container on a device paused on a breakpoint.

Langkah berikutnya