Esercitazione: Usare Azure PowerShell per configurare il routing dei messaggi per l'hub IoTTutorial: Use Azure PowerShell to configure IoT Hub message routing

Il routing dei messaggi consente l'invio dei dati di telemetria dai dispositivi IoT agli endpoint compatibili con Hub eventi predefiniti o agli endpoint personalizzati, ad esempio l'archiviazione BLOB, le code del bus di servizio, gli argomenti del bus di servizio e Hub eventi.Message routing enables sending telemetry data from your IoT devices to built-in Event Hub-compatible endpoints or custom endpoints such as blob storage, Service Bus Queues, Service Bus Topics, and Event Hubs. Per configurare il routing dei messaggi personalizzato, creare query di routing per personalizzare la route che corrisponde a una determinata condizione.To configure custom message routing, you create routing queries to customize the route that matches a certain condition. Una volta impostati, i dati in ingresso vengono automaticamente indirizzati agli endpoint dall'hub IoT.Once set up, the incoming data is automatically routed to the endpoints by the IoT Hub. Se un messaggio non corrisponde ad alcuna delle query di routing definita, viene indirizzato all'endpoint predefinito.If a message doesn't match any of the defined routing queries, it is routed to the default endpoint.

In questa esercitazione in due parti, si apprenderà come configurare e usare le query di routing personalizzate con l'hub IoT.In this 2-part tutorial, you learn how to set up and use these custom routing queries with IoT Hub. Si indirizzano i messaggi di routing da un dispositivo IoT a uno degli endpoint multipli, compresa l'archiviazione BLOB e una coda del bus di servizio.You route messages from an IoT device to one of multiple endpoints, including blob storage and a Service Bus queue. I messaggi per la coda del bus di servizio saranno prelevati da un'App per la logica e inviati tramite posta elettronica.Messages to the Service Bus queue are picked up by a Logic App and sent via e-mail. I messaggi per cui non è stato definito il routing personalizzato vengono inviati all'endpoint predefinito, selezionati da Analisi di flusso di Azure e visualizzati in una visualizzazione di Power BI.Messages that do not have custom message routing defined are sent to the default endpoint, then picked up by Azure Stream Analytics and viewed in a Power BI visualization.

Per completate la prima e la seconda parte di questa esercitazione, eseguire le seguenti attività:To complete Parts 1 and 2 of this tutorial, you perform the following tasks:

Parte I: Creare risorse e configurare il routing dei messaggiPart I: Create resources, set up message routing

  • Creare le risorse, ossia un hub IoT, un account di archiviazione, una coda del bus di servizio e un dispositivo simulato.Create the resources -- an IoT hub, a storage account, a Service Bus queue, and a simulated device. A tale scopo, usare il portale di Azure, un modello di Azure Resource Manager, l'interfaccia della riga di comando di Azure o Azure PowerShell.This can be done using the Azure portal, an Azure Resource Manager template, the Azure CLI, or Azure PowerShell.
  • Configurare gli endpoint e le route dei messaggi nell'hub IoT per l'account di archiviazione e la coda del bus di servizio.Configure the endpoints and message routes in IoT Hub for the storage account and Service Bus queue.

Parte II: Inviare messaggi all'hub e visualizzare i risultati instradatiPart II: Send messages to the hub, view routed results

  • Creare un'app per la logica che viene attivata e che invia e-mail quando viene aggiunto un messaggio alla coda del Bus di servizio.Create a Logic App that is triggered and sends e-mail when a message is added to the Service Bus queue.
  • Scaricare ed eseguire un'app che simuli un dispositivo IoT che invia messaggi all'hub per le diverse opzioni di routing.Download and run an app that simulates an IoT Device sending messages to the hub for the different routing options.
  • Creare una visualizzazione di Power BI per i dati inviati all'endpoint predefinito.Create a Power BI visualization for data sent to the default endpoint.
  • Visualizzare i risultati...View the results ...
  • ...nella Coda del bus di servizio e nei messaggi di posta elettronica....in the Service Bus queue and e-mails.
  • ...nell'account di archiviazione....in the storage account.
  • ... nella visualizzazione di Power BI....in the Power BI visualization.

PrerequisitiPrerequisites

  • Per la prima parte di questa esercitazione:For Part 1 of this tutorial:

    • È necessario disporre di una sottoscrizione di Azure.You must have an Azure subscription. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.If you don't have an Azure subscription, create a free account before you begin.
  • Per la seconda parte di questa esercitazione:For Part 2 of this tutorial:

    • È necessario aver completato la prima parte di questa esercitazione e avere ancora a disposizione le risorse.You must have completed Part 1 of this tutorial, and have the resources still available.
    • Installare Visual Studio.Install Visual Studio.
    • Avere accesso a un account di Power BI per analizzare l'analisi di flusso dell'endpoint predefinito.Have access to a Power BI account to analyze the default endpoint's stream analytics. (Provare gratuitamente Power BI.)(Try Power BI for free.)
    • Disporre di un account aziendale o dell'istituto di istruzione per l'invio di notifiche tramite posta elettronica.Have a work or school account for sending notification e-mails.
    • Assicurarsi che la porta 8883 sia aperta nel firewall.Make sure that port 8883 is open in your firewall. L'esempio di questa esercitazione usa il protocollo MQTT, che comunica tramite la porta 8883.The sample in this tutorial uses MQTT protocol, which communicates over port 8883. Questa porta potrebbe essere bloccata in alcuni ambienti di rete aziendali e didattici.This port may be blocked in some corporate and educational network environments. Per altre informazioni e soluzioni alternative per questo problema, vedere Connettersi all'hub IoT (MQTT).For more information and ways to work around this issue, see Connecting to IoT Hub (MQTT).

Usare Azure Cloud ShellUse Azure Cloud Shell

Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure.You can use either Bash or PowerShell with Cloud Shell to work with Azure services. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice contenuto in questo articolo senza dover installare strumenti nell'ambiente locale.You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Per avviare Azure Cloud Shell:To start Azure Cloud Shell:

OpzioneOption Esempio/CollegamentoExample/Link
Selezionare Prova nell'angolo superiore destro di un blocco di codice.Select Try It in the upper-right corner of a code block. La selezione di Prova non comporta la copia automatica del codice in Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Esempio di Prova per Azure Cloud Shell
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser.Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. Avviare Cloud Shell in una nuova finestraLaunch Cloud Shell in a new window
Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo in alto a destra del portale di Azure.Select the Cloud Shell button on the menu bar at the upper right in the Azure portal. Pulsante Cloud Shell nel portale di Azure

Per eseguire il codice di questo articolo in Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Avviare Cloud Shell.Start Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice per copiare il codice.Select the Copy button on a code block to copy the code.

  3. Incollare il codice nella sessione di Cloud Shell premendo CTRL+MAIUSC+V in Windows e Linux o CMD+MAIUSC+V in macOS.Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Premere INVIO per eseguire il codice.Select Enter to run the code.

Creare le risorse di baseCreate base resources

Prima di poter configurare il routing dei messaggi, è necessario creare un hub IoT, un account di archiviazione e una coda del bus di servizio.Before you can configure the message routing, you need to create an IoT hub, a storage account, and a Service Bus queue. Queste risorse possono essere create usando uno dei quattro articoli disponibili nella prima parte di questa esercitazione: il portale di Azure, un modello di Azure Resource Manager, l'interfaccia della riga di comando di Azure o Azure PowerShell.These resources can be created using one of the four articles that are available for Part 1 of this tutorial: the Azure portal, an Azure Resource Manager template, the Azure CLI, or Azure PowerShell.

Usare lo stesso gruppo di risorse e lo stesso percorso per tutte le risorse.Use the same resource group and location for all of the resources. Alla fine, poi, è possibile rimuovere tutte le risorse in un unico passaggio tramite l'eliminazione del gruppo di risorse.Then at the end, you can remove all of the resources in one step by deleting the resource group.

Di seguito è riportato un riepilogo dei passaggi da eseguire nelle sezioni seguenti:Below is a summary of the steps to be performed in the following sections:

  1. Creare un gruppo di risorse.Create a resource group.

  2. Creare un hub IoT nel livello S1.Create an IoT hub in the S1 tier. Aggiungere un gruppo di consumer all'hub IoTAdd a consumer group to your IoT hub. Il gruppo di consumer è usato da Analisi di flusso di Azure quando si recuperano i dati.The consumer group is used by the Azure Stream Analytics when retrieving data.

    Nota

    Per completare questa esercitazione, è necessario utilizzare un hub IoT in un livello a pagamento.You must use an Iot hub in a paid tier to complete this tutorial. Il livello gratuito consente solo di configurare un endpoint e questa esercitazione ne richiede di più.The free tier only allows you to set up one endpoint, and this tutorial requires multiple endpoints.

  3. Creare un account di archiviazione V1 standard con la replica Standard_LRS.Create a standard V1 storage account with Standard_LRS replication.

  4. Creare uno spazio dei nomi del bus di servizio e una codaCreate a Service Bus namespace and queue.

  5. Creare un'identità del dispositivo per il dispositivo simulato che invia messaggi all'hub dell'utente.Create a device identity for the simulated device that sends messages to your hub. Salvare la chiave per la fase del test.Save the key for the testing phase. Se si crea un modello di Resource Manager, questa operazione viene eseguita dopo la distribuzione del modello.(If creating a Resource Manager template, this is done after deploying the template.)

Scaricare lo script (facoltativo)Download the script (optional)

Per la seconda parte di questa esercitazione, scaricare ed eseguire un'applicazione di Visual Studio per inviare messaggi all'hub IoT.For the second part of this tutorial, you download and run a Visual Studio application to send messages to the IoT Hub. Il download include una cartella contenente il modello di Azure Resource Manager e il file di parametri, oltre agli script dell'interfaccia della riga di comando di Azure e di PowerShell.There is a folder in the download that contains the Azure Resource Manager template and parameters file, as well as the Azure CLI and PowerShell scripts.

Se si vuole visualizzare lo script completato, scaricare gli esempi in C# di Azure IoT.If you want to view the finished script, download the Azure IoT C# Samples. Estrarre il file master.zip.Unzip the master.zip file. Lo script di PowerShell, denominato iothub_routing_psh.ps1, si trova nel percorso /iot-hub/Tutorials/Routing/SimulatedDevice/resources/.The Azure CLI script is in /iot-hub/Tutorials/Routing/SimulatedDevice/resources/ as iothub_routing_psh.ps1.

Creare le risorseCreate your resources

Per iniziare, creare le risorse con PowerShell.Start by creating the resources with PowerShell.

Usare PowerShell per creare le risorse di baseUse PowerShell to create your base resources

Copiare e incollare lo script seguente in Cloud Shell e premere INVIO.Copy and paste the script below into Cloud Shell and press Enter. Lo script viene eseguito una riga alla volta.It runs the script one line at a time. La prima sezione dello script creerà le risorse di base per questa esercitazione, come l'account di archiviazione, l'hub IoT, lo spazio dei nomi del bus di servizio e la coda del bus di servizio.This first section of the script will create the base resources for this tutorial, including the storage account, IoT Hub, Service Bus Namespace, and Service Bus queue. Mentre si procede con l'esercitazione, copiare ogni blocco dello script e incollarlo in Cloud Shell per eseguirlo.As you go through the tutorial, copy each block of script and paste it into Cloud Shell to run it.

Diversi nomi di risorse devono essere univoci globali, come il nome dell'hub IoT e il nome dell'account di archiviazione.There are several resource names that must be globally unique, such as the IoT Hub name and the storage account name. Per semplicità, a questi nomi di risorse viene aggiunto un valore alfanumerico casuale denominato randomValue.To make this easier, those resource names are appended with a random alphanumeric value called randomValue. Il valore randomValue viene generato una sola volta all'inizio dello script e viene aggiunto ai nomi delle risorse, se necessario, nell'intero script.The randomValue is generated once at the top of the script and appended to the resource names as needed throughout the script. Se non si vuole che il valore sia casuale, è possibile impostarlo su una stringa vuota o su un valore specifico.If you don't want it to be random, you can set it to an empty string or to a specific value.

Importante

Le variabili impostate nello script iniziale vengono usate anche dallo script di routing, quindi eseguire tutto lo script nella stessa sessione di Cloud Shell.The variables set in the initial script are also used by the routing script, so run all of the script in the same Cloud Shell session. Se si apre una nuova sessione per eseguire lo script per la configurazione del routing, i valori di diverse variabili risulteranno mancanti.If you open a new session to run the script for setting up the routing, several of the variables will be missing values.

# This command retrieves the subscription id of the current Azure account.
# This field is used when setting up the routing queries.
$subscriptionID = (Get-AzContext).Subscription.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 the first 6 digits of a random value.
$randomValue = "$(Get-Random)".Substring(0,6)

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

# Create the resource group to be used 
#   for all resources for this tutorial.
New-AzResourceGroup -Name $resourceGroup -Location $location

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

# Create the IoT hub.
New-AzIotHub -ResourceGroupName $resourceGroup `
    -Name $iotHubName `
    -SkuName "S1" `
    -Location $location `
    -Units 1 

# Add a consumer group to the IoT hub for the 'events' endpoint.
Add-AzIotHubEventHubConsumerGroup -ResourceGroupName $resourceGroup `
  -Name $iotHubName `
  -EventHubConsumerGroupName $iotHubConsumerGroup `
  -EventHubEndpointName "events"

# The storage account name must be globally unique, so add a random value to the end.
$storageAccountName = "contosostorage" + $randomValue
Write-Host "storage account name is " $storageAccountName

# Create the storage account to be used as a routing destination.
# Save the context for the storage account 
#   to be used when creating a container.
$storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup `
    -Name $storageAccountName `
    -Location $location `
    -SkuName Standard_LRS `
    -Kind Storage
# Retrieve the connection string from the context. 
$storageConnectionString = $storageAccount.Context.ConnectionString
Write-Host "storage connection string = " $storageConnectionString 

# Create the container in the storage account.
New-AzStorageContainer -Name $containerName `
    -Context $storageAccount.Context

# The Service Bus namespace must be globally unique,
#   so add a random value to the end.
$serviceBusNamespace = "ContosoSBNamespace" + $randomValue
Write-Host "Service Bus namespace is " $serviceBusNamespace

# Create the Service Bus namespace.
New-AzServiceBusNamespace -ResourceGroupName $resourceGroup `
    -Location $location `
    -Name $serviceBusNamespace 

# The Service Bus queue name must be globally unique,
#  so add a random value to the end.
$serviceBusQueueName  = "ContosoSBQueue" + $randomValue
Write-Host "Service Bus queue name is " $serviceBusQueueName 

# Create the Service Bus queue to be used as a routing destination.
New-AzServiceBusQueue -ResourceGroupName $resourceGroup `
    -Namespace $serviceBusNamespace `
    -Name $serviceBusQueueName  `
    -EnablePartitioning $False 

Creare un dispositivo simulatoCreate a simulated device

Successivamente, creare un'identità del dispositivo e salvare la chiave per un uso successivo.Next, create a device identity and save its key for later use. Questa identità del dispositivo viene usata dall'applicazione di simulazione per inviare messaggi all'hub IoT.This device identity is used by the simulation application to send messages to the IoT hub. Questa funzionalità non è disponibile in PowerShell o quando si usa un modello di Azure Resource Manager.This capability is not available in PowerShell or when using an Azure Resource Manager template. La procedura seguente illustra la creazione del dispositivo simulato usando il portale di Azure.The following steps tell you how to create the simulated device using the Azure portal.

  1. Aprire il portale di Azure ed eseguire l'accesso all'account di Azure.Open the Azure portal and log into your Azure account.

  2. Selezionare Gruppi di risorse e quindi scegliere il proprio gruppo di risorse.Select Resource groups and then choose your resource group. Questa esercitazione usa ContosoResources.This tutorial uses ContosoResources.

  3. Nell'elenco delle risorse selezionare l'hub IoT.In the list of resources, select your IoT hub. Questa esercitazione usa ContosoTestHub.This tutorial uses ContosoTestHub. Selezionare dispositivi IoT dal riquadro Hub.Select IoT Devices from the Hub pane.

  4. Selezionare + Nuovo.Select + New. Nel riquadro Aggiungi dispositivo, immettere l'ID del dispositivo.On the Add Device pane, fill in the device ID. Questa esercitazione usa Contoso-Test-Device.This tutorial uses Contoso-Test-Device. Lasciare vuote le chiavi e controllare Genera chiavi automaticamente.Leave the keys empty, and check Auto Generate Keys. Assicurarsi che Connetti dispositivo all'hub IoT sia abilitata.Make sure Connect device to IoT hub is enabled. Selezionare Salva.Select Save.

    Schermata Aggiungi dispositivi

  5. Ora che è stato creato, selezionare il dispositivo per visualizzare le chiavi generate.Now that it's been created, select the device to see the generated keys. Selezionare l'icona Copia sulla chiave primaria e salvarla in un punto, ad esempio nel Blocco note per la fase di test di questa esercitazione.Select the Copy icon on the Primary key and save it somewhere such as Notepad for the testing phase of this tutorial.

    Dettagli del dispositivo, comprese le chiavi

Dopo aver configurato le risorse di base, è possibile configurare il routing dei messaggi.Now that the base resources are set up, you can configure the message routing.

Configurazione del routing dei messaggiSet up message routing

Si stanno per inviare messaggi a diverse risorse in base alle proprietà allegate al messaggio dal dispositivo simulato.You are going to route messages to different resources based on properties attached to the message by the simulated device. I messaggi che non sono indirizzati in modo personalizzato vengono inviati all'endpoint predefinito (messaggi/eventi).Messages that are not custom routed are sent to the default endpoint (messages/events). Nella prossima esercitazione, si inviano messaggi all'hub IoT per poi visualizzarli indirizzati a destinazioni diverse.In the next tutorial, you send messages to the IoT Hub and see them routed to the different destinations.

valoreValue RisultatoResult
level="storage"level="storage" Scrivere ad archiviazione di AzureWrite to Azure Storage.
level="critical"level="critical" Scrivere a una coda del bus di servizio.Write to a Service Bus queue. Un'app per la logica recupera il messaggio dalla coda e usa Office 365 per inviare il messaggio con posta elettronica.A Logic App retrieves the message from the queue and uses Office 365 to e-mail the message.
defaultdefault Visualizzare questi dati con Power BI.Display this data using Power BI.

Il primo passaggio consiste nell'impostare l'endpoint a cui verranno instradati i dati.The first step is to set up the endpoint to which the data will be routed. Il secondo passaggio consiste nel configurare la route di messaggi che usa tale endpoint.The second step is to set up the message route that uses that endpoint. Dopo aver configurato il routing, è possibile visualizzare gli endpoint e le route di messaggi nel portale.After setting up the routing, you can view the endpoints and message routes in the portal.

Per creare un endpoint di routing, usare Add-AzIotHubRoutingEndpoint.To create a routing endpoint, use Add-AzIotHubRoutingEndpoint. Per creare la route dei messaggi per l'endpoint, usare Add-AzIotHubRoute.To create the messaging route for the endpoint, use Add-AzIotHubRoute.

Creare la route a un account di archiviazioneRoute to a storage account

Configurare prima di tutto l'endpoint per l'account di archiviazione, quindi creare la route dei messaggi.First, set up the endpoint for the storage account, then create the message route.

Nota

È possibile scrivere i dati nell'archiviazione BLOB in formato Apache Avro, che è quello predefinito, oppure in formato JSON (anteprima).The data can be written to blob storage in either the Apache Avro format, which is the default, or JSON (preview).

La funzionalità di codifica del formato JSON è in anteprima in tutte le aree in cui è disponibile l'hub IoT, a eccezione degli Stati Uniti orientali, degli Stati Uniti occidentali e dell'Europa occidentale.The capability to encode JSON format is in preview in all regions in which IoT Hub is available, except East US, West US and West Europe. Il formato di codifica può essere impostato solo al momento della configurazione dell'endpoint di archiviazione BLOB.The encoding format can be only set at the time the blob storage endpoint is configured. Non è possibile modificare il formato di un endpoint già configurato.The format cannot be changed for an endpoint that has already been set up. Quando si usa la codifica JSON è necessario impostare contentType su JSON e contentEncoding su UTF-8 nelle proprietà di sistema del messaggio.When using JSON encoding, you must set the contentType to JSON and the contentEncoding to UTF-8 in the message system properties.

Per informazioni più dettagliate sull'uso di un endpoint di archiviazione BLOB, vedere le indicazioni sul routing all'archiviazione.For more detailed information about using a blob storage endpoint, please see guidance on routing to storage.

Queste sono le variabili usate dallo script che devono essere impostate all'interno della sessione di Cloud Shell:These are the variables used by the script that must be set within your Cloud Shell session:

resourceGroup: esistono due occorrenze di questo campo, impostarle entrambe sul gruppo di risorse.resourceGroup: There are two occurrences of this field -- set both of them to your resource group.

name: il nome dell'hub IoT a cui verrà applicato il routing.name: This field is the name of the IoT Hub to which the routing will apply.

endpointName: il nome che identifica l'endpoint.endpointName: This field is the name identifying the endpoint.

endpointType: il tipo di endpoint.endpointType: This field is the type of endpoint. Questo valore deve essere impostato su azurestoragecontainer, eventhub, servicebusqueue o servicebustopic.This value must be set to azurestoragecontainer, eventhub, servicebusqueue, or servicebustopic. Per questa esercitazione, impostarlo su azurestoragecontainer.For your purposes here, set it to azurestoragecontainer.

subscriptionID: questo campo è impostato sull'ID sottoscrizione dell'account Azure.subscriptionID: This field is set to the subscriptionID for your Azure account.

storageConnectionString: questo valore viene recuperato dall'account di archiviazione configurato nello script precedente.storageConnectionString: This value is retrieved from the storage account set up in the previous script. Viene usato dal routing per accedere all'account di archiviazione.It is used by the routing to access the storage account.

containerName: il nome del contenitore nell'account di archiviazione in cui verranno scritti i dati.containerName: This field is the name of the container in the storage account to which data will be written.

Encoding: impostare questo campo su AVRO o JSON.Encoding: Set this field to either AVRO or JSON. Indica il formato dei dati archiviati.This designates the format of the stored data. Il valore predefinito è AVRO.The default is AVRO.

routeName: il nome della route da configurare.routeName: This field is the name of the route you are setting up.

condition: la query usata per filtrare i messaggi e trovare quello inviato a questo endpoint.condition: This field is the query used to filter for the messages sent to this endpoint. La condizione di query per i messaggi da instradare nell'account di archiviazione è level="storage".The query condition for the messages being routed to storage is level="storage".

enabled: per impostazione predefinita, questo campo è true, a indicare che la route dei messaggi deve essere abilitata dopo la creazione.enabled: This field defaults to true, indicating that the message route should be enabled after being created.

Copiare questo script e incollarlo nella finestra Cloud Shell.Copy this script and paste it into your Cloud Shell window.

##### ROUTING FOR STORAGE #####

$endpointName = "ContosoStorageEndpoint"
$endpointType = "azurestoragecontainer"
$routeName = "ContosoStorageRoute"
$condition = 'level="storage"'

Il passaggio successivo consiste nel creare l'endpoint di routing per l'account di archiviazione.The next step is to create the routing endpoint for the storage account. Verrà inoltre specificato il contenitore in cui archiviare i risultati.You also specify the container in which the results will be stored. Il contenitore è stato creato contestualmente all'account di archiviazione.The container was created when the storage account was created.

# Create the routing endpoint for storage.
# Specify 'AVRO' or 'JSON' for the encoding of the data.
Add-AzIotHubRoutingEndpoint `
  -ResourceGroupName $resourceGroup `
  -Name $iotHubName `
  -EndpointName $endpointName `
  -EndpointType $endpointType `
  -EndpointResourceGroup $resourceGroup `
  -EndpointSubscriptionId $subscriptionId `
  -ConnectionString $storageConnectionString  `
  -ContainerName $containerName `
  -Encoding AVRO

Creare quindi la route dei messaggi per l'endpoint di archiviazione.Next, create the message route for the storage endpoint. La route dei messaggi indica dove inviare i messaggi che soddisfano la specifica della query.The message route designates where to send the messages that meet the query specification.

# Create the route for the storage endpoint.
Add-AzIotHubRoute `
   -ResourceGroupName $resourceGroup `
   -Name $iotHubName `
   -RouteName $routeName `
   -Source DeviceMessages `
   -EndpointName $endpointName `
   -Condition $condition `
   -Enabled 

Creare la route alla coda del bus di servizioRoute to a Service Bus queue

Ora configurare il routing per la coda del bus di servizio.Now set up the routing for the Service Bus queue. Per recuperare la stringa di connessione per la coda del bus di servizio, è necessario creare una regola di autorizzazione con i diritti corretti definiti.To retrieve the connection string for the Service Bus queue, you must create an authorization rule that has the correct rights defined. Lo script seguente crea una regola di autorizzazione per la coda del bus di servizio denominata sbauthrule e imposta i diritti su Listen Manage Send.The following script creates an authorization rule for the Service Bus queue called sbauthrule, and sets the rights to Listen Manage Send. Dopo aver configurato questa regola di autorizzazione, è possibile usarla per recuperare la stringa di connessione per la coda.Once this authorization rule is set up, you can use it to retrieve the connection string for the queue.

##### ROUTING FOR SERVICE BUS QUEUE #####

# Create the authorization rule for the Service Bus queue.
New-AzServiceBusAuthorizationRule `
  -ResourceGroupName $resourceGroup `
  -NamespaceName $serviceBusNamespace `
  -Queue $serviceBusQueueName `
  -Name "sbauthrule" `
  -Rights @("Manage","Listen","Send")

Ora usare la regola di autorizzazione per recuperare la chiave della coda del bus di servizio.Now use the authorization rule to retrieve the Service Bus queue key. In seguito la regola verrà usata per recuperare la stringa di connessione più avanti nello script.This authorization rule will be used to retrieve the connection string later in the script.

$sbqkey = Get-AzServiceBusKey `
    -ResourceGroupName $resourceGroup `
    -NamespaceName $serviceBusNamespace `
    -Queue $servicebusQueueName `
    -Name "sbauthrule"

Configurare ora l'endpoint di routing e la route dei messaggi per la coda del bus di servizio.Now set up the routing endpoint and the message route for the Service Bus queue. Queste sono le variabili usate dallo script che devono essere impostate all'interno della sessione di Cloud Shell:These are the variables used by the script that must be set within your Cloud Shell session:

endpointName: il nome che identifica l'endpoint.endpointName: This field is the name identifying the endpoint.

endpointType: il tipo di endpoint.endpointType: This field is the type of endpoint. Questo valore deve essere impostato su azurestoragecontainer, eventhub, servicebusqueue o servicebustopic.This value must be set to azurestoragecontainer, eventhub, servicebusqueue, or servicebustopic. Per questa esercitazione, impostarlo su servicebusqueue.For your purposes here, set it to servicebusqueue.

routeName: il nome della route da configurare.routeName: This field is the name of the route you are setting up.

condition: la query usata per filtrare i messaggi e trovare quello inviato a questo endpoint.condition: This field is the query used to filter for the messages sent to this endpoint. La condizione di query per i messaggi da instradare nella coda del bus di servizio è level="critical".The query condition for the messages being routed to the Service Bus queue is level="critical".

Ecco il codice di Azure PowerShell per il routing dei messaggi per la coda del bus di servizio.Here is the Azure PowerShell for the message routing for the Service Bus queue.

$endpointName = "ContosoSBQueueEndpoint"
$endpointType = "servicebusqueue"
$routeName = "ContosoSBQueueRoute"
$condition = 'level="critical"'

# Add the routing endpoint, using the connection string property from the key.
Add-AzIotHubRoutingEndpoint `
  -ResourceGroupName $resourceGroup `
  -Name $iotHubName `
  -EndpointName $endpointName `
  -EndpointType $endpointType `
  -EndpointResourceGroup $resourceGroup `
  -EndpointSubscriptionId $subscriptionId `
  -ConnectionString $sbqkey.PrimaryConnectionString

# Set up the message route for the Service Bus queue endpoint.
Add-AzIotHubRoute `
   -ResourceGroupName $resourceGroup `
   -Name $iotHubName `
   -RouteName $routeName `
   -Source DeviceMessages `
   -EndpointName $endpointName `
   -Condition $condition `
   -Enabled 

Visualizzare il routing dei messaggi nel portaleView message routing in the portal

Dopo aver configurato gli endpoint e le route dei messaggi è possibile visualizzarne la configurazione nel portale.Now that your endpoints and message routes are set up, you can view their configuration in the portal. Accedere al portale di Azure e passare a Gruppi di risorse.Sign in to the Azure portal and go to Resource Groups. In seguito, selezionare il gruppo di risorse e quindi selezionare l'hub (il cui nome inizia per ContosoTestHub in questa esercitazione).Next, select your resource group, then select your hub (the hub name starts with ContosoTestHub in this tutorial). Viene visualizzato il riquadro dell'hub IoT.You see the IoT Hub pane.

Schermata proprietà dell'hub IoT

Nelle opzioni dell'hub IoT, selezionare Routing dei messaggi.In the options for the IoT Hub, select Message Routing. Vengono visualizzate le route correttamente configurate.The routes you have set up successfully are displayed.

Le route configurate dall'utente

Nella schermata Routing dei messaggi selezionare Endpoint personalizzati per visualizzare gli endpoint definiti per le route.On the Message routing screen, select Custom Endpoints to see the endpoints you have defined for the routes.

Gli endpoint configurati per le route

Passaggi successiviNext steps

Dopo aver configurato le risorse e le route dei messaggi, passare all'esercitazione successiva per scoprire come inviare messaggi all'hub IoT e instradarli in destinazioni diverse.Now that you have the resources set up and the message routes configured, advance to the next tutorial to learn how to send messages to the IoT hub and see them be routed to the different destinations.