Tutorial: Mengembangkan modul IoT Edge dengan kontainer Linux dengan menggunakan IoT Edge untuk Linux di Windows
Berlaku untuk: IoT Edge 1.4
Penting
Azure IoT Edge 1.5 LTS dan IoT Edge 1.4 adalah rilis yang didukung. IoT Edge 1.4 LTS mencapai akhir layanan pada 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Memperbarui IoT Edge.
Tutorial ini memancang Anda melalui pengembangan, penelusuran kesalahan, dan penyebaran kode Anda sendiri ke perangkat Azure IoT Edge dengan 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 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.
- Buat proyek Anda sebagai kontainer dan simpan dalam registri kontainer Azure.
- Sebarkan kode Anda ke perangkat Azure IoT Edge.
Prasyarat
Tutorial ini mengasumsikan bahwa Anda menggunakan mesin yang menjalankan Windows sebagai komputer 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 mulai cepat Sebarkan modul IoT Edge pertama Anda ke perangkat Windows.
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.
Tip
Jika Anda menggunakan Visual Studio 2019, unduh dan instal Azure IoT Edge Tools untuk Visual Studio 2019 dari Visual Studio Marketplace.
- Instal Azure CLI.
- Buat hub IoT tingkat gratis atau standar di Azure sebagai sumber daya cloud.
Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure 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 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 Anda mengembangkan modul IoT Edge, penting untuk memahami perbedaan antara komputer 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 di 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 komputer virtual (VM) Windows untuk membangun dan menyebarkan modul.
Tutorial ini menargetkan perangkat yang menjalankan 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 Mengembangkan modul Azure IoT Edge menggunakan Visual Studio Code.
Menyiapkan mesin Docker CLI dan Docker untuk koneksi jarak jauh
Modul Azure IoT Edge dikemas sebagai kontainer, jadi Anda memerlukan mesin kontainer di komputer pengembangan untuk membangun dan mengelolanya.
IoT Edge untuk Linux di Windows VM 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 Windows VM Docker. Dengan menggunakan koneksi jarak jauh ini, Anda menghapus dependensi pada Docker Desktop untuk Windows.
Mengonfigurasi Docker CLI
Langkah pertama adalah mengonfigurasi Docker CLI pada komputer pengembangan Windows untuk dapat terhubung ke mesin Docker jarak jauh:
Unduh versi Docker CLI yang telah dikommpilasikan
docker.exe
sebelumnya dari Chocolatey. Anda juga dapat mengunduh proyek cli resmi dari GitHub dan mengkompilasinya dengan mengikuti instruksi repositori.Ekstrak
docker.exe
ke direktori di komputer pengembangan Anda; misalnya,C:\Docker\bin
.Buka Tentang pengaturan sistem Tingkat Lanjut Info>Sistem PC>Anda.
Pilih Variabel Lingkungan Tingkat Lanjut>. Di bawah Variabel pengguna, pilih Jalur.
Edit variabel Jalur dan tambahkan lokasi
docker.exe
.Buka sesi PowerShell yang ditinggikan.
Periksa apakah Docker CLI dapat diakses dengan menggunakan perintah ini:
docker --version
Jika Anda berhasil mengonfigurasi semuanya, output perintah akan menampilkan versi Docker. Ini akan terlihat seperti
Docker version 20.10.12, build e91ed57
.
Mengonfigurasi mesin Docker
Langkah kedua adalah mengonfigurasi IoT Edge untuk Linux pada mesin Windows VM Docker 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.
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 Windows VM Docker:
Dapatkan alamat IP IoT Edge untuk Linux di Windows VM:
Get-EflowVmAddr
Tip
Jika IoT Edge untuk Linux pada VM Windows disebarkan tanpa IP statis, alamat IP mungkin berubah di seluruh restart OS host Windows atau perubahan jaringan. 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
Sambungkan ke IoT Edge untuk Linux pada mesin Windows VM Docker dan jalankan
hello-world
kontainer sampel. 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/
Buat perangkat 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 dibuat 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 Azure IoT Edge Tools untuk membuat proyek Visual Studio.
Di Visual Studio, buat proyek baru dengan memilih Buat proyek baru di halaman mulai atau dengan memilih tombol Proyek Baru pada toolbar.
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, lalu pilih Berikutnya.
Pada halaman Konfigurasikan proyek baru Anda, masukkan nama untuk proyek Anda dan tentukan lokasinya, lalu pilih Buat.
Dalam dialog 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.
Di Nama Modul, tentukan nama modul Anda.
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 dari string, sehingga hasil akhir terlihat seperti< nama> registri.azurecr.io/< nama> modul Anda.
Pilih Tambahkan untuk menambahkan modul Anda ke proyek.
Catatan
Jika Anda memiliki proyek IoT Edge yang sudah ada, Anda dapat mengubah URL repositori dengan membuka
module.json
file. URL repositori terletak direpository
properti file JSON.
Sekarang, Anda memiliki proyek IoT Edge dan modul IoT Edge di 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 atau Program.cs
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.
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. 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
danedgeHub
. - 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.4. Perbarui versi runtime IoT Edge ke rilis stabil terbaru atau versi yang ingin Anda targetkan untuk perangkat Anda:
Di Penjelajah Solusi, klik kanan nama proyek utama Anda dan pilih Atur versi runtime IoT Edge.
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 gambaredgeAgent
modul runtime sistem danedgeHub
. 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", //...
Jika Anda mengubah versi, regenerasi manifes penyebaran Anda dengan mengklik kanan nama proyek Anda dan memilih Hasilkan penyebaran untuk IoT Edge. Langkah ini menghasilkan manifes penyebaran berdasarkan templat penyebaran Anda. Manifes muncul di
config
folder proyek Visual Studio Anda.
deployment.debug.template.json
Buka file manifes penyebaran.Ubah versi runtime untuk gambar
edgeAgent
modul runtime sistem danedgeHub
. 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
Konfigurasikan ekstensi Azure IoT Edge Tools untuk menggunakan mesin Docker jarak jauh yang berjalan di dalam IoT Edge untuk Linux di Windows VM:
Pilih Alat>Azure IoT Edge alat>pengaturan alat IoT Edge.
Ganti nilai localhost DOCKER_HOST dengan alamat IP untuk IoT Edge untuk Linux di Windows VM. Jika Anda tidak ingat alamat IP, gunakan cmdlet
Get-EflowVmAddr
IoT Edge untuk Linux di Windows PowerShell 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.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 dirutekan SimulatedTemperatureSensor
ke modul Anda. Modul mengambil input lalu mengirimkannya ke Azure IoT Hub.
Saat Anda siap untuk menyesuaikan templat modul dengan kode Anda sendiri, gunakan Azure IoT Hub SDK untuk membangun modul lain yang memenuhi kebutuhan utama untuk solusi IoT. Kebutuhan ini dapat mencakup keamanan, manajemen perangkat, dan keandalan.
Membangun dan mendorong satu modul
Biasanya, Anda ingin menguji dan men-debug setiap modul sebelum menjalankannya dalam seluruh solusi dengan beberapa modul. Karena solusinya akan membangun atau men-debug dengan menggunakan mesin Docker yang berjalan di dalam IoT Edge untuk Linux di Windows VM, langkah pertama adalah membangun dan menerbitkan modul untuk mengaktifkan penelusuran kesalahan jarak jauh:
Di Penjelajah Solusi, pilih folder proyek modul (misalnya,
myIotEdgeModule
).Atur modul kustom sebagai proyek startup. Pada menu, pilih Set Proyek>sebagai Proyek StartUp.
Untuk men-debug modul C# Linux, Anda perlu memperbarui
Dockerfile.amd64.debug
file untuk mengaktifkan layanan SSH.Dockerfile.amd64.debug
Perbarui file untuk menggunakan templat berikut: Dockerfile untuk Modul Azure IoT Edge AMD64 C# dengan Dukungan Debug Jarak Jauh.Catatan
Saat Anda memilih Debug, Visual Studio menggunakan
Dockerfile.(amd64|windows-amd64).debug
untuk membuat gambar Docker. File ini mencakup 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 menggunakanDockerfile.(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.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 kuncinya adalah
id_rsa
.ssh-keygen -t RSA -b 4096 -m PEM
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 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>
Di Penjelajah Solusi, klik kanan folder proyek dan pilih Bangun dan Dorong Modul IoT Edge. Perintah ini membangun dan mendorong gambar Docker untuk setiap modul.
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 admin Container Registry, kata sandi, dan nama registri Anda yang sebenarnya."settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "registry1": { "username": "<username>", "password": "<password>", "address": "<registry name>.azurecr.io" } } }
Catatan
Artikel ini menggunakan info 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.
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 untuk
createOptions
pengaturan modul Linux ini dalam filedeployment.debug.template.json
:"createOptions": { "HostConfig": { "Privileged": true, "PortBindings": { "22/tcp": [ { "HostPort": "10022" } ] } } }
Di Penjelajah Solusi, klik kanan folder proyek dan pilih Buat Penyebaran untuk IoT Edge untuk membangun JSON penyebaran IoT Edge baru.
Pilih Tampilkan>Cloud Explorer. Pastikan Anda masuk ke Visual Studio 2019.
Di Cloud Explorer, perluas langganan Anda, lalu temukan Azure IoT Hub dan perangkat Azure IoT Edge yang ingin Anda sebarkan.
Klik kanan perangkat IoT Edge dan pilih Buat penyebaran. Buka manifes penyebaran debug yang dikonfigurasi untuk platform Anda. Ini ada di
config
folder di solusi Visual Studio Anda, sepertideployment.amd64.json
.
Membangun gambar Docker 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 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"
Dorong 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 deployment.debug.template.json
file manifes penyebaran di proyek utama.
Sebelum penyebaran, Anda perlu memperbarui kredensial Azure Container Registry, gambar modul, dan nilai yang tepat createOptions
. Untuk informasi selengkapnya tentang createOption
nilai, lihat Cara mengonfigurasi opsi pembuatan kontainer untuk modul IoT Edge.
Jika Anda menggunakan registri kontainer Azure untuk menyimpan gambar modul Anda, tambahkan kredensial Anda ke
deployment.debug.template.json
edgeAgent
dalam pengaturan. 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" } } } }, //...
image
Ganti nilai properti dengan nama gambar modul yang Anda dorong ke registri. Misalnya, jika Anda mendorong gambar yang ditandaimyacr.azurecr.io/iotedgemodule1:0.0.1-amd64
untuk modulIotEdgeModule1
kustom , ganti nilai properti gambar dengan nilai tag.Tambahkan atau ganti
createOptions
nilai dengan konten yang di string untuk setiap sistem dan modul kustom dalam templat penyebaran.Misalnya,
image
pengaturan dancreateOptions
untukIotEdgeModule1
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\"}]}}}" }
Gunakan perintah set-modul IoT Edge Azure CLI untuk menyebarkan modul ke hub Azure IoT. Misalnya, untuk menyebarkan modul yang ditentukan dalam
deployment.debug.amd64.json
file ke hubmy-iot-hub
IoT untuk perangkatmy-device
IoT Edge , 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.
Di Cloud Explorer, klik kanan perangkat edge Anda dan refresh untuk mengonfirmasi bahwa modul baru berjalan, bersama dengan
$edgeAgent
modul dan$edgeHub
.
Men-debug solusi
Dalam sesi PowerShell yang ditingkatkan, jalankan perintah berikut:
Dapatkan nilainya
moduleId
, berdasarkan nama untuk 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>"
Periksa apakah
$moduleId
benar. Jika variabel kosong, pastikan Anda menggunakan nama modul yang benar.Mulai layanan SSH di dalam kontainer Linux:
Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
Buka port SSH modul di 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 VM Windows dimulai ulang, aturan tabel IP dihapus dan kembali ke pengaturan asli. Selain itu, Anda harus memulai layanan SSH modul lagi secara manual.
Setelah Anda berhasil memulai layanan SSH, pilih Lampirkan Debug>ke Proses, atur Jenis Koneksi ke SSH, dan atur Target koneksi ke alamat IP IoT Edge Anda untuk Linux di Windows VM. Jika Anda tidak tahu alamat IP IoT Edge untuk Linux di VM Windows, Anda dapat menggunakan
Get-EflowVmAddr
cmdlet PowerShell.Ketik IP lalu pilih tombol Enter. Di jendela pop-up, masukkan konfigurasi berikut:
Bidang Nilai Hostname Alamat IP untuk IoT Edge untuk Linux di Windows VM Port 10022 (atau yang Anda gunakan dalam konfigurasi penyebaran Anda) Username akar Jenis autentikasi Kunci privat File Kunci Privat Jalur lengkap ke id_rsa
nilai yang Anda buat di langkah sebelumnyaFrase sandi Frase sandi yang digunakan untuk kunci yang Anda buat di langkah sebelumnya Setelah berhasil menyambungkan ke modul dengan menggunakan SSH, Anda dapat memilih proses dan memilih Lampirkan. Untuk modul C#, Anda perlu memilih dotnet proses dan Lampirkan ke Terkelola (CoreCLR). Mungkin perlu waktu 10 hingga 20 detik untuk pertama kalinya.
Atur titik henti untuk memeriksa modul:
- Jika Anda mengembangkan di C#, atur titik henti dalam
PipeMessage()
fungsi diModuleBackgroundService.cs
. - Jika Anda menggunakan C, atur titik henti dalam
InputQueue1Callback()
fungsi dimain.c
.
- Jika Anda mengembangkan di C#, atur titik henti dalam
Output
SimulatedTemperatureSensor
harus dialihkan keinput1
modul Linux C# kustom. Titik henti harus dipicu. Anda dapat menonton variabel di jendela Visual Studio Locals.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 tetap menggunakan perangkat IoT Edge yang sama sebagai perangkat uji.
Jika tidak, hapus konfigurasi lokal dan sumber daya Azure yang Anda gunakan dalam artikel ini untuk menghindari biaya.
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:
Masuk ke portal Azure, lalu pilih Grup sumber daya.
Pilih nama grup sumber daya yang berisi sumber daya pengujian IoT Edge Anda.
Tinjau daftar sumber daya yang dimuat grup sumber daya Anda. Jika ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika Anda hanya ingin menghapus beberapa dari mereka, Anda dapat memilih setiap sumber daya untuk menghapusnya satu per satu.
Langkah 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: