Kurz: Použití Azure CLI ke konfiguraci směrování IoT Hub zpráv
Směrování zpráv umožňuje odesílat data telemetrie ze zařízení IoT do integrovaných koncových bodů kompatibilních s centrem událostí nebo vlastních koncových bodů, jako je BLOB storage, Service Bus fronty, Service Bus témata a Event Hubs. Chcete-li nakonfigurovat vlastní směrování zpráv, vytvořte dotazy směrování pro přizpůsobení trasy, která odpovídá určité podmínce. Po nastavení se příchozí data automaticky přesměrují na koncové body pomocí služby IoT Hub. Pokud zpráva neodpovídá žádnému z definovaných směrovacích dotazů, bude směrována do výchozího koncového bodu.
V tomto 2 kurzu se naučíte, jak nastavit a používat tyto vlastní dotazy směrování s IoT Hub. Zprávy ze zařízení IoT směrujete do jednoho z několika koncových bodů, včetně úložiště objektů BLOB a fronty Service Bus. Zprávy do fronty Service Bus vybírají aplikace logiky a odesílají se prostřednictvím e-mailu. Zprávy, které nemají definované vlastní směrování zpráv, se odešlou do výchozího koncového bodu a pak se vybírají Azure Stream Analytics a zobrazí se ve vizualizaci Power BI.
K dokončení částí 1 a 2 tohoto kurzu provedete následující úlohy:
Část I: vytvoření prostředků, nastavení směrování zpráv
- Vytvoření prostředků – služby IoT Hub, účtu úložiště, fronty Service Bus a simulovaného zařízení. Můžete to udělat pomocí Azure Portal, Azure Resource Manager šablony, rozhraní příkazového řádku Azure nebo Azure PowerShell.
- Konfigurace koncových bodů a směrování zpráv v IoT Hub pro účet úložiště a Service Bus fronty.
Část II: odeslání zpráv do centra, zobrazení směrovaných výsledků
- Vytvoření aplikace logiky, která se aktivuje a odešle e-mail, kdykoli se ve frontě Service Bus objeví nová zpráva.
- Stažení a spuštění aplikaci, která bude simulovat IoT zařízení odesílající zprávy do centra s různými možnosti směrování.
- Vytvoření vizualizace Power BI pro data odesílaná výchozím koncovým bodem.
- Zobrazení výsledků...
- ...ve frontě Service Bus a v e-mailech.
- ...v účtu úložiště.
- ...ve vizualizaci Power BI.
Požadavky
V části 1 tohoto kurzu:
- Mít předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
V části 2 tohoto kurzu:
- Musíte mít hotovou část 1 tohoto kurzu a prostředky budou stále k dispozici.
- Nainstalujte Visual Studio.
- Mít přístup k účtu Power BI k analýze Stream Analytics výchozího koncového bodu. (Vyzkoušejte službu Power BI zdarma.)
- Máte pracovní nebo školní účet pro odesílání e-mailů s oznámením.
- Ujistěte se, že je v bráně firewall otevřený port 8883. Ukázka v tomto kurzu používá protokol MQTT, který komunikuje přes port 8883. Tento port může být blokovaný v některých podnikových a vzdělávacích prostředích sítě. Další informace a způsoby, jak tento problém obejít, najdete v tématu připojení k IoT Hub (MQTT).
Použití služby Azure Cloud Shell
Azure hostí interaktivní prostředí Azure Cloud Shell, které můžete používat v prohlížeči. Pro práci se službami Azure můžete v prostředí Cloud Shell použít buď Bash, nebo PowerShell. Můžete použít předinstalované příkazy služby Cloud Shell ke spuštění kódu uvedeného v tomto článku, aniž byste museli instalovat cokoli do svého místního prostředí.
Spuštění služby Azure Cloud Shell:
| Možnost | Příklad nebo odkaz |
|---|---|
| Zvolte Vyzkoušet v pravém horním rohu bloku kódu. Výběr Vyzkoušet automaticky nekopíruje kód do služby Cloud Shell. | ![]() |
| Přejděte na adresu https://shell.azure.com nebo výběrem tlačítka Spustit Cloud Shell otevřete Cloud Shell v prohlížeči. | ![]() |
| Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. | ![]() |
Pokud chcete spustit kód uvedený v tomto článku ve službě Azure Cloud Shell, postupujte takto:
Spusťte Cloud Shell.
Vyberte tlačítko Kopírovat na bloku kódu a kód zkopírujte.
Vložte kód do relace Cloud Shell pomocí kláves Ctrl+Shift+V ve Windows a Linuxu nebo pomocí kláves Cmd+Shift+V v systému macOS.
Spusťte kód stisknutím klávesy Enter.
Vytvoření základních prostředků
Než budete moct nakonfigurovat směrování zpráv, musíte vytvořit centrum IoT, účet úložiště a frontu Service Bus. Tyto prostředky je možné vytvořit pomocí jednoho ze čtyř článků, které jsou k dispozici v části 1 tohoto kurzu: Azure Portal, Azure Resource Manager šablona, rozhraní příkazového řádku Azure nebo Azure PowerShell.
Použijte pro všechny prostředky stejnou skupinu a umístění. Pak na konci můžete odebrat všechny prostředky v jednom kroku odstraněním skupiny prostředků.
Níže je uveden seznam kroků, které je třeba provést v následujících částech:
Vytvořte skupinu prostředků.
Vytvořte centrum IoT ve vrstvě S1. Přidejte do centra IoT skupinu uživatelů. Skupinu uživatelů používá služba Azure Stream Analytics při získávání dat.
Poznámka
K dokončení tohoto kurzu musíte použít Centrum IoT v placené úrovni. Úroveň Free umožňuje nastavit pouze jeden koncový bod a tento kurz vyžaduje více koncových bodů.
Vytvořte standardní účet úložiště V1 s replikací Standard_LRS.
Vytvořte oboru názvů a frontu Service Bus.
Vytvořte identitu zařízení pro simulované zařízení, které bude odesílat zprávy do vašeho centra. Uložte klíč pro fázi testování. (Pokud vytváříte šablonu Správce prostředků, to se provádí po nasazení šablony.)
Stažení skriptu (volitelné)
V druhé části tohoto kurzu stáhnete a spustíte aplikaci Visual Studio, která bude odesílat zprávy do IoT Hub. Soubor ke stažení obsahuje složku, která obsahuje šablonu Azure Resource Manager a soubor parametrů, stejně jako skripty Azure CLI a PowerShellu.
Pokud chcete zobrazit dokončený skript, stáhněte si ukázky Azure IoT C#. Rozbalte main.zip. Skript Azure CLI je ve skriptu /iot-hub/Tutorials/Routing/SimulatedDevice/resources/ jako iothub_routing_cli.azcli.
Vytvoření prostředků pomocí Azure CLI
Zkopírujte a vložte níže uvedený skript do Cloud Shell a stiskněte Enter. Skript se spouští po řádku po řádku. Tato první část skriptu vytvoří základní prostředky pro tento kurz, včetně účtu úložiště, IoT Hub, Service Bus oboru názvů a Service Bus fronty. Ve zbývající části kurzu zkopírujte jednotlivé bloky skriptu a vložte je do souboru Cloud Shell ho spusťte.
Tip
Tip k ladění: Tento skript používá symbol pokračování (zpětné lomítko), aby byl \ skript čitelnější. Pokud máte problém se spuštěním skriptu, ujistěte se, že Cloud Shell spuštěná relace a že po žádném zpětném lomítku nejsou žádné bash mezery.
Existuje několik názvů prostředků, které musí být globálně jedinečné, například IoT Hub název a název účtu úložiště. Aby to bylo snazší, připojí se tyto názvy prostředků s náhodnou alfanumerická hodnota s názvem randomValue. Hodnota randomValue se vygeneruje jednou v horní části skriptu a připojí se k názvům prostředků podle potřeby v celém skriptu. Pokud nechcete, aby byla náhodná, můžete ji nastavit na prázdný řetězec nebo na konkrétní hodnotu.
Důležité
Proměnné nastavené v počátečním skriptu jsou také používány skriptem směrování, proto spusťte všechny skripty ve stejné Cloud Shell relaci. Pokud otevřete novou relaci pro spuštění skriptu pro nastavení směrování, budou chybět hodnoty několika proměnných.
# This command retrieves the subscription id of the current Azure account.
# This field is used when setting up the routing queries.
subscriptionID=$(az account show --query id -o tsv)
# 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
# This command installs the IOT Extension for Azure CLI.
# You only need to install this the first time.
# You need it to create the device identity.
az extension add --name azure-iot
# Set the values for the resource names that
# don't have to be globally unique.
location=westus
resourceGroup=ContosoResources
iotHubConsumerGroup=ContosoConsumers
containerName=contosoresults
iotDeviceName=Contoso-Test-Device
# 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
# Create the IoT device identity to be used for testing.
az iot hub device-identity create --device-id $iotDeviceName \
--hub-name $iotHubName
# Retrieve the information about the device identity, then copy the primary key to
# Notepad. You need this to run the device simulation during the testing phase.
az iot hub device-identity show --device-id $iotDeviceName \
--hub-name $iotHubName
Teď, když jsou základní prostředky nastavené, můžete nakonfigurovat směrování zpráv.
Nastavení směrování zpráv
Potřebujete směrovat zprávy do různých prostředků na základě vlastností, které ke zprávě připojilo simulované zařízení. Zprávy, které nejsou směrovány podle vlastních pravidel, se posílají na výchozí koncový bod (zprávy/události). V dalším kurzu odešlete zprávy do IoT Hub a zjistíte, že jsou směrované do různých umístění.
| Hodnota | Výsledek |
|---|---|
| level="storage" | Zapsat do úložiště Azure Storage. |
| level="critical" | Zapsat do fronty Service Bus. Aplikace logiky načte zprávu z fronty a pomocí Office 365 ji odešle e-mailem. |
| default | Zobrazte tato data pomocí Power BI. |
Prvním krokem je nastavení koncového bodu, na který budou data směrována. Druhým krokem je nastavení trasy zprávy, která používá daný koncový bod. Po nastavení směrování můžete zobrazit koncové body a trasy zpráv na portálu.
Pokud chcete vytvořit koncový bod směrování, použijte příkaz az iot hub routing-endpoint create. K vytvoření trasy zpráv pro koncový bod použijte příkaz az iot hub route create.
Směrování do účtu úložiště
Poznámka
Data je možné zapsat do úložiště objektů BLOB ve formátu Apache Avro , který je výchozí nebo JSON.
Formát kódování lze nastavit pouze v době, kdy je nakonfigurován koncový bod služby Blob Storage. Formát nelze změnit pro koncový bod, který již byl nastaven. Při použití kódování JSON musíte nastavit contentType na JSON a contentEncoding na UTF-8 ve vlastnostech systému zpráv.
Podrobnější informace o použití koncového bodu služby Blob Storage najdete v tématu pokyny k směrování do úložiště.
Nejprve nastavte koncový bod pro účet úložiště a pak nastavte trasu.
Toto jsou proměnné používané skriptem, které se musí nastavit v rámci vaší Cloud Shell relace:
storageConnectionString: Tato hodnota se načte z účtu úložiště nastaveného v předchozím skriptu. Používá se při směrování zpráv pro přístup k účtu úložiště.
resourceGroup: Existují dva výskyty skupiny prostředků – nastavte je na vaši skupinu prostředků.
subscriptionID koncového bodu: Toto pole je nastavené na ID předplatného Azure pro koncový bod.
endpointType: Toto pole je typ koncového bodu. Tato hodnota musí být nastavená azurestoragecontainer na , , nebo eventhub servicebusqueue servicebustopic . Pro vaše účely ji nastavte na azurestoragecontainer .
iotHubName: Toto pole je název centra, které bude směrovat.
containerName: Toto pole je název kontejneru v účtu úložiště, do kterého se budou zapisovat data.
encoding: Toto pole bude buď avro , nebo json . Označuje formát uložených dat.
routeName: Toto pole je název trasy, kterou nastavujete.
endpointName: Toto pole je název identifikující koncový bod.
enabled: Toto pole má výchozí hodnotu , což znamená, že po vytvoření by se měla true povolit trasa zprávy.
condition: Toto pole je dotaz, který slouží k filtrování zpráv odeslaných do tohoto koncového bodu. Podmínka dotazu pro zprávy směrované do úložiště je level="storage" .
Zkopírujte tento skript, vložte ho do okna Cloud Shell a spusťte ho.
##### ROUTING FOR STORAGE #####
endpointName="ContosoStorageEndpoint"
endpointType="azurestoragecontainer"
routeName="ContosoStorageRoute"
condition='level="storage"'
# Get the connection string for the storage account.
# Adding the "-o tsv" makes it be returned without the default double quotes around it.
storageConnectionString=$(az storage account show-connection-string \
--name $storageAccountName --query connectionString -o tsv)
Dalším krokem je vytvoření koncového bodu směrování pro účet úložiště. Zadáte také kontejner, ve kterém se budou výsledky ukládat. Kontejner se vytvořil dříve při vytvoření účtu úložiště.
# Create the routing endpoint for storage.
az iot hub routing-endpoint create \
--connection-string $storageConnectionString \
--endpoint-name $endpointName \
--endpoint-resource-group $resourceGroup \
--endpoint-subscription-id $subscriptionID \
--endpoint-type $endpointType \
--hub-name $iotHubName \
--container $containerName \
--resource-group $resourceGroup \
--encoding avro
Dále vytvořte trasu pro koncový bod úložiště. Trasa zprávy určuje, kam se budou odesílat zprávy, které splňují specifikaci dotazu.
# Create the route for the storage endpoint.
az iot hub route create \
--name $routeName \
--hub-name $iotHubName \
--source devicemessages \
--resource-group $resourceGroup \
--endpoint-name $endpointName \
--enabled \
--condition $condition
Směrování do Service Bus fronty
Nyní nastavte směrování pro frontu Service Bus. Pokud chcete načíst připojovací řetězec Service Bus fronty, musíte vytvořit autorizační pravidlo, které má definovaná správná práva. Následující skript vytvoří autorizační pravidlo pro frontu Service Bus s názvem sbauthrule a nastaví práva na Listen Manage Send . Jakmile je toto autorizační pravidlo definované, můžete ho použít k načtení připojovacího řetězce pro frontu.
# Create the authorization rule for the Service Bus queue.
az servicebus queue authorization-rule create \
--name "sbauthrule" \
--namespace-name $sbNamespace \
--queue-name $sbQueueName \
--resource-group $resourceGroup \
--rights Listen Manage Send \
--subscription $subscriptionID
Teď pomocí autorizačního pravidla načtěte připojovací řetězec do Service Bus fronty.
# Get the Service Bus queue connection string.
# The "-o tsv" ensures it is returned without the default double-quotes.
sbqConnectionString=$(az servicebus queue authorization-rule keys list \
--name "sbauthrule" \
--namespace-name $sbNamespace \
--queue-name $sbQueueName \
--resource-group $resourceGroup \
--subscription $subscriptionID \
--query primaryConnectionString -o tsv)
# Show the Service Bus queue connection string.
echo "service bus queue connection string = " $sbqConnectionString
Teď nastavte koncový bod směrování a trasu zpráv pro frontu Service Bus zpráv. Toto jsou proměnné používané skriptem, které se musí nastavit v rámci vaší Cloud Shell relace:
endpointName: Toto pole je název identifikující koncový bod.
endpointType: Toto pole je typ koncového bodu. Tato hodnota musí být nastavená azurestoragecontainer na , , nebo eventhub servicebusqueue servicebustopic . Pro vaše účely ji nastavte na servicebusqueue .
routeName: Toto pole je název trasy, kterou nastavujete.
condition: Toto pole je dotaz, který slouží k filtrování zpráv odeslaných do tohoto koncového bodu. Podmínka dotazu pro zprávy směrované do fronty Service Bus je level="critical" .
Tady je Azure CLI pro koncový bod směrování a trasu zpráv pro frontu Service Bus zpráv.
endpointName="ContosoSBQueueEndpoint"
endpointType="ServiceBusQueue"
routeName="ContosoSBQueueRoute"
condition='level="critical"'
# Set up the routing endpoint for the Service Bus queue.
# This uses the Service Bus queue connection string.
az iot hub routing-endpoint create \
--connection-string $sbqConnectionString \
--endpoint-name $endpointName \
--endpoint-resource-group $resourceGroup \
--endpoint-subscription-id $subscriptionID \
--endpoint-type $endpointType \
--hub-name $iotHubName \
--resource-group $resourceGroup
# Set up the message route for the Service Bus queue endpoint.
az iot hub route create --name $routeName \
--hub-name $iotHubName \
--source-type devicemessages \
--resource-group $resourceGroup \
--endpoint-name $endpointName \
--enabled \
--condition $condition
Zobrazení směrování zpráv na portálu
Teď, když jsou nastavené koncové body a směrování zpráv, si můžete zobrazit jejich konfiguraci na portálu. Přihlaste se k Azure Portal a pokračujte do skupin prostředků. V dalším kroku vyberte svoji skupinu prostředků a potom vyberte centrum (název centra začíná ContosoTestHub v tomto kurzu). Zobrazí se podokno IoT Hub.
V možnostech pro IoT Hub vyberte směrování zpráv. Trasy, které jste nastavili úspěšně, se zobrazí.

Na obrazovce směrování zpráv vyberte vlastní koncové body pro zobrazení koncových bodů, které jste pro trasy definovali.

Další kroky
Teď, když máte nastavené prostředky a nakonfigurované trasy zpráv, se v dalším kurzu dozvíte, jak odesílat zprávy do služby IoT Hub a jak se budou směrovat do různých cílů.


