Bagikan melalui


Debug modul Azure IoT Edge menggunakan Visual Studio Code

Berlaku untuk:IoT Edge 1.5 dengan tanda centang IoT Edge 1.5

Penting

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

Artikel ini menjelaskan cara menggunakan Visual Studio Code untuk men-debug modul IoT Edge dalam beberapa bahasa. Di komputer pengembangan Anda, gunakan Visual Studio Code untuk melampirkan dan men-debug modul Anda dalam kontainer modul lokal atau jarak jauh.

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

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

Pilih versi alat menggunakan tombol pemilih alat di awal artikel ini.

Visual Studio Code mendukung penulisan modul IoT Edge dalam bahasa pemrograman berikut:

  • C# dan C# Azure Functions
  • C
  • Python
  • Node.js
  • Java

Azure IoT Edge bekerja dengan arsitektur perangkat ini:

  • AMD64
  • ARM32v7
  • ARM64

Untuk informasi selengkapnya tentang sistem operasi, bahasa, dan arsitektur yang didukung, lihat Dukungan bahasa dan arsitektur.

Saat menggunakan ekstensi Visual Studio Code IoT Edge, Anda juga dapat meluncurkan dan men-debug kode modul Anda di simulator IoT Edge.

Anda juga dapat menggunakan komputer pengembangan Windows dan modul debug dalam kontainer Linux menggunakan IoT Edge untuk Linux di Windows (EFLOW). Untuk informasi selengkapnya tentang menggunakan EFLOW untuk mengembangkan modul, lihat Tutorial: Mengembangkan modul IoT Edge dengan kontainer Linux menggunakan IoT Edge untuk Linux di Windows.

Jika Anda baru mengenal kemampuan debug di Visual Studio Code, lihat debugging Visual Studio Code.

Prasyarat

Anda dapat menggunakan komputer atau komputer virtual yang menjalankan Windows, macOS, atau Linux sebagai komputer pengembangan Anda. Di komputer Windows, Anda dapat mengembangkan modul Windows atau Linux. Untuk mengembangkan modul Linux, gunakan komputer Windows yang memenuhi persyaratan untuk Docker Desktop.

Untuk menginstal alat yang diperlukan untuk pengembangan dan penelusuran kesalahan, selesaikan tutorial Mengembangkan modul Azure IoT Edge menggunakan Visual Studio Code.

Instal Visual Studio Code.

Tambahkan ekstensi ini:

Untuk men-debug modul di perangkat, Anda memerlukan:

  • IoT Hub aktif dengan setidaknya satu perangkat IoT Edge.
  • Perangkat IoT Edge fisik atau perangkat virtual. Buat perangkat virtual di Azure dengan mengikuti langkah-langkah dalam quickstart untuk Linux.
  • Modul IoT Edge kustom Untuk membuat modul kustom, ikuti langkah-langkah dalam modul Azure IoT Edge Develop menggunakan tutorial Visual Studio Code.

Debug tanpa kontainer menggunakan simulator IoT Edge

Simulator IoT Edge adalah alat yang berjalan di komputer pengembangan Anda dan mensimulasikan perilaku satu perangkat IoT Edge. Anda dapat menggunakan simulator IoT Edge untuk mengembangkan dan menguji modul IoT Edge Anda tanpa perangkat fisik atau runtime perangkat IoT Edge penuh.

Langkah-langkah penelusuran kesalahan berikut mengasumsikan Anda telah membuat modul kustom. Jika Anda belum membuat modul kustom, ikuti langkah-langkah dalam modul Develop Azure IoT Edge menggunakan tutorial Visual Studio Code.

Debugging dalam modul tanpa container tidak tersedia saat menggunakan C atau Python.

Debug dalam mode penyambungan menggunakan simulator IoT Edge

  • C / Python
  • C# / Azure Functions / Node.js / Java< /c0>

Debug dalam mode lampiran tidak tersedia untuk C atau Python.

Mendebug modul menggunakan runtime IoT Edge

Setiap folder modul berisi beberapa file Docker untuk jenis kontainer yang berbeda. Gunakan file apa pun yang diakhir dengan ekstensi .debug untuk membangun modul Anda untuk pengujian.

Saat Anda men-debug modul menggunakan metode ini, modul Anda berjalan di atas runtime IoT Edge. Perangkat IoT Edge dan Visual Studio Code dapat berjalan pada komputer yang sama, tetapi biasanya, Visual Studio Code berjalan pada komputer pengembangan sementara runtime dan modul IoT Edge berjalan pada komputer fisik lain. Untuk men-debug dari Visual Studio Code:

  • Siapkan perangkat IoT Edge Anda, buat modul IoT Edge Anda dengan .debug Dockerfile, lalu sebarkan ke perangkat IoT Edge.
  • Perbarui launch.json sehingga Visual Studio Code dapat melampirkan ke proses dalam kontainer pada komputer jarak jauh. Anda dapat menemukan file ini di .vscode folder di ruang kerja Anda, dan diperbarui setiap kali Anda menambahkan modul baru yang mendukung penelusuran kesalahan.
  • Gunakan penelusuran kesalahan SSH Jarak Jauh untuk melampirkan ke kontainer pada komputer jarak jauh.

Membangun dan menyebarkan modul Anda ke perangkat IoT Edge

Di Visual Studio Code, buka file manifes penyebaran deployment.debug.template.json. Manifes deployment menjelaskan modul yang akan dikonfigurasi pada perangkat IoT Edge yang ditargetkan. Sebelum penyebaran, perbarui kredensial Azure Container Registry dan gambar modul Anda dengan nilai createOptions yang tepat. 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, tambahkan kredensial Anda ke edgeAgent>settings>registryCredentials bagian di deployment.debug.template.json. Ganti myacr dengan nama registri Anda sendiri di kedua tempat dan berikan kata sandi dan Alamat server masuk Anda. Contohnya:

    "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "myacr": {
                "username": "myacr",
                "password": "<your_azure_container_registry_password>",
                "address": "myacr.azurecr.io"
              }
            }
          }
        },
    ...
    
  2. Tambahkan atau ganti konten yang telah dibentuk menjadi string berikut pada nilai createOptions untuk setiap sistem (edgeHub dan edgeAgent) dan modul kustom (misalnya, filtermodule) yang 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\"}]}}}"
    }
    
  1. Di palet perintah Visual Studio Code, jalankan perintah Azure IoT Edge: Membangun dan Mendorong solusi IoT Edge.
  2. Pilih file deployment.debug.template.json untuk solusi Anda.
  3. Di bagian Azure IoT Hub>Devices dari tampilan Visual Studio Code Explorer, klik kanan nama perangkat IoT Edge untuk penyebaran lalu pilih Buat Penyebaran untuk Perangkat Tunggal.

    Petunjuk / Saran

    Untuk mengonfirmasi bahwa perangkat yang Anda pilih adalah perangkat IoT Edge, pilih untuk memperluas daftar modul dan memverifikasi keberadaan $edgeHub dan $edgeAgent. Setiap perangkat IoT Edge mencakup kedua modul ini.

  4. Buka folder config solusi Anda, pilih file deployment.debug.amd64.json, lalu pilih Pilih Manifes Penyebaran Edge.

Periksa status kontainer Anda dari perangkat atau komputer virtual Anda dengan menjalankan docker ps perintah di terminal. Anda akan melihat kontainer Anda tercantum setelah menjalankan perintah. Jika Visual Studio Code dan runtime IoT Edge berjalan pada komputer yang sama, periksa status dalam tampilan Docker Visual Studio Code.

Penting

Jika Anda menggunakan registri privat seperti Azure Container Registry untuk gambar Anda, Anda mungkin perlu mengotentikasi untuk mengunggah gambar. Gunakan docker login <Azure Container Registry login server> atau az acr login --name <Azure Container Registry name> untuk mengautentikasi.

Masuk ke Docker

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 yang Anda simpan setelah membuat registri.

    docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>
    

    Anda mungkin menerima peringatan keamanan yang merekomendasikan penggunaan --password-stdin. Meskipun ini 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 mungkin perlu Install Azure CLI untuk menggunakan perintah az. Perintah ini meminta nama pengguna dan kata sandi Anda yang ditemukan di registri kontainer Anda di kunci Akses Pengaturan>.

    az acr login -n <Azure Container Registry name>
    

Petunjuk / Saran

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

Bangun citra Docker modul

Gunakan Dockerfile modul untuk membuat citra Docker.

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

Misalnya, untuk membangun gambar untuk registri lokal atau Azure Container Registry, gunakan perintah berikut:

# Build the image for the local registry

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

# Or build the image for an Azure Container Registry

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

Mendorong gambar Docker modul

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
az acr login --name myacr
docker push myacr.azurecr.io/filtermodule:0.0.1-amd64

Menyebarkan modul ke perangkat IoT Edge

Gunakan perintah IoT Edge Azure CLI set-modules untuk menyebarkan modul ke Azure IoT Hub. Misalnya, untuk menyebarkan modul yang ditentukan dalam file deployment.debug.template.json ke IoT Hub my-iot-hub untuk perangkat IoT Edge my-device, 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>"

Petunjuk / Saran

Anda dapat menemukan kunci akses bersama IoT Hub di portal Azure di IoT Hub >Pengaturan keamanan>Kebijakan akses yang dibagikan>iothubowner.

Lakukan debugging pada modul Anda

Untuk melakukan debugging modul pada perangkat remote, gunakan debugging SSH Remote di Visual Studio Code.

Aktifkan remote debugging Visual Studio Code dengan menginstal ekstensi Remote Development. Untuk informasi selengkapnya tentang debugging jarak jauh di Visual Studio Code, lihat Visual Studio Code Remote Development.

Untuk informasi selengkapnya tentang menggunakan debugging SSH jarak jauh di Visual Studio Code, lihat Remote Development menggunakan SSH.

Dalam tampilan debug Visual Studio Code, pilih file konfigurasi debug untuk modul. Secara default, .debug Dockerfile, pengaturan createOptions kontainer modul, dan file launch.json menggunakan localhost.

Pilih Mulai Penelusuran Kesalahan atau F5, lalu pilih proses yang akan dilampirkan. Dalam tampilan debug Visual Studio Code, Anda akan melihat variabel di panel kiri.

Debug menggunakan Docker dengan SSH jarak jauh

Mesin Docker dan Moby mendukung koneksi SSH ke kontainer yang memungkinkan Anda melakukan debug di Visual Studio Code tersambung ke perangkat jarak jauh. Anda perlu memenuhi prasyarat berikut sebelum dapat menggunakan fitur ini.

Prasyarat pelacakan kesalahan SSH jarak jauh mungkin berbeda tergantung pada bahasa yang Anda gunakan. Bagian berikut menjelaskan penyiapan untuk .NET. Untuk informasi tentang bahasa lain, lihat Pengembangan Jarak Jauh menggunakan SSH untuk gambaran umum. Detail-detail tentang cara mengonfigurasi debugging jarak jauh dijelaskan dalam bagian debugging untuk setiap bahasa dalam dokumentasi Visual Studio Code.

Mengonfigurasi penerowongan Docker SSH

  1. Ikuti langkah-langkah dalam penerowongan Docker SSH untuk menyiapkan penerowongan SSH di komputer pengembangan Anda. Penerowongan SSH memerlukan autentikasi pasangan kunci publik/privat dan konteks Docker yang menentukan titik akhir perangkat jarak jauh.

  2. Menyambungkan ke Docker memerlukan hak istimewa root. Ikuti langkah-langkah dalam Mengelola docker sebagai pengguna non-root untuk mengizinkan koneksi ke daemon Docker di perangkat jarak jauh. Setelah menyelesaikan penelusuran kesalahan, Anda mungkin ingin menghapus pengguna Anda dari grup Docker.

  3. Di Visual Studio Code, gunakan perintah Palet Perintah (Ctrl+Shift+P) untuk mengeluarkan perintah Docker: Gunakan untuk mengaktifkan konteks Docker yang menunjuk ke komputer jarak jauh. Perintah ini memungkinkan Visual Studio Code dan Docker CLI menggunakan konteks komputer jarak jauh.

    Petunjuk / Saran

    Semua perintah Docker menggunakan konteks saat ini. Ingatlah untuk mengubah konteks kembali ke default ketika Anda selesai melakukan debugging.

  4. Untuk memverifikasi konteks Docker jarak jauh aktif, cantumkan kontainer yang sedang berjalan di perangkat jarak jauh:

    docker ps
    

    Output mencantumkan kontainer yang berjalan di perangkat jarak jauh, mirip dengan yang berikut ini:

    PS C:\> docker ps        
    CONTAINER ID   IMAGE                                                             COMMAND                   CREATED        STATUS         PORTS                                                                                                                                   NAMES
    a317b8058786   myacr.azurecr.io/filtermodule:0.0.1-amd64                         "dotnet filtermodule…"    24 hours ago   Up 6 minutes                                                                                                                                           filtermodule
    d4d949f8dfb9   mcr.microsoft.com/azureiotedge-hub:1.5                            "/bin/sh -c 'echo \"$…"   24 hours ago   Up 6 minutes   0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:5671->5671/tcp, :::5671->5671/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 1883/tcp   edgeHub
    1f0da9cfe8e8   mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0   "/bin/sh -c 'echo \"$…"   24 hours ago   Up 6 minutes                                                                                                    
                                           tempSensor
    66078969d843   mcr.microsoft.com/azureiotedge-agent:1.5                          "/bin/sh -c 'exec /a…"    24 hours ago   Up 6 minutes                                                                                                    
                                           edgeAgent
    
  5. Di direktori .vscode, buka launch.json di Visual Studio Code dan tambahkan konfigurasi baru. Pilih Tambahkan konfigurasi, lalu pilih templat lampiran jarak jauh yang cocok untuk modul Anda. Misalnya, konfigurasi berikut adalah untuk .NET Core. Ubah nilai untuk parameter -H di PipeArgs ke nama DNS perangkat atau alamat IP Anda.

    "configurations": [
    {
      "name": "Remote Debug IoT Edge Module (.NET Core)",
      "type": "coreclr",
      "request": "attach",
      "processId": "${command:pickRemoteProcess}",
      "pipeTransport": {
        "pipeProgram": "docker",
        "pipeArgs": [
          "-H",
          "ssh://user@my-device-vm.eastus.cloudapp.azure.com:22",
          "exec",
          "-i",
          "filtermodule",
          "sh",
          "-c"
        ],
        "debuggerPath": "~/vsdbg/vsdbg",
        "pipeCwd": "${workspaceFolder}",
        "quoteArgs": true
      },
      "sourceFileMap": {
        "/app": "${workspaceFolder}/modules/filtermodule"
      },
      "justMyCode": true
    },
    

Debug modul Anda dari jarak jauh

  1. Dalam tampilan debug Visual Studio Code, pilih konfigurasi debug Remote Debug IoT Edge Module (.NET Core).

  2. Pilih Mulai Debug atau pilih F5. Pilih proses yang akan ditautkan.

  3. Dalam tampilan debug Visual Studio Code, Anda akan melihat variabel di panel kiri.

  4. Di Visual Studio Code, atur titik henti dalam modul kustom Anda.

  5. Ketika breakpoint tercapai, Anda dapat memeriksa variabel, menelusuri kode, dan meng-debug modul Anda.

    Screenshot dari Visual Studio Code yang terhubung ke kontainer Docker pada perangkat jarak jauh yang berhenti di breakpoint.

Catatan

Contoh sebelumnya menunjukkan cara men-debug modul IoT Edge pada kontainer jarak jauh. Contoh menambahkan konteks Docker jarak jauh dan perubahan pada hak istimewa Docker pada perangkat jarak jauh. Setelah selesai men-debug modul, atur konteks Docker Anda ke default dan hapus hak istimewa dari akun pengguna Anda.

Lihat entri blog Pengembang IoT ini untuk contoh menggunakan perangkat Raspberry Pi.

Langkah berikutnya

Setelah Anda membuat modul, pelajari cara menerapkan modul Azure IoT Edge.

Untuk mengembangkan modul untuk perangkat IoT Edge Anda, pelajari dan gunakan SDK Azure IoT Hub.