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 Beschränkungen für die Erstellung von virtuellen Maschinen auferlegen. 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
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Führen Sie die Schritte im Artikel Einrichten des IoT Hub Device Provisioning Service im Azure-Portal aus.
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
Erstellen von zwei regionalen IoT Hubs
In diesem Abschnitt werden Sie eine Azure-Ressourcengruppe und zwei neue regionale IoT-Hub-Ressourcen erstellen. Ein IoT-Hub wird für die Region West US 2 und der andere für die Region Ost US sein.
Wichtig
Es wird empfohlen, für alle in diesem Tutorial erstellten Ressourcen dieselbe Ressourcengruppe zu verwenden. Dies erleichtert das Bereinigen, nachdem Sie die Schritte in diesem Tutorial ausgeführt haben.
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
Erstellen Sie einen IoT-Hub am Standort eastus und fügen Sie ihn der Ressourcengruppe hinzu, die Sie mit dem folgenden Befehl az iot hub create (ersetzen Sie
{unique-hub-name}
durch Ihren eigenen eindeutigen Namen) erstellt haben: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 in Anspruch nehmen.
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 in Anspruch nehmen.
Erstellen einer Registrierung für Geolatenz
In diesem Abschnitt erstellen Sie eine neue Registrierungsgruppe für Ihre Geräte.
Der Einfachheit halber wird in diesem Tutorial ein Nachweis des symmetrischen Schlüssels bei der Registrierung verwendet. Für eine Lösung mit höherer Sicherheit empfiehlt sich die Verwendung eines X.509-Zertifikatnachweises mit einer Kette von Vertrauensstellungen.
Melden Sie sich beim Azure-Portal an, und navigieren Sie zur Dienstinstanz für die Gerätebereitstellung.
Wählen Sie im Navigationsmenü im Abschnitt Einstellungen die Option Registrierungen verwalten aus.
Wählen Sie Registrierungsgruppe hinzufügen aus.
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.Wählen Sie Weiter: IoT Hubs aus.
Führen Sie die folgenden Schritte aus, um Ihre beiden IoT-Hubs zur Registrierungsgruppe hinzuzufügen:
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.
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.
Wählen Sie Speichern aus.
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.
Wählen Sie im Dropdownmenü Ziel-IoT-Hubs beide IoT-Hubs aus.
Wählen Sie für die Zuordnungsrichtlinie die Option Niedrigste Latenz aus.
Klicken Sie auf Überprüfen + erstellen.
Überprüfen Sie auf der Registerkarte Überprüfen + erstellen all Ihre Werte, und wählen Sie dann Erstellen aus.
Nachdem Ihre Registrierungsgruppe erstellt wurde, wählen Sie in der Liste der Registrierungsgruppen den Namen contoso-us-devices aus.
Kopieren Sie den Primärschlüssel. Dieser Schlüssel wird später verwendet, um eindeutige Geräteschlüssel für beide simulierten Geräte zu erzeugen.
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.
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
Die Ausführung dieses Befehls dauert einige Minuten.
Kopieren Sie nach Abschluss des Befehls den Wert publicIpAddress für Ihre VM der Region East US.
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
Die Ausführung dieses Befehls dauert einige Minuten.
Kopieren Sie nach Abschluss des Befehls den Wert publicIpAddress für Ihre VM der Region West US 2.
Öffnen Sie zwei Befehlszeilenshells.
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 jeder VM. Das SDK enthält ein Beispiel, das eine Gerätebereitstellung aus jeder Region simuliert.
Für jede VM:
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
Suchen und kopieren Sie den Tag-Namen für die neueste Version des SDK.
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_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
Sie sollten damit rechnen, dass die Ausführung dieses Vorgangs mehrere Minuten in Anspruch nimmt.
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
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 ..
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 Tutorials generieren Sie einen Geräteschlüssel aus dem Hauptschlüssel der Gruppe, um einen 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 in eastus als auch in westus2:
Erzeugen Sie Ihren eindeutigen Schlüssel mit openssl. Verwenden Sie das folgende Bash-Shell-Skript (ersetzen Sie
{primary-key}
durch den Primärschlüssel der Registrierungsgruppe, den Sie zuvor kopiert haben, und ersetzen 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
Das Skript gibt in etwa den folgenden Schlüssel aus:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
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 die beiden regionalen VMs.
Der Beispielcode simuliert eine Gerätestartsequenz, über die die Bereitstellungsanforderung an die Instanz des Device Provisioning-Diensts gesendet wird. Die Boot-Sequenz führt dazu, dass das Gerät erkannt und dem IoT-Hub zugewiesen wird, der auf der Grundlage der Latenzzeit am nächsten liegt.
Navigieren Sie im Azure-Portal zur Registerkarte Übersicht für Ihre Device Provisioning Service-Instanz, und notieren Sie sich den Wert unter ID-Bereich.
Ö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
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";
Suchen Sie auf beiden VMs die Definition für die Funktion
main()
in derselben Datei. Stellen Sie sicher, dass die Variablehsm_type
wie unten gezeigt für die Nachweismethode für Registrierungsgruppen aufSECURE_DEVICE_TYPE_SYMMETRIC_KEY
festgelegt ist.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;
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 nachfolgend gezeigten Schlüssel 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=");
Speichern Sie die Datei auf beiden VMs.
Navigieren Sie auf beiden VMs zum unten angegebenen Beispielordner, 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
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:
Melden Sie sich beim Azure-Portal an.
Klicken Sie auf Ressourcengruppen.
Geben Sie im Textfeld Nach Name filtern... den Namen der Ressourcengruppe ein, die Ihre Ressourcen enthält: contoso-us-resource-group.
Klicken Sie in der Ergebnisliste rechts neben Ihrer Ressourcengruppe auf ... und dann auf Ressourcengruppe löschen.
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