Tutorial: Penyediaan untuk latensi geografis

Tutorial ini menunjukkan cara memprovisikan beberapa perangkat kunci konten yang disimulasikan dengan aman ke sekelompok IoT Hub menggunakan kebijakan alokasi. IoT Hub Device Provisioning Service (DPS) mendukung berbagai skenario alokasi melalui kebijakan alokasi bawaannya dan dukungannya untuk kebijakan alokasi kustom.

Provisi untuk Geolokasi/Latensi Geo adalah skenario alokasi umum. Saat perangkat berpindah antar lokasi, latensi jaringan ditingkatkan dengan menyediakan perangkat ke hub IoT yang paling dekat dengan setiap lokasi. Dalam skenario ini, grup hub IoT, yang mencakup seluruh wilayah, dipilih untuk pendaftaran. Kebijakan alokasi latensi Terendah bawaan dipilih untuk pendaftaran ini. Kebijakan ini menyebabkan Device Provisioning Service mengevaluasi latensi perangkat dan menentukan hub IoT terdekat dari grup hub IoT.

Tutorial ini menggunakan sampel perangkat yang disimulasikan dari Azure IoT C SDK untuk menunjukkan cara memprovisikan perangkat di seluruh wilayah. Anda akan melakukan langkah-langkah berikut dalam tutorial ini:

  • Menggunakan Azure CLI untuk membuat dua hub IoT regional (US Barat 2 dan US Timur)
  • Membuat pendaftaran yang menyediakan perangkat berdasarkan geolokasi (latensi terendah)
  • Menggunakan Azure CLI untuk membuat dua Linux VM regional untuk bertindak sebagai perangkat di wilayah yang sama (US Barat 2 dan US Timur)
  • Menyiapkan lingkungan pengembangan untuk Azure IoT C SDK di kedua komputer virtual Linux
  • Simulasikan perangkat dan verifikasi bahwa perangkat diprovisikan ke hub IoT di wilayah terdekat.

Penting

Beberapa wilayah mungkin, dari waktu ke waktu, memberlakukan pembatasan pada pembuatan Virtual Machines. Pada saat penulisan panduan ini, wilayah westus2 dan eastus mengizinkan pembuatan VM (mesin virtual). Jika Anda tidak dapat membuat di salah satu wilayah tersebut, Anda dapat mencoba wilayah lain. Untuk mempelajari selengkapnya tentang memilih wilayah geografis Azure saat membuat mesin virtual, lihat Wilayah untuk mesin virtual di Azure

Prasyarat

Membuat dua hub IoT regional

Di bagian ini, Anda akan membuat grup sumber daya Azure, dan dua sumber daya hub IoT regional baru. Satu hub IoT akan untuk wilayah US Barat 2 dan yang lainnya untuk wilayah US Timur.

Penting

Disarankan agar Anda menggunakan grup sumber daya yang sama untuk semua sumber daya yang dibuat dalam tutorial ini. Ini akan mempermudah pembersihan setelah Anda selesai.

  1. Di Azure Cloud Shell, buat grup sumber daya dengan perintah az group create berikut:

    az group create --name contoso-us-resource-group --location eastus
    
  2. Buat hub IoT di lokasi eastus, dan tambahkan ke grup sumber daya yang Anda buat dengan perintah az iot hub create berikut (ganti {unique-hub-name} dengan nama unik Anda sendiri):

    az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1
    

    Perintah ini mungkin perlu waktu beberapa menit untuk diselesaikan.

  3. Sekarang, buat hub IoT di lokasi westus2, dan tambahkan ke grup sumber daya yang Anda buat dengan perintah az iot hub create berikut (ganti {unique-hub-name} dengan nama unik Anda sendiri):

    az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1
    

    Perintah ini mungkin memerlukan waktu beberapa menit untuk diselesaikan.

Membuat pendaftaran untuk latensi geografis

Di bagian ini, Anda akan membuat grup pendaftaran baru untuk perangkat Anda.

Untuk kesederhanaan, tutorial ini menggunakan pengesahan kunci konten dengan pendaftaran. Untuk solusi yang lebih aman, sebaiknya gunakan pengesahan sertifikat X.509 dengan rantai kepercayaan.

  1. Masuk ke portal Microsoft Azure dan navigasikan ke instans Device Provisioning Service.

  2. Pilih Kelola pendaftaran dari bagian Pengaturan pada menu navigasi.

  3. Pilih Tambahkan grup pendaftaran.

  4. Pada tab Pendaftaran + provisi dari halaman Tambahkan grup pendaftaran , berikan informasi berikut untuk mengonfigurasi detail grup pendaftaran:

    Bidang Deskripsi
    Pengesahan Pilih Kunci konten sebagai mekanisme Pengesahan.
    Pengaturan kunci konten Centang kotak Buat kunci konten secara otomatis .
    Nama grup Beri nama grup Anda contoso-us-devices, atau berikan nama grup Anda sendiri. Nama grup pendaftaran adalah string yang tidak peka huruf besar/kecil (panjangnya hingga 128 karakter) dari karakter alfanumerik ditambah karakter khusus: '-', , '.', '_'':'. Karakter terakhir harus alfanumerik atau tanda hubung ('-').
  5. Pilih Berikutnya: Hub IoT.

  6. Gunakan langkah-langkah berikut untuk menambahkan dua hub IoT Anda ke grup pendaftaran:

    1. Pada tab Hub IoT di halaman Tambahkan grup pendaftaran , pilih Tambahkan tautan ke hub IoT di bagian Hub IoT Target .

    2. Pada halaman Tambahkan tautan ke hub IoT , pilih hub IoT yang Anda buat di wilayah eastus dan tetapkan akses iothubowner .

    3. Pilih Simpan.

    4. Pilih Tambahkan tautan ke hub IoT lagi, dan ikuti langkah yang sama untuk menambahkan hub IoT yang Anda buat di wilayah westus2 .

    5. Di menu dropdown Hub IoT target , pilih kedua hub IoT.

  7. Untuk Kebijakan alokasi, pilih Latensi terendah.

  8. Pilih Tinjau + buat.

  9. Pada tab Tinjau + buat , verifikasi semua nilai Anda lalu pilih Buat.

  10. Setelah grup pendaftaran Anda dibuat, pilih namanya contoso-us-devices dari daftar grup pendaftaran.

  11. Salin Kunci primer. Kunci ini akan digunakan nanti untuk membuat kunci perangkat unik untuk kedua perangkat yang disimulasikan.

Membuat komputer virtual Linux regional

Di bagian ini, Anda membuat dua komputer virtual Linux (VM) regional, satu di US Barat 2 dan satu di US Timur 2. VM ini menjalankan sampel simulasi perangkat dari setiap wilayah untuk menunjukkan provisi perangkat untuk perangkat dari kedua wilayah.

Untuk mempermudah pembersihan, tambahkan VM ini ke grup sumber daya yang sama yang berisi hub IoT yang dibuat, contoso-us-resource-group.

  1. Di Azure Cloud Shell, jalankan perintah berikut untuk membuat mesin virtual wilayah US Timur setelah membuat perubahan parameter berikut dalam perintah:

    --name: Masukkan nama unik untuk perangkat regional US Timur komputer virtual Anda.

    --admin-username: Gunakan nama pengguna admin Anda sendiri.

    --admin-password: Gunakan kata sandi admin Anda sendiri.

    az vm create \
    --resource-group contoso-us-resource-group \
    --name ContosoSimDeviceEast \
    --location eastus \
    --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \
    --admin-username contosoadmin \
    --admin-password myContosoPassword2018 \
    --authentication-type password
    --public-ip-sku Standard
    

    Perintah ini mungkin memerlukan beberapa menit untuk selesai.

  2. Setelah perintah selesai, salin nilai publicIpAddress untuk mesin virtual wilayah US Timur Anda.

  3. Di Azure Cloud Shell, jalankan perintah untuk membuat mesin virtual wilayah US Barat 2 setelah membuat perubahan parameter berikut pada perintah:

    --name: Masukkan nama unik untuk mesin virtual perangkat regional US Barat 2 Anda.

    --admin-username: Gunakan nama pengguna admin Anda sendiri.

    --admin-password: Gunakan kata sandi admin Anda sendiri.

    az vm create \
    --resource-group contoso-us-resource-group \
    --name ContosoSimDeviceWest2 \
    --location westus2 \
    --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \
    --admin-username contosoadmin \
    --admin-password myContosoPassword2018 \
    --authentication-type password
    --public-ip-sku Standard
    

    Perintah ini mungkin memerlukan beberapa menit untuk selesai.

  4. Setelah perintah selesai, salin nilai publicIpAddress untuk mesin virtual wilayah US Barat 2 Anda.

  5. Buka dua shell baris perintah.

  6. Sambungkan ke salah satu komputer virtual regional di setiap shell menggunakan SSH.

    Teruskan nama pengguna admin Anda dan alamat IP publik yang Anda salin sebagai parameter ke SSH. Masukkan kata sandi ketika diminta.

    ssh contosoadmin@1.2.3.4
    
    contosoadmin@ContosoSimDeviceEast:~$
    
    ssh contosoadmin@5.6.7.8
    
    contosoadmin@ContosoSimDeviceWest:~$
    

Menyiapkan lingkungan pengembangan Azure IoT C SDK

Di bagian ini, Anda akan mengkloning Azure IoT C SDK di setiap mesin virtual. SDK berisi sampel yang mensimulasikan provisi perangkat dari setiap wilayah.

Untuk setiap mesin virtual:

  1. Pasang CMake, g++ , gcc, dan Git menggunakan perintah berikut:

    sudo apt-get update
    sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
    
  2. Temukan dan salin nama tag untuk rilis terbaru SDK.

  3. Kloning Azure IoT Device SDK untuk C pada kedua VM. Gunakan tag yang Anda temukan di langkah sebelumnya sebagai nilai untuk -b parameter , misalnya: lts_01_2023.

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Penyelesaian operasi ini membutuhkan waktu beberapa menit.

  4. Buat folder cmake baru di dalam repositori dan ubah ke folder itu.

    mkdir ~/azure-iot-sdk-c/cmake
    cd ~/azure-iot-sdk-c/cmake
    
  5. Jalankan perintah berikut, yang membuat versi SDK khusus untuk platform klien pengembangan Anda:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    
  6. Setelah build berhasil, beberapa garis output terakhir akan terlihat mirip dengan output berikut:

    -- IoT Client SDK Version = 1.7.0
    -- Provisioning SDK Version = 1.7.0
    -- Looking for include file stdint.h
    -- Looking for include file stdint.h - found
    -- Looking for include file stdbool.h
    -- Looking for include file stdbool.h - found
    -- target architecture: x86_64
    -- Performing Test CXX_FLAG_CXX11
    -- Performing Test CXX_FLAG_CXX11 - Success
    -- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.1.1")
    -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so (found version "7.58.0")
    -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so
    -- target architecture: x86_64
    -- iothub architecture: x86_64
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/contosoadmin/azure-iot-sdk-c/azure-iot-sdk-c
    

Mendapatkan kunci perangkat unik

Saat menggunakan pengesahan kunci konten dengan pendaftaran grup, Anda tidak menggunakan kunci grup pendaftaran secara langsung. Sebagai gantinya, Anda mendapatkan kunci unik dari kunci grup pendaftaran untuk setiap perangkat.

Di bagian tutorial ini, Anda akan membuat kunci perangkat dari kunci master grup untuk menghitung HMAC-SHA256 dari ID pendaftaran unik untuk perangkat. Hasilnya kemudian akan diubah menjadi format Base64.

Penting

Jangan sertakan kunci master grup Anda dalam kode perangkat Anda.

Untuk perangkateastus dan westus2:

  1. Hasilkan kunci unik Anda menggunakan openssl. Anda akan menggunakan skrip shell Bash berikut (ganti {primary-key} dengan Kunci Primer grup pendaftaran yang Anda salin sebelumnya dan ganti {contoso-simdevice} dengan ID pendaftaran unik Anda sendiri untuk setiap perangkat. ID pendaftaran adalah string yang tidak peka huruf besar/kecil (panjangnya hingga 128 karakter) dari karakter alfanumerik ditambah karakter khusus: '-', , '.''_', ':'. Karakter terakhir harus alfanumerik atau tanda hubung ('-').

    KEY={primary-key}
    REG_ID={contoso-simdevice}
    
    keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000)
    echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64
    
  2. Skrip akan menampilkan sesuatu seperti kunci berikut:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. Sekarang setiap perangkat memiliki kunci perangkat turunannya sendiri dan ID pendaftaran unik untuk melakukan pengesahan kunci konten dengan grup pendaftaran selama proses provisi.

Menyimulasikan perangkat dari setiap wilayah

Di bagian ini, Anda akan memperbarui sampel provisi di Azure IoT C SDK untuk kedua mesin virtual regional.

Kode sampel ini menyimulasikan urutan boot perangkat yang mengirimkan permintaan provisi ke instans Device Provisioning Service Anda. Urutan boot menyebabkan perangkat dikenali dan ditetapkan ke hub IoT yang paling dekat berdasarkan latensi.

  1. Di portal Microsoft Azure, pilih tab Gambaran Umum untuk Device Provisioning Service Anda dan catat nilai ID Scope.

    Ekstrak informasi titik akhir Device Provisioning Service dari bilah portal.

  2. Pada kedua VMS, buka ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c untuk pengeditan.

    vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
    
  3. Pada kedua mesin virtual, temukan konstanta id_scope, dan ganti nilainya dengan nilai Cakupan ID yang telah Anda salin sebelumnya.

    static const char* id_scope = "0ne00002193";
    
  4. Pada kedua mesin virtual, temukan definisi untuk fungsi main() dalam file yang sama. Pastikan variabel hsm_type telah diatur ke SECURE_DEVICE_TYPE_SYMMETRIC_KEYseperti yang ditunjukkan di bawah ini untuk mencocokkan metode pengesahan grup pendaftaran.

    Simpan perubahan Anda ke file di kedua komputer virtual.

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  5. Pada kedua VM, temukan panggilan ke prov_dev_set_symmetric_key_info() di prov_dev_client_sample.c yang dikomentari.

    // Set the symmetric key if using they auth type
    //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
    

    Batalkan komentar pada panggilan fungsi, dan ganti nilai tempat penampung (seperti kurung sudut) dengan ID pendaftaran unik dan kunci perangkat turunan untuk setiap perangkat yang Anda peroleh di bagian sebelumnya. Kunci yang ditunjukkan di bawah ini adalah contoh. Gunakan kunci yang Anda buat sebelumnya.

    US Timur:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");
    

    US Barat:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
    
  6. Pada kedua mesin virtual, simpan file.

  7. Pada kedua komputer virtual, masuk ke folder sampel yang ditunjukkan di bawah ini dan bangun sampel.

    cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/
    cmake --build . --target prov_dev_client_sample --config Debug
    
  8. Setelah build berhasil, jalankan prov_dev_client_sample.exe pada kedua VM untuk mensimulasikan perangkat dari setiap wilayah. Perhatikan bahwa setiap perangkat dialokasikan ke hub IoT yang paling dekat dengan wilayah perangkat yang disimulasikan.

    Jalankan simulasi:

    ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample
    

    Contoh output dari komputer virtual US Timur:

    contosoadmin@ContosoSimDeviceEast:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample
    Provisioning API Version: 1.2.9
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-east-hub.azure-devices.net, deviceId: contoso-simdevice-east
    Press enter key to exit:
    
    

    Contoh output dari komputer virtual US Barat:

    contosoadmin@ContosoSimDeviceWest:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample
    Provisioning API Version: 1.2.9
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-west-hub.azure-devices.net, deviceId: contoso-simdevice-west
    Press enter key to exit:
    

Membersihkan sumber daya

Jika Anda berencana untuk terus bekerja dengan sumber daya yang dibuat dalam tutorial ini, Anda dapat meninggalkannya. Jika tidak, gunakan langkah-langkah berikut untuk menghapus semua sumber daya yang dibuat oleh tutorial ini untuk menghindari biaya yang tidak perlu.

Langkah-langkah di sini mengasumsikan bahwa Anda membuat semua sumber daya dalam tutorial ini seperti yang diinstruksikan dalam grup sumber daya yang sama bernama contoso-us-resource-group.

Penting

Penghapusan grup sumber daya tidak dapat dipulihkan. Grup sumber daya dan semua sumber daya yang tercakup di dalamnya akan dihapus secara permanen. Pastikan Anda tidak menghapus grup atau sumber daya yang salah secara tidak sengaja. Jika Anda membuat Hub IoT di dalam grup sumber daya yang ada dan berisi sumber daya yang ingin Anda simpan, hanya hapus sumber daya Hub IoT itu sendiri dan tidak perlu menghapus grup sumber daya.

Untuk menghapus grup sumber daya menurut nama:

  1. Masuk ke portal Microsoft Azure.

  2. Pilih Grup sumber daya.

  3. Dalam kotak teks Filter menurut nama... , ketik nama grup sumber daya yang berisi sumber daya Anda, contoso-us-resource-group.

  4. Di sebelah kanan grup sumber daya Anda dalam daftar hasil, pilih ... lalu Hapus sumber daya.

  5. Anda akan diminta untuk mengonfirmasi penghapusan grup sumber daya. Ketik nama grup sumber daya Anda lagi untuk mengonfirmasi, lalu pilih Hapus. Setelah beberapa saat, grup sumber daya dan semua sumber daya di dalamnya akan dihapus.

Langkah berikutnya

Untuk mempelajari selengkapnya tentang kebijakan alokasi kustom, lihat