Tutorial: Verwenden der Azure CLI und des Azure-Portals zum Konfigurieren des IoT Hub-Nachrichtenroutings

Das Nachrichtenrouting ermöglicht das Senden von Telemetriedaten von Ihren IoT-Geräten an integrierte, Event Hub-kompatible Endpunkte oder benutzerdefinierte Endpunkte wie Blob Storage-Instanzen, Service Bus-Warteschlangen, Service Bus-Themen und Event Hubs. Zum Konfigurieren des benutzerdefinierten Nachrichtenroutings erstellen Sie Routingabfragen, um die Route anzupassen, die eine bestimmte Bedingung erfüllt. Nach der Einrichtung werden die eingehenden Daten von IoT Hub automatisch an die Endpunkte weitergeleitet. Wenn eine Nachricht nicht mit einer der definierten Routingabfragen übereinstimmt, wird sie an den Standardendpunkt geleitet.

In diesem zweiteiligen Tutorial lernen Sie, wie Sie diese benutzerdefinierten Routingabfragen mit IoT Hub einrichten und verwenden. Sie leiten Nachrichten von einem IoT-Gerät an einen von mehreren Endpunkten weiter, z. B. Blob Storage oder eine Service Bus-Warteschlange. Nachrichten an die Service Bus-Warteschlange werden über eine Logik-App per E-Mail gesendet. Nachrichten, für die kein benutzerdefiniertes Nachrichtenrouting definiert ist, werden an den Standardendpunkt gesendet und dann von Azure Stream Analytics ausgewählt und in einer Power BI-Visualisierung angezeigt.

Sie führen die folgenden Aufgaben aus, um Teil 1 und 2 dieses Tutorials durchzuarbeiten:

Teil 1: Erstellen von Ressourcen, Einrichten des Nachrichtenroutings

  • Sie erstellen die Ressourcen: einen IoT-Hub, ein Speicherkonto, eine Service Bus-Warteschlange und ein simuliertes Gerät. Hierfür können Sie das Portal, eine Azure Resource Manager-Vorlage, die Azure CLI oder Azure PowerShell verwenden.
  • Sie konfigurieren die Endpunkte und Nachrichtenrouten in IoT Hub für das Speicherkonto und die Service Bus-Warteschlange.

Teil 2: Senden von Nachrichten an den Hub, Anzeigen von Routingergebnissen

  • Sie erstellen eine Logik-App, die ausgelöst wird und eine E-Mail sendet, wenn der Service Bus-Warteschlange eine Nachricht hinzugefügt wird.
  • Sie laden eine App herunter und führen sie aus, die ein IoT-Gerät simuliert, das für die verschiedenen Weiterleitungsoptionen Nachrichten an den Hub sendet.
  • Sie erstellen eine Power BI-Visualisierung für die Daten, die an den Standardendpunkt gesendet werden.
  • Sie zeigen die Ergebnisse an:
  • – in der Service Bus-Warteschlange und in E-Mails
  • – im Speicherkonto
  • – in der Power BI-Visualisierung

Voraussetzungen

  • Für Teil 1 dieses Tutorials:

    • Sie benötigen ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
  • Für Teil 2 dieses Tutorials:

    • Sie müssen Teil 1 dieses Tutorials abgeschlossen haben, und die Ressourcen müssen noch verfügbar sein.
    • Installieren Sie Visual Studio.
    • Zugriff auf ein Power BI-Konto zum Analysieren der Stream Analytics-Daten des Standardendpunkts. (Power BI kostenlos testen)
    • Sie müssen über ein Geschäfts-, Schul-oder Unikonto zum Senden von Benachrichtigungs-E-Mails verfügen.
    • Stellen Sie sicher, dass Port 8883 in Ihrer Firewall geöffnet ist. Für das Beispiel in diesem Tutorial wird das MQTT-Protokoll verwendet, das über Port 8883 kommuniziert. In einigen Netzwerkumgebungen von Unternehmen oder Bildungseinrichtungen ist dieser Port unter Umständen blockiert. Weitere Informationen und Problemumgehungen finden Sie unter Herstellen einer Verbindung mit IoT Hub (MQTT).

Verwenden von Azure Cloud Shell

Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können. Sie können entweder Bash oder PowerShell mit Cloud Shell verwenden, um mit Azure-Diensten zu arbeiten. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.

Starten von Azure Cloud Shell:

Option Beispiel/Link
Klicken Sie in der rechten oberen Ecke eines Codeblocks auf Ausprobieren. Durch die Auswahl von Ausprobieren wird der Code nicht automatisch in Cloud Shell kopiert. Beispiel für „Testen Sie es.“ für Azure Cloud Shell
Rufen Sie https://shell.azure.com auf, oder wählen Sie die Schaltfläche Cloud Shell starten, um Cloud Shell im Browser zu öffnen. Starten von Cloud Shell in einem neuen Fenster
Wählen Sie im Azure-Portal rechts oben im Menü die Schaltfläche Cloud Shell aus. Cloud Shell-Schaltfläche im Azure-Portal

Ausführen des Codes in diesem Artikel in Azure Cloud Shell:

  1. Starten Sie Cloud Shell.

  2. Wählen Sie die Schaltfläche Kopieren für einen Codeblock, um den Code zu kopieren.

  3. Fügen Sie den Code mit STRG+UMSCHALT+V unter Windows und Linux oder Cmd+UMSCHALT+V unter macOS in die Cloud Shell-Sitzung ein.

  4. Drücken Sie die EINGABETASTE, um den Code auszuführen.

Erstellen der grundlegenden Ressourcen

Bevor Sie das Nachrichtenrouting konfigurieren können, müssen Sie zunächst eine IoT Hub-Instanz, ein Speicherkonto und eine Service Bus-Warteschlange erstellen. Diese Ressourcen können anhand eines der vier Artikel erstellt werden, die für den ersten Teil dieses Tutorials verfügbar sind. In diesen Artikeln wird die Vorgehensweise mit dem Azure-Portal, mit einer Azure Resource Manager-Vorlage, der Azure CLI und mit Azure PowerShell erläutert.

Verwenden Sie für alle Ressourcen die gleiche Ressourcengruppe und den gleichen Speicherort. Am Ende dieses Tutorials können Sie dann sämtliche Ressourcen in einem einzelnen Schritt entfernen, indem Sie die Ressourcengruppe löschen.

Nachfolgend finden Sie eine Zusammenfassung der Schritte, die in den folgenden Abschnitten ausgeführt werden müssen:

  1. Erstellen Sie eine Ressourcengruppe.

  2. Erstellen Sie eine IoT Hub-Instanz im Tarif S1. Fügen Sie Ihrer IoT Hub-Instanz eine Consumergruppe hinzu. Die Consumergruppe wird beim Abrufen von Daten von Azure Stream Analytics verwendet.

    Hinweis

    Sie müssen eine IoT Hub-Instanz in einem kostenpflichtigen Tarif verwenden, um dieses Tutorial abzuschließen. Im Free-Tarif können Sie nur einen einzelnen Endpunkt einrichten, und dieses Tutorial erfordert mehrere Endpunkte.

  3. Erstellen Sie ein Speicherkonto des Typs „Standard V1“ mit Standard_LRS-Replikation.

  4. Erstellen Sie einen Service Bus-Namespace und eine Service Bus-Warteschlange.

  5. Erstellen Sie eine Geräteidentität für das simulierte Gerät, das Nachrichten an Ihren Hub sendet. Speichern Sie den Schlüssel für die Testphase. (Wenn Sie eine Resource Manager-Vorlage erstellen, erfolgt dieser Schritt nach Bereitstellung der Vorlage.)

Verwenden der Azure CLI zum Erstellen der grundlegenden Ressourcen

In diesem Tutorial wird die Azure CLI zum Erstellen der grundlegenden Ressourcen und anschließend das Azure-Portal verwendet, um zu veranschaulichen, wie Sie das Nachrichtenrouting konfigurieren und das virtuelle Gerät für das Testen einrichten.

Kopieren Sie das folgende Skript, fügen Sie es in Cloud Shell ein, und drücken Sie die EINGABETASTE. Daraufhin wird das Skript Zeile für Zeile ausgeführt. Hiermit werden die grundlegenden Ressourcen für dieses Tutorial erstellt, z. B. Speicherkonto, IoT Hub, Service Bus-Namespace und Service Bus-Warteschlange.

Einige Ressourcennamen müssen global eindeutig sein. Hierzu zählen beispielsweise der IoT Hub-Name und der Name des Speicherkontos. Zur Vereinfachung wird an diese Ressourcennamen ein alphanumerischer Zufallswert namens randomValue angefügt. Der Zufallswert wird einmalig zu Beginn des Skripts generiert und innerhalb des gesamten Skripts nach Bedarf an die Ressourcennamen angefügt. Falls Sie keinen Zufallswert verwenden möchten, können Sie den Wert auf eine leere Zeichenfolge oder auf einen bestimmten Wert festlegen.

Tipp

Ein Tipp zum Debuggen: Dieses Skript verwendet das Fortsetzungssymbol (umgekehrter Schrägstrich: \), um die Lesbarkeit des Skripts zu verbessern. Falls beim Ausführen des Skripts ein Problem auftritt, sollten Sie sich vergewissern, dass in Ihrer Cloud Shell-Sitzung bash ausgeführt wird und dass nach keinem der umgekehrten Schrägstriche ein Leerzeichen steht.

# This retrieves the subscription id of the account 
#   in which you're logged in.
# This field is used to set up the routing queries.
subscriptionID=$(az account show --query id)

# Concatenate this number onto the resources that have to be globally unique.
# You can set this to "" or to a specific value if you don't want it to be random.
# This retrieves a random value.
randomValue=$RANDOM

# Set the values for the resource names that 
#   don't have to be globally unique.
location=westus
resourceGroup=ContosoResources
iotHubConsumerGroup=ContosoConsumers
containerName=contosoresults

# Create the resource group to be used
#   for all the resources for this tutorial.
az group create --name $resourceGroup \
    --location $location

# The IoT hub name must be globally unique, 
#   so add a random value to the end.
iotHubName=ContosoTestHub$randomValue 
echo "IoT hub name = " $iotHubName

# Create the IoT hub.
az iot hub create --name $iotHubName \
    --resource-group $resourceGroup \
    --sku S1 --location $location

# Add a consumer group to the IoT hub for the 'events' endpoint.
az iot hub consumer-group create --hub-name $iotHubName \
    --name $iotHubConsumerGroup

# The storage account name must be globally unique, 
#   so add a random value to the end.
storageAccountName=contosostorage$randomValue
echo "Storage account name = " $storageAccountName

# Create the storage account to be used as a routing destination.
az storage account create --name $storageAccountName \
    --resource-group $resourceGroup \
    --location $location \
    --sku Standard_LRS

# Get the primary storage account key. 
#    You need this to create the container.
storageAccountKey=$(az storage account keys list \
    --resource-group $resourceGroup \
    --account-name $storageAccountName \
    --query "[0].value" | tr -d '"') 

# See the value of the storage account key.
echo "storage account key = " $storageAccountKey

# Create the container in the storage account. 
az storage container create --name $containerName \
    --account-name $storageAccountName \
    --account-key $storageAccountKey \
    --public-access off

# The Service Bus namespace must be globally unique, 
#   so add a random value to the end.
sbNamespace=ContosoSBNamespace$randomValue
echo "Service Bus namespace = " $sbNamespace

# Create the Service Bus namespace.
az servicebus namespace create --resource-group $resourceGroup \
    --name $sbNamespace \
    --location $location

# The Service Bus queue name must be globally unique, 
#   so add a random value to the end.
sbQueueName=ContosoSBQueue$randomValue
echo "Service Bus queue name = " $sbQueueName

# Create the Service Bus queue to be used as a routing destination.
az servicebus queue create --name $sbQueueName \
    --namespace-name $sbNamespace \
    --resource-group $resourceGroup

Nachdem die grundlegenden Ressourcen eingerichtet wurden, können Sie das Nachrichtenrouting im Azure-Portal konfigurieren.

Einrichten der Nachrichtenweiterleitung

Sie leiten Nachrichten an verschiedene Ressourcen weiter, abhängig von Eigenschaften, die vom simulierten Gerät an die Nachricht angefügt werden. Nachrichten ohne benutzerdefinierte Weiterleitung, werden an den Standardendpunkt gesendet (Nachrichten/Ereignisse). Im nächsten Tutorial werden Nachrichten an IoT Hub gesendet und an verschiedene Ziele weitergeleitet.

Wert Ergebnis
level="storage" Schreibvorgang in Azure Storage.
level="critical" Schreibvorgang in eine Service Bus-Warteschlange. Eine Logik-App ruft die Nachricht aus der Warteschlange ab und sendet sie mithilfe von Office 365.
default Anzeigen dieser Daten mithilfe von Power BI.

Als Erstes muss der Endpunkt eingerichtet werden, an den die Daten weitergeleitet werden. Danach wird die Nachrichtenroute eingerichtet, die diesen Endpunkt verwendet. Nach Einrichtung des Routings können Sie die Endpunkte und Nachrichtenrouten im Portal anzeigen.

Weiterleiten an ein Speicherkonto

Richten Sie jetzt die Weiterleitung für das Speicherkonto ein. Wechseln Sie zum Bereich „Nachrichtenrouting“, und fügen Sie eine Route hinzu. Definieren Sie beim Hinzufügen der Route einen neuen Endpunkt für die Route. Nach der Einrichtung des Routings werden Nachrichten, deren level-Eigenschaft auf storage festgelegt wurde, automatisch in ein Speicherkonto geschrieben.

Hinweis

Die Daten können entweder im Apache Avro-Format (Standardeinstellung) oder im JSON-Format in den Blobspeicher geschrieben werden.

Das Codierungsformat kann nur beim Konfigurieren des Blob Storage-Endpunkt festgelegt werden. Für bereits eingerichtete Endpunkte kann das Format nicht mehr geändert werden. Bei Verwendung der JSON-Codierung müssen Sie in den Nachrichtensystemeigenschaften den Inhaltstyp (contentType) auf „JSON“ und die Inhaltscodierung (contentEncoding) auf „UTF-8“ festlegen.

Ausführlichere Informationen zur Verwendung eines Blob Storage-Endpunkts finden Sie unter Leitfaden zum Weiterleiten an den Speicher.

  1. Wählen Sie im Azure-Portal die Option Ressourcengruppen und dann Ihre Ressourcengruppe aus. In diesem Tutorial wird ContosoResources verwendet.

  2. Wählen Sie in der Liste mit den Ressourcen Ihren IoT-Hub aus. In diesem Tutorial wird ContosoTestHub verwendet.

  3. Wählen Sie Nachrichtenrouting. Wählen Sie im Bereich Nachrichtenrouting die Option + Hinzufügen. Wählen Sie im Bereich Route hinzufügen neben dem Feld „Endpunkt“ die Option + Endpunkt hinzufügen aus, um die unterstützten Endpunkte anzuzeigen. Dies ist in der folgenden Abbildung dargestellt:

    Beginnen mit dem Hinzufügen eines Endpunkts für eine Route

  4. Wählen Sie Speicher. Der Bereich Speicherendpunkt hinzufügen wird angezeigt.

    Hinzufügen eines Endpunkts

  5. Geben Sie einen Namen für den Endpunkt ein. In diesem Tutorial wird ContosoStorageEndpoint verwendet.

  6. Wählen Sie Container auswählen. Dadurch gelangen Sie zu einer Liste Ihrer Speicherkonten. Wählen Sie das Konto aus, das Sie in den Vorbereitungsschritten eingerichtet haben. In diesem Tutorial wird contosostorage verwendet. Es zeigt eine Liste der Container in diesem Speicherkonto. Wählen Sie den Container aus, den Sie in den Vorbereitungsschritten eingerichtet haben. In diesem Tutorial wird contosoresults verwendet. Sie gelangen zurück zum Bereich Neuen Speicherendpunkt hinzufügen, und die getroffene Auswahl wird angezeigt.

  7. Legen Sie die Codierung auf AVRO oder JSON fest. Verwenden Sie in diesem Tutorial die Standardwerte für die restlichen Felder. Dieses Feld ist ausgegraut, wenn die JSON-Codierung für die ausgewählte Region nicht unterstützt wird.

    Hinweis

    Sie können das Format des Blobnamens festlegen, indem Sie das Format für Blobdateinamen verwenden. Der Standardwert lautet {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. Das Format muss {iothub}, {partition}, {YYYY}, {MM}, {DD}, {HH} und {mm} in einer beliebigen Reihenfolge enthalten.

    Bei Verwendung des Standardformats für Blobdateinamen sieht der Blobname beispielsweise wie folgt aus, wenn der Hubname „ContosoTestHub“ lautet und als Datum bzw. Uhrzeit „30. Oktober 2018 um 10:56 Uhr“ verwendet wird: ContosoTestHub/0/2018/10/30/10/56.

    Die Blobs werden standardmäßig im AVRO-Format geschrieben.

  8. Wählen Sie Erstellen, um den Speicherendpunkt zu erstellen und der Route hinzuzufügen. Sie wechseln zurück zum Bereich Route hinzufügen.

  9. Geben Sie nun die restlichen Routingabfrageinformationen an. Diese Abfrage gibt die Kriterien für das Senden von Nachrichten an den Speichercontainer, den Sie gerade als Endpunkt hinzugefügt haben, an. Füllen Sie die Felder auf dem Bildschirm aus.

    Name: Geben Sie einen Namen für Ihre Routingabfrage ein. In diesem Tutorial wird ContosoStorageRoute verwendet.

    Endpunkt: Zeigt den Endpunkt an, den Sie gerade eingerichtet haben.

    Datenquelle: Wählen Sie in der Dropdownliste Gerätetelemetriemeldungen aus.

    Route aktivieren: Achten Sie darauf, dass dieses Feld auf enabled festgelegt ist.

    Routingabfrage: Geben Sie level="storage" als Abfragezeichenfolge ein.

    Erstellen einer Routingabfrage für das Speicherkonto

    Wählen Sie Speichern aus. Wenn der Speichervorgang abgeschlossen ist, werden Sie wieder zum Bereich „Nachrichtenrouting“ geleitet, in dem Sie Ihre neue Routingabfrage für die Speicherung anzeigen können. Schließen Sie den Bereich „Routen“. Daraufhin werden Sie wieder zur Seite der Ressourcengruppe geleitet.

Weiterleiten an eine Service Bus-Warteschlange

Richten Sie jetzt die Weiterleitung für die Service Bus-Warteschlange ein. Wechseln Sie zum Bereich „Nachrichtenrouting“, und fügen Sie eine Route hinzu. Definieren Sie beim Hinzufügen der Route einen neuen Endpunkt für die Route. Nach der Einrichtung dieser Route werden Nachrichten, bei denen die level-Eigenschaft auf critical festgelegt ist, in die Service Bus-Warteschlange geschrieben. Hierdurch wird eine Logik-App ausgelöst, die dann eine E-Mail mit den Informationen sendet.

  1. Wählen Sie auf der Seite der Ressourcengruppe Ihre IoT Hub-Instanz und dann die Option Nachrichtenrouting aus.

  2. Wählen Sie im Bereich Nachrichtenrouting die Option + Hinzufügen.

  3. Wählen Sie im Bereich Route hinzufügen neben dem Feld „Endpunkt“ die Option + Hinzufügen. Wählen Sie Service Bus-Warteschlange aus. Der Bereich Service Bus-Endpunkt hinzufügen wird angezeigt.

    Hinzufügen eines Service Bus-Endpunkts

  4. Füllen Sie die Felder aus:

    Endpunktname: Geben Sie einen Namen für den Endpunkt ein. In diesem Tutorial wird ContosoSBQueueEndpoint verwendet.

    Service Bus-Namespace: Verwenden Sie die Dropdownliste, um den Service Bus-Namespace auszuwählen, den Sie in den Vorbereitungsschritten eingerichtet haben. In diesem Tutorial wird ContosoSBNamespace verwendet.

    Service Bus-Warteschlange: Verwenden Sie die Dropdownliste, um die Service Bus-Warteschlange auszuwählen. In diesem Tutorial wird contososbqueue verwendet.

  5. Wählen Sie Erstellen, um den Endpunkt für die Service Bus-Warteschlange hinzuzufügen. Sie wechseln zurück zum Bereich Route hinzufügen.

  6. Geben Sie nun die restlichen Routingabfrageinformationen an. Diese Abfrage gibt die Kriterien für das Senden von Nachrichten an die Service Bus-Warteschlange, die Sie gerade als Endpunkt hinzugefügt haben, an. Füllen Sie die Felder auf dem Bildschirm aus.

    Name: Geben Sie einen Namen für Ihre Routingabfrage ein. In diesem Tutorial wird ContosoSBQueueRoute verwendet.

    Endpunkt: Zeigt den Endpunkt an, den Sie gerade eingerichtet haben.

    Datenquelle: Wählen Sie in der Dropdownliste Gerätetelemetriemeldungen aus.

    Routingabfrage: Geben Sie level="critical" als Abfragezeichenfolge ein.

    Erstellen einer Routingabfrage für die Service Bus-Warteschlange

  7. Wählen Sie Speichern aus. Wenn Sie zum Bereich „Routen“ zurückkehren, sehen Sie Ihre beiden neuen Routen, wie hier gezeigt.

    Routen, die Sie gerade eingerichtet haben

  8. Sie können die von Ihnen eingerichteten benutzerdefinierten Endpunkte anzeigen, indem Sie die Registerkarte Benutzerdefinierte Endpunkte auswählen.

    Benutzerdefinierter Endpunkt, den Sie gerade eingerichtet haben

  9. Schließen Sie den Bereich „Nachrichtenrouting“. Daraufhin werden Sie wieder zum Bereich der Ressourcengruppe geleitet.

Erstellen Sie ein simuliertes Gerät.

Als Nächstes erstellen Sie eine Geräteidentität und speichern den zugehörigen Schlüssel für die spätere Verwendung. Diese Geräteidentität wird von der Simulationsanwendung verwendet, um Nachrichten an die IoT Hub-Instanz zu senden. Diese Funktion ist in PowerShell oder bei Verwendung einer Azure Resource Manager-Vorlage nicht verfügbar. Die folgenden Schritte zeigen, wie Sie das simulierte Gerät über das Azure-Portal erstellen.

  1. Öffnen Sie das Azure-Portal, und melden Sie sich bei Ihrem Azure-Konto an.

  2. Wählen Sie Ressourcengruppen und anschließend Ihre Ressourcengruppe aus. In diesem Tutorial wird ContosoResources verwendet.

  3. Wählen Sie in der Ressourcenliste Ihre IoT Hub-Instanz aus. In diesem Tutorial wird ContosoTestHub verwendet. Wählen Sie im Bereich „Hub“ die Option IoT-Geräte aus.

  4. Wählen Sie + Neu aus. Geben Sie im Bereich „Gerät hinzufügen“ die Geräte-ID an. In diesem Tutorial wird Contoso-Test-Device verwendet. Lassen Sie die Felder für die Schlüssel leer, und aktivieren Sie das Kontrollkästchen Schlüssel automatisch generieren. Stellen Sie sicher, dass die Option Gerät mit IoT Hub verbinden aktiviert ist. Wählen Sie Speichern aus.

    Bildschirm „Gerät hinzufügen“

  5. Nachdem das Gerät erstellt wurde, wählen Sie es aus, um die generierten Schlüssel anzuzeigen. Wählen Sie für den primären Schlüssel das Kopiersymbol aus, und speichern Sie den Schlüssel für die Testphase dieses Tutorials beispielsweise im Editor.

    Gerätedetails einschließlich Schlüssel

Nächste Schritte

Nachdem Sie die Ressourcen eingerichtet und die Nachrichtenrouten konfiguriert haben, können Sie sich nun im nächsten Tutorial darüber informieren, wie Sie Nachrichten an IoT Hub senden, die dann an die verschiedenen Ziele weitergeleitet werden.