Öğretici: Coğrafi gecikme süresi sağlama

Bu öğreticide, bir ayırma ilkesi kullanarak ioT Hubs grubuna birden çok sanal simetrik anahtar cihazını güvenli bir şekilde sağlama işlemi gösterilmektedir. IoT Hub Cihaz Sağlama Hizmeti (DPS), yerleşik ayırma ilkeleri ve özel ayırma ilkeleri desteği aracılığıyla çeşitli ayırma senaryolarını destekler.

Coğrafi Konum/Coğrafi gecikme süresi için sağlama yaygın bir ayırma senaryosudur. Bir cihaz konumlar arasında hareket ettikçe, cihazın her konuma en yakın IoT hub'ına sağlanmasıyla ağ gecikme süresi iyileştirilir. Bu senaryoda, bölgelere yayılan bir grup IoT hub'ı kayıtlar için seçilir. Bu kayıtlar için yerleşik En düşük gecikme süresi ayırma ilkesi seçilir. Bu ilke, Cihaz Sağlama Hizmeti'nin cihaz gecikme süresini değerlendirmesine ve IoT hub'ları grubundan dolaba ait IoT hub'ını belirlemesine neden olur.

Bu öğreticide, bölgeler arasında cihaz sağlamayı göstermek için Azure IoT C SDK'sından sanal bir cihaz örneği kullanılır. Bu öğreticide aşağıdaki adımları gerçekleştireceksiniz:

  • İki bölgesel IoT hub'ı (Batı ABD 2 ve Doğu ABD) oluşturmak için Azure CLI'yi kullanma
  • Cihazları coğrafi konum temelinde sağlayan bir kayıt oluşturma (en düşük gecikme süresi)
  • Aynı bölgelerde (Batı ABD 2 ve Doğu ABD) cihaz olarak görev yapmak üzere iki bölgesel Linux VM oluşturmak için Azure CLI'yi kullanın
  • Her iki Linux VM'de de Azure IoT C SDK'sı için geliştirme ortamını ayarlama
  • Cihazların simülasyonunu yapın ve en yakın bölgedeki IoT hub'ına sağlandığını doğrulayın.

Önemli

Bazı bölgeler zaman zaman Sanal Makineler oluşturulmasına yönelik kısıtlamaları zorunlu kılabilir. Bu kılavuzun yazılması sırasında westus2 ve eastus bölgeleri VM'lerin oluşturulmasına izin verdi. Bu bölgelerden birinde oluşturamıyorsanız farklı bir bölge deneyebilirsiniz. VM oluştururken Azure coğrafi bölgelerini seçme hakkında daha fazla bilgi edinmek için bkz . Azure'da sanal makineler için bölgeler

Ön koşullar

İki bölgesel IoT hub'ı oluşturma

Bu bölümde bir Azure kaynak grubu ve iki yeni bölgesel IoT hub kaynağı oluşturacaksınız. IoT hub'larından biri Batı ABD 2 bölgesi, diğeri ise Doğu ABD bölgesi içindir.

Önemli

Bu öğreticide oluşturulan tüm kaynaklar için aynı kaynak grubunu kullanmanız önerilir. Bu işlem, işiniz bittikten sonra temizlemeyi kolaylaştırır.

  1. Azure Cloud Shell aşağıdaki az group create komutuyla bir kaynak grubu oluşturun:

    az group create --name contoso-us-resource-group --location eastus
    
  2. eastus konumunda bir IoT hub oluşturun ve aşağıdaki az iot hub create komutuyla oluşturduğunuz kaynak grubuna ekleyin (değerini kendi benzersiz adınızla değiştirin{unique-hub-name}):

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

    Bu komutun tamamlanması birkaç dakika sürebilir.

  3. Şimdi westus2 konumunda bir IoT hub oluşturun ve aşağıdaki az iot hub create komutuyla oluşturduğunuz kaynak grubuna ekleyin (kendi benzersiz adınızla değiştirin {unique-hub-name} ):

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

    Bu komutun tamamlanması birkaç dakika sürebilir.

Coğrafi gecikme süresi için kayıt oluşturma

Bu bölümde, cihazlarınız için yeni bir kayıt grubu oluşturacaksınız.

Kolaylık olması için, bu öğreticide kayıtla simetrik anahtar kanıtlaması kullanılır. Daha güvenli bir çözüm için X.509 sertifika kanıtlamasını güven zinciriyle kullanmayı göz önünde bulundurun.

  1. Azure portal oturum açın ve Cihaz Sağlama Hizmeti örneğine gidin.

  2. Gezinti menüsünün Ayarlar bölümünde Kayıtları yönet'i seçin.

  3. Kayıt grubu ekle'yi seçin.

  4. Kayıt grubu ekle sayfasının Kayıt + sağlama sekmesinde, kayıt grubu ayrıntılarını yapılandırmak için aşağıdaki bilgileri sağlayın:

    Alan Açıklama
    Kanıtlama Kanıtlama mekanizması olarak Simetrik anahtar'ı seçin.
    Simetrik anahtar ayarları Simetrik anahtarları otomatik olarak oluştur kutusunu işaretleyin.
    Grup adı Grubunuzu contoso-us-devices olarak adlandırabilirsiniz veya kendi grup adınızı girin. Kayıt grubu adı, alfasayısal karakterlerden oluşan büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğunda) ve özel karakterler: '-', '.', '_', ':'. Son karakter alfasayısal veya tire ('-') olmalıdır.
  5. İleri: IoT hub'ları'ı seçin.

  6. İki IoT hub'ınızı kayıt grubuna eklemek için aşağıdaki adımları kullanın:

    1. Kayıt grubu ekle sayfasının IoT hub'ları sekmesinde Hedef IoT hub'ları bölümünde IoThub'ına bağlantı ekle'yi seçin.

    2. IoT hub'ına bağlantı ekle sayfasında eastus bölgesinde oluşturduğunuz IoT hub'ını seçin ve iothubowner erişimi atayın.

    3. Kaydet’i seçin.

    4. IoT hub'ına bağlantı ekle'yi yeniden seçin ve westus2 bölgesinde oluşturduğunuz IoT hub'ını eklemek için aynı adımları izleyin.

    5. Hedef IoT hub'ları açılan menüsünde her iki IoT hub'ını da seçin.

  7. Ayırma ilkesi için En düşük gecikme süresi'ni seçin.

  8. Gözden geçir ve oluştur’u seçin.

  9. Gözden geçir + oluştur sekmesinde tüm değerlerinizi doğrulayın ve oluştur'u seçin.

  10. Kayıt grubunuz oluşturulduktan sonra kayıt grupları listesinden contoso-us-devices adını seçin.

  11. Birincil anahtarı kopyalayın. Bu anahtar daha sonra her iki sanal cihaz için de benzersiz cihaz anahtarları oluşturmak için kullanılacaktır.

Bölgesel Linux VM'leri oluşturma

Bu bölümde biri Batı ABD 2 ve diğeri Doğu ABD 2'de olan iki bölgesel Linux sanal makinesi (VM) oluşturacaksınız. Bu VM'ler, her iki bölgeden cihazlar için cihaz sağlamayı göstermek üzere her bölgeden bir cihaz benzetimi örneği çalıştırır.

Temizlemeyi kolaylaştırmak için bu VM'leri oluşturulan IoT hub'larını ( contoso-us-resource-group) içeren aynı kaynak grubuna ekleyin.

  1. Azure Cloud Shell aşağıdaki komutu çalıştırarak komutta aşağıdaki parametre değişikliklerini yaptıktan sonra Doğu ABD bölgesi VM'sini oluşturun:

    --name: Doğu ABD bölgesel cihaz VM'niz için benzersiz bir ad girin.

    --admin-username: Kendi yönetici kullanıcı adınızı kullanın.

    --admin-password: Kendi yönetici parolanızı kullanın.

    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
    

    Bu komutun tamamlanması birkaç dakika sürecektir.

  2. Komut tamamlandıktan sonra Doğu ABD bölgesi VM'nizin publicIpAddress değerini kopyalayın.

  3. Azure Cloud Shell aşağıdaki parametre değişikliklerini yaptıktan sonra komutunu çalıştırarak Batı ABD 2 bölgesi VM'sini oluşturun:

    --name: Batı ABD 2 bölgesel cihaz VM'niz için benzersiz bir ad girin.

    --admin-username: Kendi yönetici kullanıcı adınızı kullanın.

    --admin-password: Kendi yönetici parolanızı kullanın.

    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
    

    Bu komutun tamamlanması birkaç dakika sürecektir.

  4. Komut tamamlandıktan sonra Batı ABD 2 bölgesi VM'nizin publicIpAddress değerini kopyalayın.

  5. İki komut satırı kabuğu açın.

  6. SSH kullanarak her kabuktaki bölgesel VM'lerden birine bağlanın.

    Yönetici kullanıcı adınızı ve parametre olarak kopyaladığınız genel IP adresini SSH'ye geçirin. İstendiğinde yönetici parolasını girin.

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

Azure IoT C SDK geliştirme ortamını hazırlama

Bu bölümde, her sanal makinede Azure IoT C SDK'sını kopyalayacaksınız. SDK, her bölgeden cihaz sağlama benzetimini gösteren bir örnek içerir.

Her VM için:

  1. Aşağıdaki komutları kullanarak CMake, g++, gcc ve Git'i yükleyin:

    sudo apt-get update
    sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
    
  2. SDK'nın en son sürümünün etiket adını bulun ve kopyalayın.

  3. Her iki VM'de de C için Azure IoT Cihaz SDK'sını kopyalayın. Parametrenin değeri -b olarak önceki adımda bulduğunuz etiketi kullanın, örneğin: 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
    

    Bu işlemin tamamlanması için birkaç dakika beklemeniz gerekebilir.

  4. Depo içinde yeni bir cmake klasörü oluşturun ve bu klasöre geçin.

    mkdir ~/azure-iot-sdk-c/cmake
    cd ~/azure-iot-sdk-c/cmake
    
  5. Sdk'nın geliştirme istemci platformunuza özgü bir sürümünü oluşturan aşağıdaki komutu çalıştırın:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    
  6. Derleme başarılı olduktan sonra, son birkaç çıkış satırı aşağıdaki çıkışa benzer olacaktır:

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

Benzersiz cihaz anahtarlarını türet

Grup kayıtlarında simetrik anahtar kanıtlama kullanırken kayıt grubu anahtarlarını doğrudan kullanmazsınız. Bunun yerine, her cihaz için kayıt grubu anahtarından benzersiz bir anahtar türetebilirsiniz.

Öğreticinin bu bölümünde, cihazın benzersiz kayıt kimliğinin HMAC-SHA256 değerini hesaplamak için grup ana anahtarından bir cihaz anahtarı oluşturacaksınız. Sonuç daha sonra Base64 biçimine dönüştürülür.

Önemli

Cihaz koduna grup ana anahtarınızı eklemeyin.

Hem eastushem dewestus2 cihazları için:

  1. openssl kullanarak benzersiz anahtarınızı oluşturun. Aşağıdaki Bash kabuk betiğini kullanacaksınız (değerini {primary-key} daha önce kopyaladığınız kayıt grubunun Birincil Anahtarı ile değiştirin ve her cihaz için kendi benzersiz kayıt kimliğinizle değiştirin {contoso-simdevice}. Kayıt kimliği, alfasayısal karakterlerden oluşan büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğunda) ve özel karakterlerdir: '-', '.', '_', . ':' Son karakter alfasayısal veya tire ('-') olmalıdır.

    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. Betik aşağıdaki anahtara benzer bir çıkış oluşturur:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. Artık her cihazın, sağlama işlemi sırasında kayıt grubuyla simetrik anahtar kanıtlaması gerçekleştirmek için kendi türetilmiş cihaz anahtarı ve benzersiz kayıt kimliği vardır.

Her bölgeden cihazların benzetimini yapın

Bu bölümde, her iki bölgesel VM için de Azure IoT C SDK'sında bir sağlama örneğini güncelleştireceksiniz.

Örnek kod, sağlama isteğini Cihaz Sağlama Hizmeti örneğine gönderen bir cihaz önyükleme dizisinin simülasyonunu oluşturur. Önyükleme sırası, cihazın tanınmasına ve gecikme süresine göre en yakın IoT hub'ına atanmasına neden olur.

  1. Azure portal, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin ve Kimlik Kapsamı değerini not edin.

    Portal dikey penceresinden Cihaz Sağlama Hizmeti uç noktası bilgilerini ayıklayın.

  2. Her iki VM'de de düzenleme için ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c dosyasını açın.

    vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
    
  3. Her iki VM'de de sabiti id_scope bulun ve değerini daha önce kopyaladığınız Kimlik Kapsamı değerinizle değiştirin.

    static const char* id_scope = "0ne00002193";
    
  4. Her iki VM'de de işlevin main() tanımını aynı dosyada bulun. Değişkenin hsm_type aşağıda gösterildiği gibi kayıt grubu kanıtlama yöntemiyle eşleşecek şekilde ayarlandığından SECURE_DEVICE_TYPE_SYMMETRIC_KEY emin olun.

    Her iki VM'de de dosyalarda yaptığınız değişiklikleri kaydedin.

    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. Her iki VM'de de açıklama satırı yapılan prov_dev_client_sample.c'de çağrısı prov_dev_set_symmetric_key_info() bulun.

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

    İşlev çağrılarının açıklamasını kaldırın ve yer tutucu değerlerini (açılı ayraçlar dahil) önceki bölümde türetdiğiniz her cihaz için benzersiz kayıt kimlikleri ve türetilmiş cihaz anahtarlarıyla değiştirin. Aşağıda gösterilen anahtarlar örnektir. Daha önce oluşturduğunuz anahtarları kullanın.

    Doğu ABD:

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

    Batı ABD:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
    
  6. Her iki VM'de de dosyayı kaydedin.

  7. Her iki VM'de de aşağıda gösterilen örnek klasöre gidin ve örneği derleyin.

    cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/
    cmake --build . --target prov_dev_client_sample --config Debug
    
  8. Derleme başarılı olduktan sonra, her bölgeden bir cihazın benzetimini yapmak için her iki VM'de de prov_dev_client_sample.exe çalıştırın. Her cihazın simülasyon cihazının bölgesine en yakın IoT hub'ına ayrıldığına dikkat edin.

    Simülasyonu çalıştırın:

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

    Doğu ABD VM'sinden örnek çıktı:

    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:
    
    

    Batı ABD VM'sinden örnek çıktı:

    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:
    

Kaynakları temizleme

Bu öğreticide oluşturulan kaynaklarla çalışmaya devam etmek istiyorsanız, bunları bırakabilirsiniz. Aksi takdirde, gereksiz ücretlerden kaçınmak için bu öğretici tarafından oluşturulan tüm kaynakları silmek için aşağıdaki adımları kullanın.

Buradaki adımlarda, bu öğreticideki tüm kaynakları contoso-us-resource-group adlı aynı kaynak grubunda açıklandığı gibi oluşturduğunuz varsayılır.

Önemli

Silinen kaynak grupları geri alınamaz. Kaynak grubu ve içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. IoT Hub'ı tutmak istediğiniz kaynakların bulunduğu mevcut bir kaynak grubunda oluşturduysanız kaynak grubunu silmek yerine IoT Hub kaynağını silin.

Kaynak grubunu ada göre silmek için:

  1. Azure Portal’ında oturum açın.

  2. Kaynak grupları’nı seçin.

  3. Ada göre filtrele... metin kutusuna, kaynaklarınızı içeren contoso-us-resource-group kaynak grubunun adını yazın.

  4. Sonuç listesinde kaynak grubunuzun sağ tarafında ... ve sonra Kaynak grubunu sil'e tıklayın.

  5. Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adını yeniden yazın ve sil'i seçin. Birkaç dakika sonra kaynak grubu ve içerdiği kaynakların tümü silinir.

Sonraki adımlar

Özel ayırma ilkeleri hakkında daha fazla bilgi edinmek için bkz.