Freigeben über


Tutorial: Bereitstellen für Geolatenz

In diesem Tutorial wird gezeigt, wie mehrere simulierte Geräte mit symmetrischem Schlüssel mithilfe einer Zuweisungsrichtlinie einer Gruppe von IoT-Hubs sicher zugewiesen werden können. IoT Hub Device Provisioning Service (DPS) unterstützt verschiedene Zuordnungsszenarien durch seine integrierten Zuordnungsrichtlinien und seine Unterstützung für benutzerdefinierte Zuordnungsrichtlinien.

Die Bereitstellung für Geolocation/Geolatenz ist ein häufiges Zuordnungsszenario. Wenn ein Gerät zwischen Standorten verlagert wird, lässt sich die Netzwerklatenz verbessern, indem das Gerät auf dem IoT-Hub bereitgestellt wird, der dem jeweiligen Standort am nächsten liegt. In diesem Szenario wird eine Gruppe mit regionsübergreifenden IoT Hubs für Registrierungen ausgewählt. Für diese Registrierungen wird die integrierte Zuordnungsrichtlinie Niedrigste Latenz ausgewählt. Diese Richtlinie bewirkt, dass der Device Provisioning Service die Gerätelatenz auswertet und aus der Gruppe mit den IoT Hubs den nächstgelegenen IoT Hub ermittelt.

In diesem Tutorial wird anhand eines Beispiels für ein simuliertes Gerät aus dem Azure IoT C-SDK veranschaulicht, wie Geräte regionsübergreifend bereitgestellt werden können. In diesem Tutorial führen Sie die folgenden Schritte aus:

  • Verwenden Sie die Azure CLI, um zwei regionale IoT-Hubs zu erstellen (West US 2 und Ost US)
  • Erstellen Sie eine Registrierung, die Geräte basierend auf Geolocation (niedrigste Latenz) bereitstellt
  • Verwenden Sie die Azure CLI, um zwei regionale Linux-VMs zu erstellen, die als Geräte in denselben Regionen fungieren (West US 2 und Ost US)
  • Einrichten der Entwicklungsumgebung für das Azure IoT C SDK auf beiden Linux-VMs
  • Simulieren Sie die Geräte, und überprüfen Sie, ob sie auf dem IoT-Hub in der nächstgelegenen Region bereitgestellt werden.

Wichtig

Einige Regionen können von Zeit zu Zeit Einschränkungen für die Erstellung virtueller Computer erzwingen. Zum Zeitpunkt der Erstellung dieses Leitfadens erlaubten die Regionen westus2 und eastus die Erstellung von VMs. Wenn Sie in einer dieser Regionen keine VMs erstellen können, können Sie eine andere Region ausprobieren. Weitere Informationen über die Auswahl geografischer Azure-Regionen bei der Erstellung von VMs finden Sie unter Regionen für virtuelle Maschinen in Azure

Voraussetzungen

Erstellen von zwei regionalen IoT Hubs

In diesem Abschnitt erstellen Sie eine Azure-Ressourcengruppe und zwei neue regionale IoT-Hubressourcen. Ein IoT-Hub ist für die Region West US 2 und der andere für die Region Ost-USA .

Wichtig

Es wird empfohlen, für alle in diesem Lernprogramm erstellten Ressourcen dieselbe Ressourcengruppe zu verwenden. Die Verwendung derselben Ressourcengruppe erleichtert das Bereinigen nach Abschluss des Vorgangs.

  1. Erstellen Sie in der Azure Cloud Shell eine Ressourcengruppe mit dem folgenden Befehl az group create:

    az group create --name contoso-us-resource-group --location eastus
    
  2. Erstellen Sie einen IoT-Hub in der Region eastus und fügen Sie ihn der Ressourcengruppe hinzu, die Sie mit dem folgenden Befehl az iot hub create erstellt haben (ersetzen Sie dabei {unique-hub-name} durch Ihren eigenen eindeutigen Namen):

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

    Die Ausführung dieses Befehls kann einige Minuten dauern.

  3. Erstellen Sie nun einen IoT-Hub am Standort westus2 und fügen Sie ihn mit dem folgenden Befehl az iot hub create (ersetzen Sie {unique-hub-name} durch Ihren eigenen eindeutigen Namen) zu der von Ihnen erstellten Ressourcengruppe hinzu:

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

    Die Ausführung dieses Befehls kann einige Minuten dauern.

Erstellen einer Registrierung für Geolatenz

In diesem Abschnitt erstellen Sie eine neue Registrierungsgruppe für Ihre Geräte.

Aus Gründen der Einfachheit verwendet dieses Lernprogramm den symmetrischen Schlüsselnachweis mit der Registrierung. Für eine Lösung mit höherer Sicherheit empfiehlt sich die Verwendung eines X.509-Zertifikatnachweises mit einer Kette von Vertrauensstellungen.

  1. Melden Sie sich beim Azure-Portal an, und navigieren Sie zur Dienstinstanz für die Gerätebereitstellung.

  2. Wählen Sie im Navigationsmenü im Abschnitt Einstellungen die Option Registrierungen verwalten aus.

  3. Wählen Sie Registrierungsgruppe hinzufügen aus.

  4. Geben Sie auf der Registerkarte Registrierung + Bereitstellung der Seite Registrierungsgruppe hinzufügen die folgenden Informationen an, um die Details der Registrierungsgruppe zu konfigurieren:

    Feld BESCHREIBUNG
    Nachweis Wählen Sie Symmetrischer Schlüssel als Nachweismechanismus aus.
    Einstellungen für symmetrische Schlüssel Aktivieren Sie das Kontrollkästchen Symmetrische Schlüssel automatisch generieren.
    Gruppenname Nennen Sie Ihre Gruppe contoso-us-devices, oder geben Sie Ihren eigenen Gruppennamen an. Beim Namen der Registrierungsgruppe handelt es sich um eine Zeichenfolge (bis zu 128 Zeichen lang) alphanumerischer Zeichen ohne Beachtung der Groß-/Kleinschreibung plus diese Sonderzeichen: '-', '.', '_', ':'. Das letzte Zeichen muss alphanumerisch oder ein Bindestrich ('-') sein.
  5. Wählen Sie Weiter: IoT-Hubs aus.

  6. Führen Sie die folgenden Schritte aus, um Ihre beiden IoT-Hubs zur Registrierungsgruppe hinzuzufügen:

    1. Wählen Sie auf der Registerkarte IoT-Hubs der Seite Registrierungsgruppe hinzufügen im Abschnitt IoT-Hub-Ziel die Option Link zum IoT-Hub hinzufügen aus.

    2. Wählen Sie auf der Seite Link zum IoT-Hub hinzufügen den IoT-Hub aus, den Sie in der Region eastus erstellt haben, und weisen Sie ihm den iothubowner-Zugriff zu.

    3. Wählen Sie Speichern aus.

    4. Wählen Sie erneut Link zum IoT-Hub hinzufügen aus, und führen Sie die gleichen Schritte aus, um den IoT-Hub hinzuzufügen, den Sie in der Region westus2 erstellt haben.

    5. Wählen Sie im Dropdownmenü Ziel-IoT-Hubs beide IoT-Hubs aus.

  7. Wählen Sie für die Zuordnungsrichtlinie die Option Niedrigste Latenz aus.

  8. Klicken Sie auf Überprüfen + erstellen.

  9. Überprüfen Sie auf der Registerkarte Überprüfen und erstellen all Ihre Werte, und wählen Sie dann Erstellen aus.

  10. Nachdem Ihre Registrierungsgruppe erstellt wurde, wählen Sie in der Liste der Registrierungsgruppen den Namen contoso-us-devices aus.

  11. Kopieren Sie den Primärschlüssel. Dieser Schlüssel wird später verwendet, um eindeutige Geräteschlüssel für beide simulierte Geräte zu generieren.

Erstellen von regionalen Linux-VMs

In diesem Abschnitt erstellen Sie zwei regionale virtuelle Linux-Computer (VMs), einen in USA, Westen 2 und einen in USA, Osten 2. Auf diesen VMs wird ein Beispiel für eine Gerätesimulation aus jeder Region ausgeführt, um die Gerätebereitstellung für Geräte aus beiden Regionen zu veranschaulichen.

Fügen Sie diese VMs derselben Ressourcengruppe hinzu, in der die erstellten IoT-Hubs enthalten sind, contoso-us-resource-group, um die Bereinigung zu vereinfachen.

  1. Führen Sie in der Azure Cloud Shell den folgenden Befehl aus, um eine VM der Region East US zu erstellen, nachdem Sie die folgenden Parameteränderungen im Befehl vorgenommen haben:

    --name: Geben Sie einen eindeutigen Namen für den virtuellen Computer in der Region USA, Osten ein.

    --admin-username: Verwenden Sie Ihren eigenen Administratorbenutzernamen.

    --admin-password: Verwenden Sie Ihr eigenes Administratorkennwort.

    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
    

    Dieser Befehl dauert einige Minuten, bis er abgeschlossen ist.

  2. Nachdem der Befehl abgeschlossen ist, kopieren Sie den publicIpAddress-Wert für ihre VM der Region Ost-USA.

  3. Führen Sie in der Azure Cloud Shell den Befehl zum Erstellen einer VM der Region West US 2 aus, nachdem Sie die folgenden Parameteränderungen im Befehl vorgenommen haben:

    --name: Geben Sie einen eindeutigen Namen für Ihre regionale Geräte-VM West US 2 ein.

    --admin-username: Verwenden Sie Ihren eigenen Administratorbenutzernamen.

    --admin-password: Verwenden Sie Ihr eigenes Administratorkennwort.

    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
    

    Dieser Befehl dauert einige Minuten, bis er abgeschlossen ist.

  4. Nachdem der Befehl abgeschlossen ist, kopieren Sie den publicIpAddress-Wert für ihre VM der Region West US 2.

  5. Öffnen Sie zwei Befehlszeilenshells.

  6. Stellen Sie in jeder Shell eine Verbindung mit einem der regionalen virtuellen Computer her, indem Sie SSH verwenden.

    Übergeben Sie Ihren Admin-Benutzernamen und die öffentliche IP-Adresse, die Sie kopiert haben, als Parameter an SSH. Geben Sie das Administratorkennwort ein, wenn Sie dazu aufgefordert werden.

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

Vorbereiten der Azure IoT C SDK-Entwicklungsumgebung

In diesem Abschnitt klonen Sie das Azure IoT C SDK auf jedem virtuellen Computer. Das SDK enthält ein Beispiel, das eine Gerätebereitstellung aus jeder Region simuliert.

Für jede VM:

  1. Installieren Sie CMake, g++, gcc und Git mit den folgenden Befehlen:

    sudo apt-get update
    sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
    
  2. Suchen und kopieren Sie den Tag-Namen für die neueste Version des SDK.

  3. Klonen Sie das Azure IoT-Geräte-SDK für C auf beiden VMs. Verwenden Sie das im vorherigen Schritt gefundene Tag als Wert für den Parameter -b, z. B. lts_03_2025.

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

    Sie sollten damit rechnen, dass die Ausführung dieses Vorgangs mehrere Minuten in Anspruch nimmt.

  4. Erstellen Sie einen neuen Ordner cmake innerhalb des Repositorys und wechseln Sie in diesen Ordner.

    mkdir ~/azure-iot-sdk-c/cmake
    cd ~/azure-iot-sdk-c/cmake
    
  5. Führen Sie den folgenden Befehl aus, der eine für Ihre Entwicklungs-Client-Plattform spezifische Version des SDK erstellt:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    
  6. Nach erfolgreicher Erstellung ähneln die letzten Ausgabezeilen der folgenden Ausgabe:

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

Ableiten eindeutiger Geräteschlüssel

Bei Verwendung des Nachweises des symmetrischen Schlüssels mit Gruppenregistrierungen verwenden Sie die Registrierungsgruppenschlüssel nicht direkt. Stattdessen leiten Sie für jedes Gerät einen eindeutigen Schlüssel aus dem Gruppenschlüssel für die Registrierung ab.

In diesem Teil des Lernprogramms generieren Sie einen Geräteschlüssel aus dem Gruppenmasterschlüssel, um eine HMAC-SHA256 der eindeutigen Registrierungs-ID für das Gerät zu berechnen. Das Ergebnis wird dann in das Base64-Format konvertiert.

Wichtig

Fügen Sie Ihren Gruppenhauptschlüssel nicht in Ihren Gerätecode ein.

Für Geräte sowohl inUSA, Osten als auch in USA, Westen 2:

  1. Erzeugen Sie Ihren eindeutigen Schlüssel mit openssl. Sie verwenden das folgende Bash-Shellskript (ersetzen Sie {primary-key} durch den Primärschlüssel der Registrierungsgruppe, den Sie zuvor kopiert haben, und ersetzen Sie sie {contoso-simdevice}durch Ihre eigene eindeutige Registrierungs-ID für jedes Gerät. Bei der Registrierungs-ID handelt es sich um eine Zeichenfolge (bis zu 128 Zeichen lang) alphanumerischer Zeichen ohne Beachtung der Groß-/Kleinschreibung plus diese Sonderzeichen: '-', '.', '_', ':'. Das letzte Zeichen muss alphanumerisch oder ein Bindestrich ('-') sein.

    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. Das Skript gibt etwas wie den folgenden Schlüssel aus:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. Jetzt hat jedes Gerät seinen eigenen abgeleiteten Geräteschlüssel und eine eindeutige Registrierungs-ID, sodass es während des Bereitstellungsprozesses einen Nachweis des symmetrischen Schlüssels mit der Registrierungsgruppe durchführen kann.

Simulieren der Geräte aus den einzelnen Regionen

In diesem Abschnitt aktualisieren Sie ein Bereitstellungsbeispiel im Azure IoT C SDK für beide regionalen VMs.

Der Beispielcode simuliert eine Gerätestartsequenz, über die die Bereitstellungsanforderung an die Instanz des Device Provisioning-Diensts gesendet wird. Die Startsequenz bewirkt, dass das Gerät erkannt und dem IoT-Hub zugewiesen wird, der basierend auf der Latenz am nächsten ist.

  1. Navigieren Sie im Azure-Portal zur Registerkarte Übersicht für Ihre Device Provisioning Service-Instanz, und notieren Sie sich den Wert unter ID-Bereich.

    Extrahieren Sie Die Endpunktinformationen des Gerätebereitstellungsdiensts aus dem Azure-Portal.

  2. Öffnen Sie auf beiden VMs ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c zur Bearbeitung.

    vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
    
  3. Suchen Sie auf beiden VMs die Konstante id_scope, und ersetzen Sie den Wert durch den zuvor kopierten Wert ID Scope.

    static const char* id_scope = "0ne00002193";
    
  4. Suchen Sie auf beiden VMs die Definition für die Funktion main() in derselben Datei. Stellen Sie sicher, dass die hsm_type Variable auf SECURE_DEVICE_TYPE_SYMMETRIC_KEY gesetzt wird, wie im folgenden Codebeispiel gezeigt, sodass sie der Nachweismethode der Registrierungsgruppe entspricht.

    Speichern Sie Ihre Änderungen an den Dateien auf beiden VMs.

    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. Suchen Sie auf beiden VMs den Aufruf zum prov_dev_set_symmetric_key_info() in prov_dev_client_sample.c, der auskommentiert ist.

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

    Dekommentieren Sie die Funktionsaufrufe und ersetzen Sie die Platzhalterwerte (einschließlich der spitzen Klammern) durch die eindeutigen Registrierungs-IDs und abgeleiteten Geräteschlüssel für jedes Gerät, die Sie im vorherigen Abschnitt abgeleitet haben. Die in den folgenden Funktionsaufrufen gezeigten Tasten sind Beispiele. Verwenden Sie die zuvor erstellten Schlüssel.

    USA, Osten:

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

    USA, Westen:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
    
  6. Speichern Sie die Datei auf beiden VMs.

  7. Navigieren Sie auf beiden virtuellen Computern zu dem Beispielordner, der im folgenden Bash-Skript angezeigt wird, und erstellen Sie das Beispiel.

    cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/
    cmake --build . --target prov_dev_client_sample --config Debug
    
  8. Führen Sie nach erfolgreicher Erstellung prov_dev_client_sample.exe auf beiden VMs aus, um ein Gerät aus jeder Region zu simulieren. Beachten Sie, dass jedes Gerät dem IoT-Hub zugeordnet wird, der der Region des simulierten Geräts am nächsten liegt.

    Führen Sie die Simulation aus:

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

    Beispielausgabe der VM „USA, Osten“:

    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:
    
    

    Beispielausgabe der VM „USA, Westen“:

    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:
    

Bereinigen von Ressourcen

Wenn Sie die in diesem Tutorial erstellten Ressourcen weiterverwenden möchten, können Sie sie beibehalten. Führen Sie andernfalls die folgenden Schritte aus, um alle durch dieses Tutorial erstellten Ressourcen zu löschen und so unnötige Gebühren zu vermeiden.

Diese Schritte gehen davon aus, dass Sie alle Ressourcen in diesem Tutorial wie beschrieben in derselben Ressourcengruppe mit dem Namen contoso-us-resource-group erstellt haben.

Wichtig

Das Löschen einer Ressourcengruppe kann nicht rückgängig gemacht werden. Die Ressourcengruppe und alle darin enthaltenen Ressourcen werden unwiderruflich gelöscht. Achten Sie daher darauf, dass Sie nicht versehentlich die falsche Ressourcengruppe oder die falschen Ressourcen löschen. Wenn Sie die IoT Hub-Ressource in einer bereits vorhandenen Ressourcengruppe erstellt haben, die Ressourcen enthält, die Sie behalten möchten, löschen Sie nicht die Ressourcengruppe, sondern nur die IoT Hub-Ressource.

Löschen Sie die Ressourcengruppen wie folgt nach Namen:

  1. Melden Sie sich beim Azure-Portal an.

  2. Klicken Sie auf Ressourcengruppen.

  3. Geben Sie im Textfeld Nach Name filtern... den Namen der Ressourcengruppe ein, die Ihre Ressourcen enthält: contoso-us-resource-group.

  4. Wählen Sie in der Ergebnisliste rechts neben Ihrer Ressourcengruppe ... und dann Ressourcengruppe löschen aus.

  5. Sie werden aufgefordert, das Löschen der Ressourcengruppe zu bestätigen. Geben Sie den Namen Ihrer Ressourcengruppe zur Bestätigung erneut ein, und wählen Sie Löschen aus. Daraufhin werden die Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht.

Nächste Schritte

Weitere Informationen zu benutzerdefinierten Zuweisungsrichtlinien finden Sie unter