Tutorial: Mengembangkan modul IoT Edge dengan kontainer Linux menggunakan IoT Edge untuk Linux di Windows

Berlaku untuk:Tanda centang IoT Edge 1.4 IoT Edge 1.4

Penting

IoT Edge 1.5 LTS dan IoT Edge 1.4 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 membahas pengembangan, penelusuran kesalahan, dan penyebaran kode Anda sendiri ke perangkat IoT Edge menggunakan IoT Edge untuk Linux di Windows dan Visual Studio 2022. Anda akan mempelajari skenario pengembang yang paling umum untuk solusi IoT Edge dengan menyebarkan modul C# ke perangkat Linux. Anda akan menyebarkan dan men-debug modul Azure IoT Edge kustom yang berjalan di kontainer Linux di Windows (EFLOW). Bahkan jika Anda berencana menggunakan bahasa atau menyebarkan layanan Azure yang berbeda, tutorial ini masih berguna untuk mempelajari tentang alat dan konsep pengembangan.

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 artikel ini untuk memilih versi alat.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Siapkan komputer pengembangan Anda.
  • Gunakan alat Azure IoT Edge untuk Visual Studio Code guna membuat proyek baru.
  • Buat proyek Anda sebagai kontainer dan simpan dalam registri kontainer Azure.
  • Sebarkan kode Anda ke perangkat Azure IoT Edge.

Prasyarat

Artikel ini mengasumsikan bahwa Anda menggunakan mesin yang menjalankan Windows sebagai mesin pengembangan Anda. Di komputer Windows, Anda dapat mengembangkan modul Windows atau Linux. Tutorial ini memandu Anda melalui pengembangan kontainer Linux, menggunakan IoT Edge untuk Linux di Windows untuk membangun dan menyebarkan modul.

Setelah Visual Studio 2022 siap, Anda juga memerlukan alat dan komponen berikut:

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

Sumber daya cloud:

  • IoT Hub gratis atau standar di Azure.

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

Konsep kunci

Tutorial ini membahas pengembangan modul Azure IoT Edge. Modul Azure IoT Edge, atau singkatnya hanya modul, 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 Azure IoT Edge, penting untuk memahami perbedaan antara komputer pengembangan dan perangkat Azure IoT Edge target tempat modul nantinya akan 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. Untuk tutorial ini, Anda akan menggunakan host Windows untuk pengembangan dan VM IoT Edge untuk Linux di Windows (EFLOW) untuk membangun dan menyebarkan modul.

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 untuk mengembangkan dengan kontainer Linux, jadi itulah yang digunakan tutorial ini. Anda juga dapat menggunakan Kode Visual Studio, meskipun ada perbedaan dalam dukungan di antara kedua alat. Untuk informasi selengkapnya, lihat Mengembangkan modul Azure IoT Edge menggunakan Visual Studio Code.

Menyiapkan koneksi jarak jauh docker-cli dan mesin Docker

Modul Azure IoT Edge dikemas sebagai kontainer, jadi Anda memerlukan mesin kontainer di komputer pengembangan untuk membangun dan mengelolanya. Komputer virtual EFLOW sudah berisi instans mesin Docker, jadi tutorial ini menunjukkan kepada Anda cara terhubung dari jarak jauh dari komputer pengembang Windows ke instans Docker VM EFLOW. Dengan menggunakan ini, kami menghapus dependensi pada Docker Desktop untuk Windows.

Langkah pertama adalah mengonfigurasi docker-cli pada komputer pengembangan Windows untuk dapat terhubung ke mesin docker jarak jauh.

  1. Unduh versi docker.exe yang telah dikompilasi dari docker-cli dari docker-cli Chocolatey. Anda juga dapat mengunduh proyek cli resmi dari GitHub docker/cli dan mengkompilasinya mengikuti instruksi repositori.
  2. Ekstrak docker.exe ke direktori di komputer pengembangan Anda. Misalnya, C:\Docker\bin
  3. Buka Tentang PC Anda ->Info Sistem ->Pengaturan sistem tingkat lanjut
  4. Pilih Tingkat Lanjut ->Variabel lingkungan -> Di bawah Variabel pengguna periksa Jalur
  5. Edit variabel Jalur dan tambahkan lokasi docker.exe
  6. Membuka sesi PowerShell yang ditingkatkan
  7. Periksa apakah Docker CLI dapat diakses menggunakan perintah
    docker --version
    

Jika semuanya berhasil dikonfigurasi, perintah sebelumnya harus menghasilkan versi docker, seperti Docker versi 20.10.12, build e91ed57.

Langkah kedua adalah mengonfigurasi mesin Docker komputer virtual EFLOW untuk menerima koneksi eksternal, dan menambahkan aturan firewall yang sesuai.

Peringatan

Mengekspos mesin Docker ke koneksi eksternal dapat meningkatkan risiko keamanan. Konfigurasi ini hanya boleh digunakan untuk tujuan pengembangan. Pastikan untuk mengembalikan konfigurasi ke pengaturan default setelah pengembangan selesai.

  1. Buka sesi PowerShell yang ditingkatkan dan jalankan perintah berikut

    # Configure the EFLOW virtual machine Docker engine to accept external connections, and add the appropriate firewall rules.
    Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT"
    
    # Create a copy of the EFLOW VM _docker.service_ in the system folder.
    Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service"
    
    # Replace the service execution line to listen for external connections.
    Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g'  /etc/systemd/system/docker.service"
    
    # Reload the EFLOW VM services configurations.
    Invoke-EflowVmCommand "sudo systemctl daemon-reload"
    
    # Reload the Docker engine service.
    Invoke-EflowVmCommand "sudo systemctl restart docker.service"
    
    # Check that the Docker engine is listening to external connections.
    Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
    

    Berikut ini adalah contoh output.

    PS C:\> # Configure the EFLOW virtual machine Docker engine to accept external connections, and add the appropriate firewall rules.
    PS C:\> Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT"
    PS C:\>
    PS C:\> # Create a copy of the EFLOW VM docker.service in the system folder.
    PS C:\> Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service"
    PS C:\>
    PS C:\> # Replace the service execution line to listen for external connections.
    PS C:\> Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service"
    PS C:\>
    PS C:\> # Reload the EFLOW VM services configurations.
    PS C:\> Invoke-EflowVmCommand "sudo systemctl daemon-reload"
    PS C:\>
    PS C:\> # Reload the Docker engine service.
    PS C:\> Invoke-EflowVmCommand "sudo systemctl restart docker.service"
    PS C:\>
    PS C:\> # Check that the Docker engine is listening to external connections.
    PS C:\> Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
    tcp6       0      0 :::2375                 :::*                    LISTEN      2790/dockerd
    
  2. Langkah terakhir adalah menguji koneksi Docker ke mesin Docker EFLOW VM. Pertama, Anda memerlukan alamat IP VM EFLOW.

    Get-EflowVmAddr
    

    Tip

    Jika VM EFLOW disebarkan tanpa IP Statis, alamat IP dapat berubah di seluruh boot ulang OS host Windows atau perubahan jaringan. Pastikan Anda menggunakan alamat IP VM EFLOW yang benar setiap kali Anda ingin membuat koneksi mesin Docker jarak jauh.

    Berikut ini adalah contoh output.

    PS C:\> Get-EflowVmAddr
    [03/15/2022 15:22:30] Querying IP and MAC addresses from virtual machine (DESKTOP-J1842A1-EFLOW)
     - Virtual machine MAC: 00:15:5d:6f:da:78
     - Virtual machine IP : 172.31.24.105 retrieved directly from virtual machine
    00:15:5d:6f:da:78
    172.31.24.105 
    
  3. Dengan menggunakan alamat IP yang diperoleh, sambungkan ke mesin Docker VM EFLOW, dan jalankan kontainer sampel Hello-World. Ganti <EFLOW-VM-IP> dengan alamat IP EFLOW VM yang diperoleh pada langkah sebelumnya.

    docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-world
    

    Anda akan melihat bahwa kontainer sedang diunduh, dan setelah itu akan berjalan dan menghasilkan yang berikut.

    PS C:\> docker -H tcp://172.31.24.105:2375 run --rm hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    2db29710123e: Pull complete
    Digest: sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

Buat perangkat Azure IoT Edge

Templat proyek IoT Edge di Visual Studio membuat solusi yang dapat disebarkan ke perangkat IoT Edge. Pertama, Anda membuat solusi Azure IoT Edge, dan kemudian Anda menghasilkan modul pertama dalam solusi itu. Setiap solusi IoT Edge dapat berisi lebih dari satu modul.

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. Pada halaman Buat proyek baru, cari Azure IoT Edge. Pilih proyek yang cocok dengan platform (modul Linux IoT Edge) dan arsitektur untuk perangkat IoT Edge Anda, dan pilih Berikutnya.

  3. Pada halaman Konfigurasikan proyek baru Anda, masukkan nama proyek Anda dan tentukan lokasinya, lalu pilih Buat.

  4. Pada jendela Tambahkan Modul, pilih jenis modul yang ingin Anda kembangkan. Anda juga dapat memilih Modul yang ada untuk menambahkan modul IoT Edge yang ada ke penyebaran Anda. Tentukan nama modul dan repositori gambar modul Anda.

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

  6. Pilih Tambahkan untuk menambahkan modul Anda ke proyek.

    Cuplikan layar menambahkan cara menambahkan aplikasi dan modul ke solusi Visual Studio

    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 modul berisi file untuk kode modul Anda, bernama Program.cs atau main.c tergantung bahasa yang Anda pilih. Folder ini juga berisi file bernama module.json yang menjelaskan metadata modul Anda. Berbagai file Docker 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.

    Cuplikan layar cara menemukan dan memilih item menu bernama 'Atur versi IoT Edge Runtime'.

  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",
        //...
    

Menyiapkan instans mesin Docker jarak jauh Visual Studio 2022

Gunakan ekstensi alat Azure IoT Edge dan konfigurasikan untuk menggunakan mesin Docker jarak jauh yang berjalan di dalam komputer virtual EFLOW.

  1. Pilih Alat ->Alat Azure IoT Edge ->Pengaturan alat IoT Edge...

  2. Ganti nilai localhost DOCKER_HOST dengan alamat IP VM EFLOW. Jika Anda tidak ingat alamat IP, gunakan cmdlet Get-EflowVmAddr PowerShell EFLOW untuk mendapatkannya. Untuk exmaple, jika alamat IP VM EFLOW adalah 172.20.1.100, maka nilai baru harus tcp://172.20.1.100:2375.

    Cuplikan layar pengaturan Alat IoT Edge

  3. Pilih OK

Mengembangkan modul Anda

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.

Saat Anda siap untuk menyesuaikan templat modul dengan kode Anda sendiri, gunakan SDK Azure IoT Hub untuk membangun modul lain yang memenuhi kebutuhan utama untuk solusi IoT seperti keamanan, manajemen perangkat, dan keandalan.

Membangun dan mendorong satu modul

Biasanya, Anda harus menguji dan melakukan debug setiap modul sebelum menjalankannya dalam seluruh solusi dengan beberapa modul. Karena solusinya akan dibangun atau debug menggunakan mesin Docker yang berjalan di dalam EFLOW VM, langkah pertama adalah membangun dan menerbitkan modul untuk mengaktifkan penelusuran kesalahan jarak jauh.

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

  2. Untuk men-debug modul C# Linux, kita perlu memperbarui file Dockerfile.amd64.debug untuk mengaktifkan layanan SSH. Perbarui file Dockerfile.amd64.debug untuk menggunakan templat berikut: Dockerfile untuk Modul Azure IoT Edge AMD64 C# dengan Dukungan Debug Jarak Jauh.

    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.

    Peringatan

    Pastikan baris terakhir template ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"] nama DLL cocok dengan nama proyek modul IoT Edge Anda.

    Cuplikan layar pengaturan templat Dockerfile

  3. Untuk membuat koneksi SSH dengan modul Linux, kita perlu membuat kunci RSA. Buka sesi PowerShell yang ditingkatkan dan jalankan perintah berikut untuk membuat kunci RSA baru. Pastikan Anda menyimpan kunci RSA di bawah folder modul IoT Edge yang sama, dan nama kuncinya id_rsa.

    ssh-keygen -t RSA -b 4096 -m PEM
    

    Cuplikan layar cara membuat kunci SSH

  4. 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. Jika Anda menggunakan registri lokal, Anda dapat menjalankan registri lokal.

    docker -H tcp://<EFLOW-VM-IP>:2375 login -u <ACR username> -p <ACR password> <ACR login server>
    
  1. Di Penjelajah Solusi, klik kanan folder proyek dan pilih Buat dan Dorong Modul IoT Edge untuk membuat dan mendorong gambar Docker untuk setiap modul.

  2. Jika Anda menggunakan registri pribadi seperti Azure Container Registry, Anda perlu menambahkan informasi masuk registri Anda ke pengaturan runtime yang ditemukan dalam file deployment.template.json. Ganti tempat penampung dengan nama pengguna, kata sandi, dan nama registri admin ACR Anda yang sebenarnya.

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

  3. Anda perlu mengekspos port 22 untuk mengakses layanan SSH modul. Tutorial ini menggunakan 10022 sebagai port host, tetapi Anda dapat menentukan port yang berbeda, yang akan digunakan sebagai port SSH untuk terhubung ke modul Linux C#. Anda perlu menambahkan informasi port SSH ke "createOptions" dari pengaturan modul Linux ini yang ditemukan dalam file deployment.debug.template.json.

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. Di Penjelajah Solusi, klik kanan folder proyek dan pilih Hasilkan Penyebaran untuk IoT Edge untuk membangun json penyebaran IoT Edge baru.

  5. Buka Cloud Explorer dengan mengeklik Tampilkan>Cloud Explorer. Pastikan Anda sudah masuk ke Visual Studio 2019.

  6. Di Cloud Explorer, buka langganan Anda, temukan Azure IoT Hub dan perangkat Azure IoT Edge yang ingin Anda terapkan.

  7. Klik kanan pada perangkat IoT Edge dan pilih Buat penyebaran. Navigasikan ke manifes penyebaran debug yang dikonfigurasi untuk platform Anda yang terletak di folder konfigurasi di solusi Visual Studio Anda, seperti deployment.amd64.json.

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>

Contohnya:

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

  1. Di Cloud Explorer, klik kanan perangkat edge Anda dan refresh untuk melihat modul baru yang berjalan bersama dengan modul $edgeAgent dan $edgeHub .

Men-debug solusi

  1. Menggunakan dan meningkatkan sesi PowerShell menjalankan perintah berikut

    1. Dapatkan moduleId berdasarkan nama yang digunakan untuk modul Linux C#. Pastikan untuk mengganti <tempat penampung iot-edge-module-name> dengan nama modul Anda.

      $moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"
      
    2. Periksa apakah $moduleId sudah benar - Jika variabel kosong, pastikan Anda menggunakan nama modul yang benar

    3. Memulai layanan SSH di dalam kontainer Linux

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. Buka port SSH modul pada VM EFLOW (tutorial ini menggunakan port 10022)

      Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
      

    Peringatan

    Untuk alasan keamanan, setiap kali VM EFLOW di-boot ulang, aturan tabel IP akan menghapus dan kembali ke pengaturan asli. Selain itu, layanan SSH modul harus dimulai lagi secara manual.

  2. Setelah berhasil memulai layanan SSH, pilih Debug ->Lampirkan ke Proses, atur Jenis Koneksi ke SSH, dan target Koneksi ion ke alamat IP VM EFLOW Anda. Jika Anda tidak tahu IP VM EFLOW, Anda dapat menggunakan Get-EflowVmAddr cmdlet PowerShell. Pertama, ketik IP lalu tekan enter. Di jendela pop-up, masukkan konfigurasi berikut:

    Bidang Nilai
    Hostname Menggunakan IP VM EFLOW
    Port 10022 (Atau yang Anda gunakan dalam konfigurasi penyebaran Anda)
    Username akar
    Jenis autentikasi Kunci privat
    File Kunci Privat Jalur lengkap ke id_rsa yang dibuat di langkah sebelumnya
    Frase sandi Frase sandi yang digunakan untuk kunci yang dibuat di langkah sebelumnya

    Cuplikan layar cara menyambungkan ke sistem jarak jauh

  3. Setelah berhasil menyambungkan ke modul menggunakan SSH, Anda dapat memilih proses dan memilih Lampirkan. Untuk modul C# Anda perlu memilih proses dotnet dan Lampirkan ke Terkelola (CoreCLR). Mungkin perlu waktu 10 hingga 20 detik untuk pertama kalinya.

    Cuplikan layar cara melampirkan proses modul edge.

  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. Output dari SimulatedTemperatureSensor harus dialihkan ke input1 modul Linux C# kustom. Titik henti harus dipicu. Anda dapat menonton variabel di jendela Visual Studio Locals.

    Cuplikan layar cara men-debug satu modul

  6. Tekan Ctrl + F5 atau plih tombol stop untuk menghentikan penelusuran 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 di komputer pengembangan Anda dan menyebarkan dan men-debug modul IoT Edge pertama Anda darinya. Sekarang setelah Anda mengetahui konsep dasarnya, coba tambahkan fungsionalitas ke modul sehingga modul dapat menganalisis data yang melewati modul.