Guida introduttiva: Creare un processo di Analisi di flusso con Azure PowerShell

Il modulo Azure PowerShell viene usato per creare e gestire le risorse di Azure usando cmdlet o script di PowerShell. Questa guida introduttiva illustra in dettaglio l'uso del modulo Azure PowerShell per distribuire ed eseguire un processo di Analisi di flusso di Azure.

Il processo di esempio legge i dati in streaming da un dispositivo hub IoT. I dati di input sono generati da un simulatore online Raspberry Pi. Il processo Analisi di flusso trasforma quindi i dati usando il linguaggio di query di analisi di flusso per filtrare i messaggi con una temperatura superiore a 27°. Scrive infine gli eventi di output risultanti in un file nell'archiviazione BLOB.

Prima di iniziare

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

  • Se non si ha una sottoscrizione di Azure, creare un account gratuito.

  • Per questa guida di avvio rapido è richiesto il modulo Azure PowerShell. Eseguire Get-Module -ListAvailable Az per trovare la versione installata nel computer locale. Se è necessario eseguire l'installazione o l'aggiornamento, vedere come installare il modulo Azure PowerShell.

  • Alcune azioni hub IoT non sono supportate da Azure PowerShell e devono essere completate usando l'interfaccia della riga di comando di Azure versione 2.0.70 o successiva e l'estensione IoT per l'interfaccia della riga di comando di Azure. Installare l'interfaccia della riga di comando di Azure e usare az extension add --name azure-iot per installare l'estensione IoT.

Accedere ad Azure

Accedere alla sottoscrizione di Azure con il comando Connect-AzAccount e immettere le credenziali di Azure nella finestra del browser a comparsa:

# Connect to your Azure account
Connect-AzAccount

Se si hanno più sottoscrizioni, selezionare quella che si vuole usare per questa guida introduttiva eseguendo i cmdlet seguenti. Assicurarsi di sostituire <your subscription name> con il nome della sottoscrizione:

# List all available subscriptions.
Get-AzSubscription

# Select the Azure subscription you want to use to create the resource group and resources.
Get-AzSubscription -SubscriptionName "<your subscription name>" | Select-AzSubscription

Creare un gruppo di risorse

Creare un gruppo di risorse di Azure con New-AzResourceGroup. Un gruppo di risorse è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.

$resourceGroup = "StreamAnalyticsRG"
$location = "WestUS2"
New-AzResourceGroup `
    -Name $resourceGroup `
    -Location $location

Preparare i dati di input

Prima di definire il processo di Analisi di flusso, preparare i dati configurati come input per il processo.

Il blocco di codice dell'interfaccia della riga di comando di Azure riportato di seguito esegue molti comandi per preparare i dati di input richiesti dal processo. Esaminare le sezioni per comprendere il codice.

  1. Nella finestra di PowerShell eseguire il comando az login per accedere all'account di Azure.

    Dopo aver effettuato l'accesso, l'interfaccia della riga di comando di Azure restituisce un elenco delle sottoscrizioni. Copiare la sottoscrizione in uso per questa guida introduttiva ed eseguire il comando az account set per selezionare tale sottoscrizione. Scegliere la stessa sottoscrizione selezionata nella sezione precedente con PowerShell. Assicurarsi di sostituire <your subscription name> con il nome della sottoscrizione.

    az login
    
    az account set --subscription "<your subscription>"
    
  2. Creare un hub IoT con il comando az iot hub create. Questo esempio crea un hub IoT denominato MyASAIoTHub. Poiché i nomi degli hub IoT sono univoci, è necessario indicare un nome personalizzato per il proprio hub IoT. Impostare lo SKU su F1 per usare il livello gratuito se è disponibile con la sottoscrizione. In caso contrario, scegliere il successivo livello più basso.

    az iot hub create --name "<your IoT Hub name>" --resource-group $resourceGroup --sku S1
    

    Dopo aver creato l'hub IoT, ottenere la stringa di connessione dell'hub IoT usando il comando az iot hub show-connection-string. Copiare l'intera stringa di connessione e salvarla per quando si aggiungerà l'hub IoT come input nel processo di Analisi di flusso di Azure.

    az iot hub show-connection-string --hub-name "MyASAIoTHub"
    
  3. Aggiungere un dispositivo a hub IoT usando il comando az iot hub device-identity create. Questo esempio crea un dispositivo denominato MyASAIoTDevice.

    az iot hub device-identity create --hub-name "MyASAIoTHub" --device-id "MyASAIoTDevice"
    
  4. Ottenere la stringa di connessione del dispositivo usando il comando az iot hub device-identity connection-string show . Copiare l'intera stringa di connessione e salvarla per quando si creerà il simulatore Raspberry Pi.

    az iot hub device-identity connection-string show --hub-name "MyASAIoTHub" --device-id "MyASAIoTDevice" --output table
    

    Esempio di output:

    HostName=MyASAIoTHub.azure-devices.net;DeviceId=MyASAIoTDevice;SharedAccessKey=a2mnUsg52+NIgYudxYYUNXI67r0JmNubmfVafojG8=
    

Creare l'archiviazione BLOB

Il seguente blocco di codice di Azure PowerShell usa comandi per creare l'archiviazione BLOB che viene usata per l'output del processo. Esaminare le sezioni per comprendere il codice.

  1. Creare un account di archiviazione standard per uso generico usando il cmdlet New-AzStorageAccount. Questo esempio crea un account di archiviazione denominato myasaquickstartstorage con archiviazione con ridondanza locale e crittografia BLOB (abilitata per impostazione predefinita).

  2. Recuperare il contesto $storageAccount.Context che definisce l'account di archiviazione da usare. Quando si usano gli account di archiviazione, si può fare riferimento al contesto anziché fornire ripetutamente le credenziali.

  3. Creare un contenitore di archiviazione con New-AzStorageContainer.

  4. Copiare la chiave di archiviazione restituita dal codice e salvarla per creare l'output del processo di streaming in un secondo momento.

    $storageAccountName = "myasaquickstartstorage"
    $storageAccount = New-AzStorageAccount `
      -ResourceGroupName $resourceGroup `
      -Name $storageAccountName `
      -Location $location `
      -SkuName Standard_LRS `
      -Kind Storage
    
    $ctx = $storageAccount.Context
    $containerName = "container1"
    
    New-AzStorageContainer `
      -Name $containerName `
      -Context $ctx
    
    $storageAccountKey = (Get-AzStorageAccountKey `
      -ResourceGroupName $resourceGroup `
      -Name $storageAccountName).Value[0]
    
    Write-Host "The <storage account key> placeholder needs to be replaced in your output json files with this key value:"
    Write-Host $storageAccountKey -ForegroundColor Cyan
    

Creare un processo di Analisi di flusso.

Creare un processo di Analisi di flusso con il cmdlet New-AzStreamAnalyticsJob. Questo cmdlet accetta il nome del processo, il nome del gruppo di risorse e la definizione del processo come parametri. Il nome del processo può essere un qualsiasi nome descrittivo che identifica il processo. Può contenere solo caratteri alfanumerici, trattini e caratteri di sottolineatura e deve avere una lunghezza compresa tra 3 e 63 caratteri. La definizione del processo è un file JSON che contiene le proprietà necessarie per creare un processo. Nel computer locale creare un file denominato JobDefinition.json e aggiungere i dati JSON seguenti:

{
  "location":"WestUS2",
  "properties":{
    "sku":{
      "name":"standard"
    },
    "eventsOutOfOrderPolicy":"adjust",
    "eventsOutOfOrderMaxDelayInSeconds":10,
    "compatibilityLevel": 1.1
  }
}

Eseguire quindi il cmdlet New-AzStreamAnalyticsJob. Sostituire il valore della variabile jobDefinitionFile con il percorso in cui è stato archiviato il file JSON della definizione del processo.

$jobName = "MyStreamingJob"
$jobDefinitionFile = "C:\JobDefinition.json"
New-AzStreamAnalyticsJob `
  -ResourceGroupName $resourceGroup `
  -File $jobDefinitionFile `
  -Name $jobName `
  -Force

Configurare l'input per il processo

Aggiungere un input al processo tramite il cmdlet New-AzStreamAnalyticsInput. Questo cmdlet accetta il nome del processo, il nome dell'input del processo, il nome del gruppo di risorse e la definizione dell'input del processo come parametri. La definizione dell'input del processo è un file JSON che contiene le proprietà necessarie per configurare l'input del processo. In questo esempio come input verrà creato un archivio BLOB.

Nel computer locale creare un file denominato JobInputDefinition.json e aggiungere i dati JSON seguenti. Assicurarsi di sostituire il valore di accesspolicykey con la parte SharedAccessKey della stringa di connessione dell'hub IoT salvato in una sezione precedente.

{
    "properties": {
        "type": "Stream",
        "datasource": {
            "type": "Microsoft.Devices/IotHubs",
            "properties": {
                "iotHubNamespace": "MyASAIoTHub",
                "sharedAccessPolicyName": "iothubowner",
                "sharedAccessPolicyKey": "accesspolicykey",
                "endpoint": "messages/events",
                "consumerGroupName": "$Default"
                }
        },
        "compression": {
            "type": "None"
        },
        "serialization": {
            "type": "Json",
            "properties": {
                "encoding": "UTF8"
            }
        }
    },
    "name": "IoTHubInput",
    "type": "Microsoft.StreamAnalytics/streamingjobs/inputs"
}

Eseguire quindi il cmdlet New-AzStreamAnalyticsInput e assicurarsi di sostituire il valore della variabile jobDefinitionFile con il percorso in cui è stato archiviato il file JSON della definizione dell'input del processo.

$jobInputName = "IoTHubInput"
$jobInputDefinitionFile = "C:\JobInputDefinition.json"
New-AzStreamAnalyticsInput `
  -ResourceGroupName $resourceGroup `
  -JobName $jobName `
  -File $jobInputDefinitionFile `
  -Name $jobInputName

Configurare l'output per il processo

Aggiungere un output al processo tramite il cmdlet New-AzStreamAnalyticsOutput. Questo cmdlet accetta il nome del processo, il nome dell'output del processo, il nome del gruppo di risorse e la definizione dell'output del processo come parametri. La definizione dell'output del processo è un file JSON che contiene le proprietà necessarie per configurare l'output del processo. In questo esempio come output viene usato l'archivio BLOB.

Nel computer locale creare un file denominato JobOutputDefinition.json e aggiungere i dati JSON seguenti. Assicurarsi di sostituire il valore di accountKey con la chiave di accesso dell'account di archiviazione corrispondente al valore archiviato in $storageAccountKey.

{
    "properties": {
        "datasource": {
            "type": "Microsoft.Storage/Blob",
            "properties": {
                "storageAccounts": [
                    {
                      "accountName": "asaquickstartstorage",
                      "accountKey": "<storage account key>"
                    }
                ],
                "container": "container1",
                "pathPattern": "output/",
                "dateFormat": "yyyy/MM/dd",
                "timeFormat": "HH"
            }
        },
        "serialization": {
            "type": "Json",
            "properties": {
                "encoding": "UTF8",
                "format": "LineSeparated"
            }
        }
    },
    "name": "BlobOutput",
    "type": "Microsoft.StreamAnalytics/streamingjobs/outputs"
}

Eseguire quindi il cmdlet New-AzStreamAnalyticsOutput. Assicurarsi di sostituire il valore della variabile jobOutputDefinitionFile con il percorso in cui è stato archiviato il file JSON della definizione dell'output del processo.

$jobOutputName = "BlobOutput"
$jobOutputDefinitionFile = "C:\JobOutputDefinition.json"
New-AzStreamAnalyticsOutput `
  -ResourceGroupName $resourceGroup `
  -JobName $jobName `
  -File $jobOutputDefinitionFile `
  -Name $jobOutputName -Force

Definire la query di trasformazione

Aggiungere una trasformazione al processo tramite il cmdlet New-AzStreamAnalyticsTransformation. Questo cmdlet accetta il nome del processo, il nome della trasformazione del processo, il nome del gruppo di risorse e la definizione della trasformazione del processo come parametri. Nel computer locale creare un file denominato JobTransformationDefinition.json e aggiungere i dati JSON seguenti. Il file JSON contiene un parametro di query che definisce la query di trasformazione:

{
    "name":"MyTransformation",
    "type":"Microsoft.StreamAnalytics/streamingjobs/transformations",
    "properties":{
        "streamingUnits":1,
        "script":null,
        "query":" SELECT * INTO BlobOutput FROM IoTHubInput WHERE Temperature > 27"
    }
}

Eseguire quindi il cmdlet New-AzStreamAnalyticsTransformation. Assicurarsi di sostituire il valore della variabile jobTransformationDefinitionFile con il percorso in cui è stato archiviato il file JSON della definizione della trasformazione del processo.

$jobTransformationName = "MyJobTransformation"
$jobTransformationDefinitionFile = "C:\JobTransformationDefinition.json"
New-AzStreamAnalyticsTransformation `
  -ResourceGroupName $resourceGroup `
  -JobName $jobName `
  -File $jobTransformationDefinitionFile `
  -Name $jobTransformationName -Force

Eseguire il simulatore IoT

  1. Aprire il simulatore online Azure IoT Raspberry Pi.

  2. Sostituire il segnaposto nella riga 15 con l'intera stringa di connessione del dispositivo hub IoT di Azure salvato in una sezione precedente.

  3. Fare clic su Esegui. L'output mostra i dati del sensore e i messaggi inviati all'hub IoT.

    Simulatore online Azure IoT Raspberry Pi

Avviare il processo di Analisi di flusso e controllare l'output

Avviare il processo tramite il cmdlet Start-AzStreamAnalyticsJob. Questo cmdlet accetta il nome del processo, il nome del gruppo di risorse, la modalità di avvio dell'output e l'ora di inizio come parametri. OutputStartMode accetta i valori JobStartTime, CustomTime o LastOutputEventTime. Per altre informazioni sugli elementi a cui fanno riferimento ognuno di questi valori, vedere la sezione sui parametri nella documentazione di PowerShell.

Dopo aver eseguito il cmdlet seguente, verrà restituito True come output se il processo viene avviato. Nel contenitore di archiviazione viene creata una cartella di output con i dati trasformati.

Start-AzStreamAnalyticsJob `
  -ResourceGroupName $resourceGroup `
  -Name $jobName `
  -OutputStartMode 'JobStartTime'

Pulire le risorse

Quando non sono più necessari, eliminare il gruppo di risorse, il processo di streaming e tutte le risorse correlate. Eliminando il processo si evita di pagare per le unità di streaming usate dal processo. Se si prevede di usare il processo in futuro, è possibile non eliminarlo e arrestarlo per il momento. Se non si intende continuare a usare il processo, eliminare tutte le risorse create con questa guida introduttiva eseguendo il cmdlet seguente:

Remove-AzResourceGroup `
  -Name $resourceGroup

Passaggi successivi

In questa guida introduttiva è stato distribuito un semplice processo di Analisi di flusso con PowerShell. È anche possibile distribuire processi di Analisi di flusso usando il portale di Azure e Visual Studio.

Per informazioni sulla configurazione di altre origini di input e sull'esecuzione del rilevamento in tempo reale, continuare con l'articolo seguente: