Tutorial: Membuat hierarki perangkat IoT Edge

Berlaku untuk tanda centang:IoT Edge 1.4 IoT Edge 1.4

Penting

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

Anda dapat menyebarkan simpul Azure IoT Edge di seluruh jaringan yang diatur dalam lapisan hierarkis. Setiap lapisan dalam hierarki adalah perangkat gateway yang menangani pesan dan permintaan dari perangkat di lapisan di bawahnya. Konfigurasi ini juga dikenal sebagai tepi berlapis.

Anda dapat menyusun hierarki perangkat sehingga hanya lapisan atas yang memiliki konektivitas ke cloud, dan lapisan bawah hanya dapat berkomunikasi dengan lapisan hulu dan hilir yang berdekatan. Lapisan jaringan ini adalah fondasi sebagian besar jaringan industri yang mengikuti standar ISA-95.

Tutorial ini memandu Anda membuat hierarki perangkat IoT Edge, menyebarkan kontainer runtime IoT Edge ke perangkat Anda, dan mengonfigurasi perangkat Anda secara lokal. Anda melakukan tugas-tugas berikut:

  • Membuat dan menentukan hubungan dalam hierarki perangkat IoT Edge.
  • Mengonfigurasi runtime IoT Edge pada perangkat dalam hierarki Anda.
  • Memasang sertifikat yang konsisten di seluruh hierarki perangkat Anda.
  • Menambahkan beban kerja ke perangkat dalam hierarki Anda.
  • Gunakan modul Proksi IoT Edge API untuk merutekan lalu lintas HTTP dengan aman melalui satu port dari perangkat lapisan bawah Anda.

Tip

Tutorial ini mencakup gabungan langkah manual dan otomatis untuk menunjukkan fitur IoT Edge bersarang.

Jika Anda ingin melihat sepenuhnya otomatis dalam menyiapkan hierarki perangkat IoT Edge, ikuti sampel Azure IoT Edge untuk IoT Industri yang ditulis. Skenario skrip ini menyebarkan komputer virtual Azure sebagai perangkat yang dikonfigurasi sebelumnya untuk mensimulasikan lingkungan pabrik.

Jika Anda ingin melihat secara mendalam langkah-langkah manual untuk membuat dan mengelola hierarki perangkat IoT Edge, lihat panduan cara menggunakan hierarki gateway perangkat IoT Edge.

Dalam tutorial ini, lapisan jaringan berikut ditentukan:

  • Lapisan atas: Perangkat IoT Edge pada lapisan ini dapat terhubung langsung ke cloud.

  • Lapisan bawah: IoT Edge perangkat pada lapisan di bawah lapisan atas tidak dapat terhubung langsung ke cloud. Lapisan ini perlu melalui satu atau beberapa perangkat IoT Edge perantara untuk mengirim dan menerima data.

Tutorial ini menggunakan hierarki dua perangkat untuk kesederhanaan. Perangkat lapisan atas mewakili perangkat di lapisan atas hierarki yang dapat terhubung langsung ke cloud. Perangkat ini disebut sebagai perangkat induk. Perangkat lapisan bawah mewakili perangkat di lapisan bawah hierarki yang tidak dapat terhubung langsung ke cloud. Anda dapat menambahkan lebih banyak perangkat untuk mewakili lingkungan produksi Anda, sesuai kebutuhan. Perangkat pada lapisan bawah disebut sebagai perangkat anak.

Struktur hierarki tutorial, yang berisi dua perangkat: perangkat lapisan atas dan perangkat lapisan bawah

Catatan

Perangkat anak dapat menjadi perangkat hilir atau perangkat gateway dalam topologi berlapis.

Prasyarat

Untuk membuat hierarki perangkat IoT Edge, Anda memerlukan:

  • Komputer (Windows atau Linux) dengan konektivitas internet.

  • Akun Azure dengan langganan yang valid. Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.

  • IoT Hub tingkat gratis atau standar di Azure.

  • Shell Bash di Azure Cloud Shell menggunakan Azure CLI dengan ekstensi Azure IoT terinstal. Tutorial ini menggunakan Azure Cloud Shell. Untuk melihat versi modul dan ekstensi Azure CLI Anda saat ini, jalankan az version.

  • Dua perangkat Linux untuk mengonfigurasi hierarki Anda. Jika Anda tidak memiliki perangkat yang tersedia, Anda dapat membuat komputer virtual Azure untuk setiap perangkat dalam hierarki Anda menggunakan templat IoT Edge Azure Resource Manager. IoT Edge versi 1.4 telah diinstal sebelumnya dengan templat Resource Manager ini. Jika Anda menginstal IoT Edge di perangkat Anda sendiri, lihat Menginstal Azure IoT Edge untuk Linux atau Memperbarui IoT Edge.

  • Untuk menyederhanakan komunikasi jaringan antar perangkat, komputer virtual harus berada di jaringan virtual yang sama atau menggunakan peering jaringan virtual.

  • Pastikan bahwa port berikut ini terbuka bagi semua perangkat untuk masuk kecuali perangkat lapisan terendah: 443, 5671, 8883:

    • 443: Digunakan antara hub tepi induk dan anak untuk panggilan REST API dan untuk menarik citra kontainer docker.
    • 5671, 8883: Digunakan untuk AMQP dan MQTT.

    Untuk informasi selengkapnya, lihat cara membuka port ke komputer virtual dengan portal Azure.

    Tip

    Anda menggunakan handel SSH dan alamat FQDN atau IP setiap komputer virtual untuk konfigurasi di langkah-langkah selanjutnya, jadi lacak informasi ini. Anda dapat menemukan alamat IP dan FQDN di portal Azure. Untuk alamat IP, buka daftar komputer virtual Anda dan catat bidang alamat IP Publik. Untuk FQDN, buka halaman ringkasan setiap komputer virtual dan cari bidang Nama DNS . Untuk handel SSH, buka halaman sambungkan setiap komputer virtual.

Membuat hierarki perangkat IoT Edge Anda

Perangkat IoT Edge membentuk lapisan hierarki Anda. Tutorial ini membuat hierarki dua perangkat IoT Edge: perangkat lapisan atas dan perangkat lapisan bawah. Anda dapat membuat lebih banyak perangkat hilir sesuai kebutuhan.

Untuk membuat dan mengonfigurasi hierarki perangkat IoT Edge, Anda menggunakan perintah az iot edge devices create Azure CLI. Perintah menyederhanakan konfigurasi hierarki dengan mengotomatiskan dan membungkus beberapa langkah:

  • Membuat perangkat di IoT Hub Anda
  • Mengatur hubungan induk-turunan untuk mengotorisasi komunikasi antarperangkat
  • Menerapkan manifes penyebaran ke setiap perangkat
  • Menghasilkan rantai sertifikat untuk setiap perangkat untuk membangun komunikasi yang aman di antara mereka
  • Menghasilkan file konfigurasi untuk setiap perangkat

Membuat konfigurasi perangkat

Anda membuat sekelompok perangkat edge berlapis dengan berisi perangkat induk dengan satu perangkat anak. Dalam tutorial ini, kami menggunakan manifes penyebaran sampel dasar. Untuk contoh skenario lainnya, tinjau contoh templat konfigurasi.

  1. Sebelum Anda menggunakan perintah az iot edge devices create , Anda perlu menentukan manifes penyebaran untuk lapisan atas dan perangkat lapisan bawah. Unduh file sampel deploymentTopLayer.json ke komputer lokal Anda.

    Manifes penyebaran perangkat lapisan atas mendefinisikan modul Proksi API IoT Edge dan mendeklarasikan rute dari perangkat lapisan bawah ke IoT Hub.

  2. Unduh file sampel deploymentLowerLayer.json ke komputer lokal Anda.

    Manifes penyebaran perangkat lapisan bawah mencakup modul sensor suhu yang disimulasikan dan menyatakan rute ke perangkat lapisan atas. Anda dapat melihat dalam bagian systemModules bahwa modul runtime diatur untuk menarik dari $upstream:443, bukan mcr.microsoft.com. Perangkat lapisan bawah mengirimkan permintaan gambar Docker IoT Edge modul Proksi API pada port 443, karena tidak dapat langsung menarik gambar dari cloud. Modul lain yang disebarkan ke perangkat lapisan bawah, modul Sensor Suhu Simulasi, juga membuat permintaan gambarnya ke $upstream:443.

    Untuk informasi selengkapnya tentang cara membuat manifes penyebaran lapisan bawah, lihat Menyambungkan perangkat Azure IoT Edge untuk membuat hierarki.

  3. Di azure Cloud Shell, gunakan perintah az iot edge devices create Azure CLI untuk membuat perangkat di IoT Hub dan bundel konfigurasi untuk setiap perangkat dalam hierarki Anda. Ganti tempat penampung berikut dengan nilai yang sesuai:

    Tempat penampung Deskripsi
    <nama hub> Nama IoT Hub Anda.
    <config-bundle-output-path> Jalur folder tempat Anda ingin menyimpan bundel konfigurasi.
    <parent-device-name> Nama ID perangkat induk lapisan atas .
    <parent-deployment-manifest> File manifes penyebaran perangkat induk.
    <parent-fqdn-or-ip> Nama domain atau alamat IP perangkat induk yang sepenuhnya memenuhi syarat (FQDN).
    <child-device-name> Nama ID perangkat anak lapisan bawah .
    <child-deployment-manifest> File manifes penyebaran perangkat anak.
    <child-fqdn-or-ip> Nama domain atau alamat IP perangkat anak yang sepenuhnya memenuhi syarat (FQDN).
    az iot edge devices create \
       --hub-name <hub-name> \
       --output-path <config-bundle-output-path> \
       --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.4" \
       --device id=<parent-device-name> \
          deployment=<parent-deployment-manifest> \
          hostname=<parent-fqdn-or-ip> \
       --device id=child-1 \
          parent=parent-1 \
          deployment=<child-deployment-manifest> \
          hostname=<child-fqdn-or-ip>
    

    Misalnya, perintah berikut membuat hierarki dua perangkat IoT Edge di IoT Hub. Perangkat lapisan atas bernama parent-1 dan perangkat lapisan bawah bernama child-1*. Perintah menyimpan bundel konfigurasi untuk setiap perangkat di direktori output . Perintah ini juga menghasilkan sertifikat pengujian yang ditandatangani sendiri dan menyertakannya dalam bundel konfigurasi. Bundel konfigurasi diinstal pada setiap perangkat menggunakan skrip penginstalan.

    az iot edge devices create \
       --hub-name my-iot-hub \
       --output-path ./output \
       --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.4" \
       --device id=parent-1 \
          deployment=./deploymentTopLayer.json \
          hostname=10.0.0.4 \
       --device id=child-1 \
          parent=parent-1 \
          deployment=./deploymentLowerLayer.json \
          hostname=10.1.0.4
    

Setelah menjalankan perintah, Anda dapat menemukan bundel konfigurasi perangkat di direktori output. Contohnya:

PS C:\nested-edge\output> dir

   Directory: C:\nested-edge\output

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           4/10/2023  4:12 PM           7192 child-1.tgz
-a---           4/10/2023  4:12 PM           6851 parent-1.tgz

Anda dapat menggunakan sertifikat dan kunci Anda sendiri yang diteruskan sebagai argumen ke perintah atau membuat hierarki perangkat yang lebih kompleks. Untuk informasi selengkapnya tentang membuat perangkat berlapis menggunakan perintah az , lihat membuat perangkat az iot edge. Jika Anda tidak terbiasa dengan bagaimana sertifikat digunakan dalam skenario gateway, lihat bagian sertifikat panduan.

Dalam tutorial ini, Anda menggunakan argumen sebaris untuk membuat perangkat dan bundel konfigurasi. Anda juga dapat menggunakan file konfigurasi dalam format YAML atau JSON. Untuk contoh file konfigurasi, lihat contoh sample_devices_config.yaml.

Mengonfigurasi runtime IoT Edge

Selain provisi perangkat Anda, langkah konfigurasi menetapkan komunikasi tepercaya antara perangkat dalam hierarki Anda menggunakan sertifikat yang Anda buat sebelumnya. Langkah tersebut juga mulai menetapkan struktur jaringan hierarki Anda. Perangkat lapisan atas mempertahankan konektivitas internet, memungkinkannya untuk menarik gambar untuk runtime dari cloud, sementara perangkat lapisan bawah merutekan melalui perangkat lapisan atas untuk mengakses gambar-gambar ini.

Untuk mengonfigurasi runtime IoT Edge, Anda perlu menerapkan bundel konfigurasi ke perangkat Anda. Konfigurasi berbeda antara perangkat lapisan atas dan perangkat lapisan bawah, jadi perhatikan file konfigurasi perangkat yang Anda terapkan ke setiap perangkat.

  1. Salin setiap file arsip bundel konfigurasi ke perangkat yang sesuai. Anda dapat menggunakan drive USB, layanan seperti Azure Key Vault, atau dengan fungsi seperti Salinan file aman. Pilih salah satu metode ini yang paling sesuai dengan skenario Anda.

    Misalnya, untuk mengirim bundel konfigurasi induk-1 ke direktori beranda pada VM induk-1 , Anda dapat menggunakan perintah seperti contoh berikut:

    scp ./output/parent-1.tgz admin@parent-1-vm.westus.cloudapp.azure.com:~
    
  2. Di setiap perangkat, ekstrak arsip bundel konfigurasi. Misalnya, gunakan perintah tar untuk mengekstrak file arsip induk-1 :

    tar -xzf ./parent-1.tgz
    
  3. Atur izin eksekusi untuk skrip penginstalan.

    chmod +x install.sh
    
  4. Pada setiap perangkat, terapkan bundel konfigurasi ke perangkat menggunakan izin root:

    sudo ./install.sh
    

    Menginstal bundel konfigurasi memperbarui file config.toml di perangkat Anda dan memulai ulang semua layanan IoT Edge secara otomatis

    Jika Anda ingin melihat lebih dekat modifikasi apa yang dilakukan pada file konfigurasi perangkat Anda, lihat Menyambungkan perangkat Azure IoT Edge bersama-sama untuk membuat hierarki.

Untuk memverifikasi perangkat Anda dikonfigurasi dengan benar, jalankan pemeriksaan konfigurasi dan konektivitas di perangkat Anda.

sudo iotedge check
admin@child-1-vm:~$ sudo iotedge check

Configuration checks (aziot-identity-service)
---------------------------------------------
√ keyd configuration is well-formed - OK
√ certd configuration is well-formed - OK
√ tpmd configuration is well-formed - OK
√ identityd configuration is well-formed - OK
√ daemon configurations up-to-date with config.toml - OK
√ identityd config toml file specifies a valid hostname - OK
√ host time is close to reference time - OK
√ preloaded certificates are valid - OK
√ keyd is running - OK
√ certd is running - OK
√ identityd is running - OK
√ read all preloaded certificates from the Certificates Service - OK
√ read all preloaded key pairs from the Keys Service - OK
√ check all EST server URLs utilize HTTPS - OK
√ ensure all preloaded certificates match preloaded private keys with the same ID - OK

Connectivity checks (aziot-identity-service)
--------------------------------------------
√ host can connect to and perform TLS handshake with iothub AMQP port - OK
√ host can connect to and perform TLS handshake with iothub HTTPS / WebSockets port - OK
√ host can connect to and perform TLS handshake with iothub MQTT port - OK

Configuration checks
--------------------
√ aziot-edged configuration is well-formed - OK
√ configuration up-to-date with config.toml - OK
√ container engine is installed and functional - OK
√ configuration has correct parent_hostname - OK
√ configuration has correct URIs for daemon mgmt endpoint - OK
√ container time is close to host time - OK
‼ DNS server - Warning
    Container engine is not configured with DNS server setting, which may impact connectivity to IoT Hub.
    Please see https://aka.ms/iotedge-prod-checklist-dns for best practices.
    You can ignore this warning if you are setting DNS server per module in the Edge deployment.
‼ production readiness: logs policy - Warning
    Container engine is not configured to rotate module logs which may cause it run out of disk space.
    Please see https://aka.ms/iotedge-prod-checklist-logs for best practices.
    You can ignore this warning if you are setting log policy per module in the Edge deployment.
‼ production readiness: Edge Agent's storage directory is persisted on the host filesystem - Warning
    The edgeAgent module is not configured to persist its /tmp/edgeAgent directory on the host filesystem.
    Data might be lost if the module is deleted or updated.
    Please see https://aka.ms/iotedge-storage-host for best practices.
‼ production readiness: Edge Hub's storage directory is persisted on the host filesystem - Warning
    The edgeHub module is not configured to persist its /tmp/edgeHub directory on the host filesystem.
    Data might be lost if the module is deleted or updated.
    Please see https://aka.ms/iotedge-storage-host for best practices.
√ Agent image is valid and can be pulled from upstream - OK
√ proxy settings are consistent in aziot-edged, aziot-identityd, moby daemon and config.toml - OK

Connectivity checks
-------------------
√ container on the default network can connect to upstream AMQP port - OK
√ container on the default network can connect to upstream HTTPS / WebSockets port - OK
√ container on the IoT Edge module network can connect to upstream AMQP port - OK
√ container on the IoT Edge module network can connect to upstream HTTPS / WebSockets port - OK
30 check(s) succeeded.
4 check(s) raised warnings. Re-run with --verbose for more details.
2 check(s) were skipped due to errors from other checks. Re-run with --verbose for more details.

Di perangkat lapisan atas, pertimbangkan untuk melihat output dengan beberapa evaluasi yang lolos. Anda mungkin melihat beberapa peringatan tentang kebijakan log dan, bergantung pada jaringan Anda, kebijakan DNS.

Penyebaran modul perangkat

Penyebaran modul untuk perangkat Anda diterapkan saat perangkat dibuat di IoT Hub. Perintah buat perangkat az iot edge menerapkan file JSON penyebaran untuk perangkat lapisan atas dan bawah. Setelah penyebaran tersebut selesai, perangkat lapisan bawah menggunakan modul Proksi API IoT Edge untuk menarik gambar yang diperlukan.

Selain modul runtime IoT Edge Agent dan IoT Edge Hub, perangkat lapisan atas menerima modul registri Docker dan modul Proksi IoT Edge API.

Modul registri Docker mengarah ke Azure Container Registry yang sudah ada. Dalam hal ini, REGISTRY_PROXY_REMOTEURL mengarah ke Microsoft Container Registry. Secara default, registri Docker mendengarkan pada port 5000.

Modul Proksi IoT Edge API merutekan permintaan HTTP ke modul lain, yang memungkinkan perangkat lapisan bawah menarik gambar kontainer atau mendorong blob ke penyimpanan. Dalam tutorial ini, modul ini berkomunikasi di port 443 dan dikonfigurasi untuk mengirim rute permintaan pull citra kontainer Docker ke modul registri Docker Anda pada port 5000. Selain itu, setiap permintaan pengunggahan penyimpanan blob dirutekan ke modul AzureBlobStorageonIoTEdge pada port 11002. Untuk informasi selengkapnya tentang modul Proksi IoT Edge API dan cara mengonfigurasinya, lihat panduan cara mengonfigurasinya dalam modul.

Jika Anda ingin melihat cara membuat penyebaran seperti ini melalui portal Azure atau Azure Cloud Shell, lihat bagian perangkat lapisan atas dalam panduan cara pembuatan.

Anda dapat melihat status modul Anda menggunakan perintah:

az iot hub module-twin show --device-id <edge-device-id> --module-id '$edgeAgent' --hub-name <iot-hub-name> --query "properties.reported.[systemModules, modules]"

Perintah ini menghasilkan semua properti edgeAgent yang dilaporkan. Berikut adalah beberapa hal yang berguna untuk memantau status perangkat: status runtime, waktu mulai runtime, waktu keluar terakhir runtime, jumlah mulai ulang runtime.

Anda juga dapat melihat status modul Anda di portal Azure. Navigasi ke bagian Perangkat di IoT Hub Anda untuk melihat perangkat dan modul Anda.

Melihat data yang dihasilkan

Modul Sensor Suhu Simulasi yang Anda dorong menghasilkan contoh data lingkungan. Modul ini mengirim pesan yang mencakup suhu dan kelembaban sekitar, suhu dan tekanan mesin, dan tanda waktu.

Anda juga dapat melihat pesan ini melalui Azure Cloud Shell:

az iot hub monitor-events -n <iot-hub-name> -d <lower-layer-device-name>

Contohnya:

az iot hub monitor-events -n my-iot-hub -d child-1
{
    "event": {
        "origin": "child-1",
        "module": "simulatedTemperatureSensor",
        "interface": "",
        "component": "",
        "payload": "{\"machine\":{\"temperature\":104.29281270901808,\"pressure\":10.48905461241978},\"ambient\":{\"temperature\":21.086561171611102,\"humidity\":24},\"timeCreated\":\"2023-04-17T21:50:30.1082487Z\"}"
    }
}

Pemecahan Masalah

Jalankan perintah iotedge check untuk memverifikasi konfigurasi dan memecahkan masalah kesalahan.

Anda dapat berjalan iotedge check dalam hierarki berlapis, bahkan jika komputer hilir tidak memiliki akses internet langsung.

Jika Anda menjalankan iotedge check dari lapisan bawah, program akan mencoba menarik gambar dari induk melalui port 443.

Nilai azureiotedge-diagnostics ditarik dari registri kontainer yang ditautkan dengan modul registri. Tutorial ini telah diatur secara default ke https://mcr.microsoft.com:

Nama Nilai
REGISTRY_PROXY_REMOTEURL https://mcr.microsoft.com

Jika Anda menggunakan registri kontainer privat, pastikan semua gambar (IoTEdgeAPIProxy, edgeAgent, edgeHub, Sensor Suhu Simulasi, dan diagnostik) ada dalam registri kontainer.

Jika perangkat hilir memiliki arsitektur prosesor yang berbeda dari perangkat induk, Anda memerlukan gambar arsitektur yang sesuai. Anda dapat menggunakan registri yang terhubung atau Anda dapat menentukan gambar yang benar untuk modul edgeAgent dan edgeHub dalam file config.toml perangkat hilir. Misalnya, jika perangkat induk berjalan pada arsitektur ARM32v7 dan perangkat hilir berjalan pada arsitektur AMD64, Anda perlu menentukan versi yang cocok dan tag gambar arsitektur dalam file config.toml perangkat hilir.

[agent.config]
image = "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"

"systemModules": {
   "edgeAgent": {
      "settings": {
            "image": "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"
      },
   },
   "edgeHub": {
      "settings": {
            "image": "$upstream:443/azureiotedge-hub:1.4.10-linux-amd64",
      }
   }
}

Membersihkan sumber daya

Anda dapat menghapus konfigurasi lokal dan sumber daya Azure yang Anda buat di artikel ini untuk menghindari biaya.

Untuk menghapus sumber daya:

  1. Masuk ke portal Microsoft 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 Anda hanya ingin menghapus beberapa dari mereka, Anda dapat memilih setiap sumber daya untuk menghapusnya satu per satu.

Langkah berikutnya

Dalam tutorial ini, Anda telah mengonfigurasi dua perangkat IoT Edge sebagai gateway dan mengatur salah satunya sebagai perangkat induk. Kemudian, Anda menarik gambar kontainer ke perangkat hilir melalui gateway menggunakan modul Proksi API IoT Edge. Lihat panduan cara penggunaan modul proksi jika Anda ingin mempelajari lebih lanjut.

Untuk mempelajari selengkapnya tentang menggunakan gateway untuk membuat lapisan hierarkis perangkat IoT Edge, lihat artikel berikut ini.