Bagikan melalui


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

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.

Tutorial ini memandu Anda untuk mengembangkan, melakukan debugging, dan menyebarkan kode Anda sendiri ke perangkat Azure IoT Edge dengan 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 IoT Edge kustom yang berjalan di kontainer Linux di Windows. Bahkan jika Anda berencana untuk menggunakan bahasa yang berbeda atau menyebarkan layanan Azure, tutorial ini masih berguna untuk mempelajari tentang alat dan konsep pengembangan.

Tutorial ini mencakup langkah-langkah untuk dua alat pengembangan IoT Edge:

  • Antarmuka baris perintah (CLI) Azure IoT Edge Dev Tool CLI, yang merupakan alat pilihan untuk pengembangan
  • Ekstensi Azure IoT Edge Tools untuk Visual Studio, yang berada dalam mode pemeliharaan

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

Dalam tutorial ini, Anda akan mempelajari cara:

  • Siapkan komputer pengembangan Anda.
  • Gunakan alat pengembangan IoT Edge untuk membuat proyek baru.
  • Bangun proyek Anda sebagai kontainer dan simpan dalam Azure Container Registry.
  • Sebarkan kode Anda ke perangkat IoT Edge.

Prasyarat

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

Sebelum Anda mulai:

  • Instal IoT Edge untuk Linux di Windows.

  • Baca panduan memulai cepat Terapkan modul IoT Edge Anda yang pertama ke perangkat Windows.

  • Unduh .NET Core SDK.

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

  • Setelah penginstalan Visual Studio 2022 Anda siap, 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 Azure IoT Edge Dev Tool CLI. Ekstensi ini mencakup templat proyek Azure IoT Edge yang Anda gunakan untuk membuat proyek Visual Studio. Saat ini, Anda perlu menginstal ekstensi terlepas dari alat pengembangan yang Anda gunakan.

    Petunjuk / Saran

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

  • Buat IoT hub gratis atau standar di Azure sebagai sumber daya cloud.

Jika Anda tidak memiliki akun Azure, buat akun free sebelum Memulai.

Konsep kunci

Tutorial ini menjelaskan pengembangan modul IoT Edge. Modul IoT Edge adalah kontainer yang memiliki kode yang dapat dieksekusi. Anda dapat menyebarkan satu atau beberapa modul ke perangkat 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 modul Azure IoT Edge Understand.

Saat Anda mengembangkan modul IoT Edge, penting untuk memahami perbedaan antara mesin pengembangan dan perangkat IoT Edge target tempat modul pada akhirnya akan disebarkan. Kontainer yang Anda bangun untuk menampung kode modul harus cocok dengan sistem operasi (OS) perangkat target.

Misalnya, skenario yang paling umum adalah seseorang mengembangkan modul pada komputer Windows yang ingin menargetkan perangkat Linux yang menjalankan IoT Edge. Dalam hal ini, OS 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 IoT Edge untuk Linux di Windows komputer virtual (VM) untuk membangun dan menyebarkan modul.

Tutorial ini menargetkan perangkat yang berjalan 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 Visual Studio Code, meskipun ada perbedaan dukungan antara kedua alat tersebut. Untuk informasi selengkapnya, lihat modul Develop Azure IoT Edge menggunakan Visual Studio Code.

Menyiapkan mesin Docker CLI dan Docker untuk koneksi jarak jauh

IoT Edge modul-modul dikemas sebagai kontainer, jadi Anda memerlukan mesin container pada mesin pengembangan Anda untuk membangun dan mengelolanya.

IoT Edge untuk Linux pada VM Windows sudah berisi instans mesin Docker. Tutorial ini menunjukkan kepada Anda cara terhubung dari jarak jauh dari komputer pengembang Windows ke IoT Edge untuk Linux pada instans Docker VM Windows. Dengan menggunakan koneksi jarak jauh ini, Anda menghapus dependensi pada Docker Desktop untuk Windows.

Mengonfigurasi Docker CLI

Langkah pertama adalah mengonfigurasi Docker CLI pada mesin pengembangan Windows untuk dapat terhubung ke mesin Docker jarak jauh:

  1. Unduh versi Docker CLI yang telah dikommpilasikan docker.exe sebelumnya dari Chocolatey. Anda juga dapat mengunduh proyek resmi cli dari GitHub dan mengkompilasinya dengan 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 Advanced>Variabel lingkungan. Di bawah Variabel pengguna, pilih Jalur.

  5. Edit variabel Jalur dan tambahkan lokasi docker.exe.

  6. Buka sesi PowerShell yang ditinggikan.

  7. Periksa apakah Docker CLI dapat diakses dengan menggunakan perintah ini:

    docker --version
    

    Jika Anda berhasil mengonfigurasi semuanya, output perintah akan menampilkan versi Docker. Ini seharusnya terlihat seperti Docker version 20.10.12, build e91ed57.

Mengonfigurasi mesin Docker

Langkah kedua adalah mengonfigurasi IoT Edge untuk Linux pada mesin Docker VM Windows untuk menerima koneksi eksternal, dan menambahkan aturan firewall yang sesuai.

Peringatan

Mengekspos mesin Docker ke koneksi eksternal dapat meningkatkan risiko keamanan. Anda harus menggunakan konfigurasi ini hanya 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 IoT Edge for Linux on Windows VM 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 IoT Edge for Linux on Windows 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 IoT Edge for Linux on Windows 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 adalah contoh output:

    PS C:\> # Configure the IoT Edge for Linux on Windows 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 IoT Edge for Linux on Windows 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 IoT Edge for Linux on Windows 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
    

Menguji koneksi

Langkah penyiapan terakhir adalah menguji koneksi Docker ke IoT Edge untuk Linux pada mesin Docker VM Windows:

  1. Dapatkan alamat IP IoT Edge untuk Linux di VM Windows:

    Get-EflowVmAddr
    

    Petunjuk / Saran

    Jika IoT Edge untuk Linux pada VM Windows dijalankan tanpa IP statis, alamat IP mungkin berubah setelah Windows host OS di-restart atau perubahan jaringan terjadi. Pastikan Anda menggunakan alamat IP yang benar untuk IoT Edge untuk Linux di Windows VM setiap kali Anda ingin membuat koneksi jarak jauh ke mesin Docker.

    Berikut 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 
    
  2. Sambungkan ke IoT Edge untuk Linux pada mesin Docker VM Windows dan jalankan kontainer sampel hello-world. Ganti <EFLOW-VM-IP> dengan IoT Edge untuk Linux pada alamat IP VM Windows yang Anda peroleh di langkah sebelumnya.

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

    Ketika pengunduhan kontainer selesai, kontainer berjalan dan menghasilkan output ini:

    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're 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/
    

Membuat proyek Azure IoT Edge

Templat proyek IoT Edge di Visual Studio membuat solusi yang dapat Anda sebarkan ke perangkat IoT Edge. Gunakan langkah-langkah berikut untuk membuat solusi Azure IoT Edge lalu hasilkan modul pertama dalam solusi tersebut. Setiap solusi IoT Edge dapat berisi lebih dari satu modul.

Penting

Struktur proyek IoT Edge yang Visual Studio buat 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 Azure IoT Edge Tools untuk membuat proyek Visual Studio.

  1. Di Visual Studio, buat proyek baru dengan memilih Buat proyek baru di halaman mulai atau dengan memilih tombol Proyek Baru pada toolbar.

  2. Pada halaman Buat proyek baru, cari Azure IoT Edge. Pilih proyek yang cocok dengan platform (modul IoT Edge Linux) dan arsitektur untuk perangkat IoT Edge Anda, lalu pilih Baru.

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

  4. Dalam dialog Tambahkan Modul, pilih jenis modul yang ingin Anda kembangkan. Anda juga dapat memilih modul Eksisting untuk menambahkan modul IoT Edge yang ada ke penyebaran Anda.

  5. Di Nama Modul, tentukan nama modul 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 login terlihat seperti <nama registri>.azurecr.io. Ganti hanya bagian 'localhost:5000' dalam string, sehingga hasil akhirnya terlihat seperti <nama registri>.azurecr.io/<nama modul Anda>.

  7. Pilih Tambahkan untuk menambahkan modul Anda ke proyek.

    Screenshot pilihan untuk 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 pada properti repository dalam file JSON.

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

Struktur proyek

Solusi Anda memiliki dua folder tingkat proyek: folder proyek utama dan folder modul. Misalnya, Anda mungkin memiliki folder proyek utama bernama AzureIotEdgeApp1 dan folder modul bernama IotEdgeModule1.

Folder proyek utama berisi manifes penyebaran Anda. Manifes penyebaran adalah dokumen JSON yang menjelaskan modul yang akan dikonfigurasi pada perangkat IoT Edge yang ditargetkan.

Folder modul berisi file untuk kode modul Anda. Ini dinamai entah Program.cs atau main.c, tergantung pada 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.

Manifest penerapan proyek Anda

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

Templat penyebaran meliputi:

  • Dua modul runtime, edgeAgent dan edgeHub.
  • Modul kustom yang Anda buat dalam proyek Visual Studio ini.
  • Modul bernama SimulatedTemperatureSensor. Modul default ini menghasilkan data simulasi yang dapat Anda gunakan untuk menguji modul Anda (atau menghapus jika tidak diperlukan). Untuk melihat cara kerja sensor suhu yang disimulasikan, lihat kode sumber SimulatedTemperatureSensor.csproj.

Mengatur versi runtime IoT Edge

Saat ini, versi runtime stabil terbaru adalah 1.5. Perbarui versi runtime IoT Edge ke rilis stabil terbaru atau versi yang ingin Anda targetkan untuk perangkat Anda:

  1. Di Solution Explorer, klik kanan nama proyek utama Anda dan pilih Set IoT Edge versi runtime.

    Screenshot pilihan untuk mengatur versi runtime IoT Edge.

  2. Gunakan menu dropdown untuk memilih versi runtime yang dijalankan perangkat IoT Edge Anda. Lalu pilih OK untuk menyimpan perubahan Anda. Jika Anda tidak membuat perubahan apa pun, pilih Batalkan.

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

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

  1. Buka file manifes penyebaran deployment.debug.template.json.

  2. Ubah versi runtime untuk modul runtime sistem gambar edgeAgent dan edgeHub. Misalnya, jika Anda ingin menggunakan IoT Edge runtime 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",
        //...
    

Menyiapkan instans mesin remote Docker untuk Visual Studio 2022

Konfigurasikan ekstensi Azure IoT Edge Tools untuk menggunakan mesin Docker jarak jauh yang berjalan di dalam IoT Edge untuk Linux pada VM Windows:

  1. Pilih Tools>Alat Azure IoT Edge>Pengaturan Alat IoT Edge.

  2. Ganti nilai localhost DOCKER_HOST dengan alamat IP untuk IoT Edge untuk Linux di VM Windows. Jika Anda tidak ingat alamat IP, gunakan IoT Edge untuk Linux pada cmdlet PowerShell Windows Get-EflowVmAddr untuk mendapatkannya. Misalnya, jika IoT Edge untuk Linux pada alamat IP VM Windows adalah 172.20.1.100, nilai baru harus tcp://172.20.1.100:2375.

    Screenshot dari pengaturan IoT Edge Tools

  3. Pilih OK.

Mengembangkan modul Anda

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

Dalam solusi default, data simulasi dari modul SimulatedTemperatureSensor dirutekan ke modul Anda. Modul mengambil input dan kemudian mengirimkannya ke Azure 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. Kebutuhan ini dapat mencakup keamanan, manajemen perangkat, dan keandalan.

Membangun dan mengunggah satu modul

Biasanya, Anda ingin menguji dan men-debug setiap modul sebelum menjalankannya dalam seluruh solusi dengan beberapa modul. Karena solusi akan build atau debug dengan menggunakan mesin Docker yang berjalan dalam IoT Edge untuk Linux dalam VM Windows, langkah pertama adalah membangun dan menerbitkan modul untuk mengaktifkan debug jarak jauh.

  1. Di Solution Explorer, pilih folder proyek modul (misalnya, myIotEdgeModule).

  2. Atur modul kustom sebagai proyek startup. Pada menu, pilih Project>Set sebagai Proyek StartUp.

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

    Catatan

    Saat Anda memilih Debug, Visual Studio menggunakan Dockerfile.(amd64|windows-amd64).debug untuk membangun gambar Docker. File ini mencakup debugger baris perintah .NET Core VSDBG dalam gambar kontainer Anda saat proses pembangunannya. Untuk modul IoT Edge siap produksi, kami sarankan Anda menggunakan konfigurasi Release, yang menggunakan Dockerfile.(amd64|windows-amd64) tanpa VSDBG.

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

  4. Untuk membuat koneksi SSH dengan modul Linux, Anda perlu membuat kunci RSA. Buka sesi PowerShell yang ditingkatkan dan jalankan perintah berikut untuk membuat kunci RSA baru. Simpan kunci RSA di bawah folder modul IoT Edge yang sama, dan pastikan bahwa nama kunci id_rsa.

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

    Cuplikan layar perintah PowerShell untuk membuat kunci SSH.

  5. Jika Anda menggunakan registri privat seperti Azure Container Registry, gunakan perintah Docker berikut untuk masuk ke registri tersebut. Anda bisa mendapatkan nama pengguna dan kata sandi dari halaman Kunci Akses di registri Anda di portal Azure. Jika Anda menggunakan registri lokal, Anda dapat menjalankan registri lokal.

    docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
    
  1. Di Solution Explorer, klik kanan folder proyek dan pilih Bangun dan Push Modul IoT Edge. Perintah ini membangun dan mengunggah image Docker untuk setiap modul.

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

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

    Catatan

    Artikel ini menggunakan kredensial masuk admin untuk Azure Container Registry, yang nyaman 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. Port yang Anda tentukan akan digunakan sebagai port SSH untuk terhubung ke modul Linux C# . Anda perlu menambahkan informasi port SSH ke createOptions untuk pengaturan modul Linux ini dalam file deployment.debug.template.json.

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

  5. Pilih Tampilkan>Cloud Explorer. Pastikan Anda masuk ke Visual Studio 2019.

  6. Di Cloud Explorer, perluas langganan Anda, lalu temukan Azure IoT Hub dan perangkat Azure IoT Edge yang ingin Anda sebarkan.

  7. Klik kanan perangkat IoT Edge dan pilih Buat penyebaran. Buka manifes penyebaran debug yang dikonfigurasi untuk platform Anda. Ini ada di folder config di solusi Visual Studio Anda, seperti deployment.amd64.json.

Membangun image Docker untuk modul

Setelah mengembangkan modul, Anda dapat membuat gambar modul untuk disimpan di 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, asumsikan bahwa shell perintah Anda ada di direktori proyek Anda dan nama modul Anda adalah IotEdgeModule1. Untuk membangun gambar untuk registri lokal atau Azure Container Registry, 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"

Unggah 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

Menyebarkan modul ke perangkat IoT Edge

Di Visual Studio, buka file manifes penyebaran deployment.debug.template.json di proyek utama.

Sebelum penyebaran, Anda perlu memperbarui kredensial Azure Container Registry, gambar modul, dan 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 citra modul, tambahkan kredensial Anda ke deployment.debug.template.json dalam 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. Gantilah nilai properti image dengan nama gambar modul yang Anda unggah ke registri. Misalnya, jika Anda mengunggah gambar bertanda 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 diubah menjadi string untuk setiap sistem dan modul kustom dalam template penyebaran.

    Misalnya, pengaturan image dan createOptions untuk IotEdgeModule1 akan mirip dengan contoh berikut:

    "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\"}]}}}"
    }
    
  4. 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.amd64.json ke hub IoT 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 IoT Hub connection string Anda di portal Azure di bawah Azure IoT Hub>Pengamanan keamanan>Kebijakan akses berbagi.

  5. Di Cloud Explorer, klik kanan perangkat edge Anda dan segarkan untuk mengonfirmasi bahwa modul baru berjalan, bersama dengan modul $edgeAgent dan modul $edgeHub.

Memperbaiki solusi

  1. Dalam sesi PowerShell yang ditingkatkan, jalankan perintah berikut:

    1. Dapatkan nilai moduleId, berdasarkan nama modul Linux C#. <iot-edge-module-name> Ganti tempat penampung dengan nama modul Anda.

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

    3. Mulai layanan SSH di dalam kontainer Linux:

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. Buka port SSH modul pada IoT Edge untuk Linux di VM Windows. (Tutorial ini menggunakan port 10022.)

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

    Peringatan

    Untuk alasan keamanan, setiap kali IoT Edge untuk Linux pada Windows VM dimulai ulang, aturan tabel IP dihapus dan kembali ke pengaturan asli. Selain itu, Anda harus memulai layanan SSH modul lagi secara manual.

  2. Setelah Anda berhasil memulai layanan SSH, pilih Debug>Lampirkan ke Proses, atur Connection Type ke SSH, dan atur Target Koneksi ke alamat IP IoT Edge Anda pada Linux di VM Windows. Jika Anda tidak tahu alamat IP IoT Edge Anda untuk Linux di VM Windows, Anda dapat menggunakan cmdlet PowerShell Get-EflowVmAddr.

    Ketik IP lalu pilih tombol Enter. Di jendela pop-up, masukkan konfigurasi berikut:

    Bidang Nilai
    Host Name Alamat IP untuk IoT Edge untuk Linux di VM Windows
    Port 10022 (atau yang Anda gunakan dalam konfigurasi penyebaran Anda)
    Nama pengguna root
    Jenis autentikasi Kunci privat
    File Kunci Privat Jalur lengkap menuju nilai id_rsa yang Anda buat di langkah sebelumnya
    Frase Sandi Frase sandi yang digunakan untuk kunci yang Anda buat di langkah sebelumnya
  3. Setelah berhasil menyambungkan ke modul dengan menggunakan SSH, Anda dapat memilih proses dan memilih Lampirkan. Untuk modul C#, Anda perlu memilih proses dotnet dan Melampirkan ke Terkelola (CoreCLR). Mungkin perlu waktu 10 hingga 20 detik untuk pertama kalinya.

  4. Atur titik henti untuk memeriksa modul:

    • Jika Anda mengembangkan di C#, atur titik henti dalam PipeMessage() fungsi di ModuleBackgroundService.cs.
    • Jika Anda menggunakan C, atur titik henti dalam InputQueue1Callback() fungsi di main.c.
  5. Output 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. Untuk menghentikan penelusuran kesalahan, pilih Ctrl+F5 atau pilih tombol Hentikan .

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 terus menggunakan perangkat IoT Edge yang sama dengan perangkat pengujian.

Jika tidak, hapus konfigurasi lokal dan sumber daya Azure yang Anda gunakan dalam artikel ini untuk menghindari biaya.

Menghapus sumber daya Azure

Anda tidak dapat membatalkan penghapusan Azure sumber daya dan grup sumber daya. 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 Resource.
  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 Anda ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika Anda hanya ingin menghapus beberapa sumber daya, pilih setiap sumber daya untuk menghapusnya satu per satu.

Langkah selanjutnya

Dalam tutorial ini, Anda menyiapkan Visual Studio di komputer pengembangan Anda, dan Anda menyebarkan dan men-debug modul IoT Edge pertama Anda darinya. Sekarang setelah Anda mengetahui konsep dasar, coba tambahkan fungsionalitas ke modul sehingga dapat menganalisis data yang melewatinya: