Rychlý start: Nasazení centra Azure IoT a účtu úložiště pomocí Bicep

V tomto rychlém startu pomocí Bicep vytvoříte Centrum IoT, účet Azure Storage a trasu pro odesílání zpráv z IoT Hubu do úložiště. Centrum je nakonfigurované tak, aby se zprávy odeslané do centra automaticky směrovaly do účtu úložiště, pokud splňují podmínku směrování. Na konci tohoto rychlého startu můžete otevřít účet úložiště a zobrazit odeslané zprávy.

Bicep je jazyk specifický pro doménu (DSL), který k nasazování prostředků Azure používá deklarativní syntaxi. Poskytuje stručnou syntaxi, spolehlivou bezpečnost typů a podporu pro opakované použití kódu. Bicep nabízí nejlepší prostředí pro vytváření obsahu pro řešení infrastruktury jako kódu v Azure.

Požadavky

Kontrola souboru Bicep

Soubor Bicep použitý v tomto rychlém startu se volá 101-iothub-auto-route-messages ze šablon Rychlý start Azure.

V souboru Bicep se definují dva prostředky Azure:

@description('Define the project name or prefix for all objects.')
@minLength(1)
@maxLength(11)
param projectName string = 'contoso'

@description('The datacenter to use for the deployment.')
param location string = resourceGroup().location

@description('The SKU to use for the IoT Hub.')
param skuName string = 'S1'

@description('The number of IoT Hub units.')
param skuUnits int = 1

@description('Partitions used for the event stream.')
param d2cPartitions int = 4

var iotHubName = '${projectName}Hub${uniqueString(resourceGroup().id)}'
var storageAccountName = '${toLower(projectName)}${uniqueString(resourceGroup().id)}'
var storageEndpoint = '${projectName}StorageEndpont'
var storageContainerName = '${toLower(projectName)}results'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {
    allowBlobPublicAccess: false
    minimumTlsVersion: 'TLS1_2'
    supportsHttpsTrafficOnly: true
  }
}

resource container 'Microsoft.Storage/storageAccounts/blobServices/containers@2023-01-01' = {
  name: '${storageAccountName}/default/${storageContainerName}'
  properties: {
    publicAccess: 'None'
  }
  dependsOn: [
    storageAccount
  ]
}

resource IoTHub 'Microsoft.Devices/IotHubs@2023-06-30' = {
  name: iotHubName
  location: location
  sku: {
    name: skuName
    capacity: skuUnits
  }
  properties: {
    eventHubEndpoints: {
      events: {
        retentionTimeInDays: 1
        partitionCount: d2cPartitions
      }
    }
    routing: {
      endpoints: {
        storageContainers: [
          {
            connectionString: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
            containerName: storageContainerName
            fileNameFormat: '{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}'
            batchFrequencyInSeconds: 100
            maxChunkSizeInBytes: 104857600
            encoding: 'JSON'
            name: storageEndpoint
          }
        ]
      }
      routes: [
        {
          name: 'ContosoStorageRoute'
          source: 'DeviceMessages'
          condition: 'level="storage"'
          endpointNames: [
            storageEndpoint
          ]
          isEnabled: true
        }
      ]
      fallbackRoute: {
        name: '$fallback'
        source: 'DeviceMessages'
        condition: 'true'
        endpointNames: [
          'events'
        ]
        isEnabled: true
      }
    }
    messagingEndpoints: {
      fileNotifications: {
        lockDurationAsIso8601: 'PT1M'
        ttlAsIso8601: 'PT1H'
        maxDeliveryCount: 10
      }
    }
    enableFileUploadNotifications: false
    cloudToDevice: {
      maxDeliveryCount: 10
      defaultTtlAsIso8601: 'PT1H'
      feedback: {
        lockDurationAsIso8601: 'PT1M'
        ttlAsIso8601: 'PT1H'
        maxDeliveryCount: 10
      }
    }
  }
}

output name string = IoTHub.name
output resourceId string = IoTHub.id
output resourceGroupName string = resourceGroup().name
output location string = location

Nasazení souboru Bicep

Tato část obsahuje postup nasazení souboru Bicep.

  1. Stáhněte si soubor main.bicep z úložiště Šablony pro rychlý start Azure.

  2. Prostředky vytvoříte nasazením souboru Bicep pomocí Azure CLI.

    az group create --name ContosoResourceGrp --location eastus
    az deployment group create --resource-group exampleRG --template-file main.bicep
    

    Dokončení nasazení trvá několik minut. Po dokončení nasazení by se měl zobrazit výstup s podrobnostmi o nasazených prostředcích.

Odesílání zpráv ze zařízení do cloudu

V této části zaregistrujete zařízení v novém centru IoT a pak odešlete zprávy z tohoto zařízení do IoT Hubu. Trasa, kterou soubor Bicep nakonfigurovaný v Centru IoT odesílá zprávy pouze do úložiště, pokud obsahují vlastnost level=storagezprávy . Abychom mohli otestovat, že tato podmínka směrování funguje podle očekávání, pošleme některé zprávy s touto vlastností a některými bez nich.

Tip

V tomto rychlém startu se simulované zařízení Azure CLI používá k usnadnění. Příklad kódu odesílání zpráv typu zařízení-cloud s vlastnostmi zpráv pro směrování najdete v tématu HubRoutingSample v sadě Azure IoT SDK pro .NET.

  1. Načtěte název centra IoT, který pro vás šablona vytvořila.

    Pokud jste použili výchozí příkazy v předchozí části, vaše prostředky byly vytvořeny ve skupině prostředků ContosoResourceGrp . Pokud jste použili jinou skupinu prostředků, aktualizujte následující příkaz tak, aby odpovídal.

    az iot hub list --resource-group ContosoResourceGrp --output table
    
  2. Zkopírujte název centra IoT z výstupu. Měla by být naformátovaná takto: contosoHub{randomidentifier}

  3. Přidejte zařízení do centra.

    az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName} 
    
  4. Simulujte zařízení a odesílejte zprávy typu zařízení-cloud.

    Parametr --data nám umožňuje nastavit text zprávy.

    az iot device simulate \
      --device-id contosoDevice \
      --hub-name {YourIoTHubName} \
      --data "This message won't be routed."
    

    Simulátor odešle 100 zpráv a pak se odpojí. Pro účely tohoto rychlého startu nemusíte čekat na všech 100.

    Tip

    Azure CLI netiskne zprávy při jejich odesílání. Pokud chcete sledovat zprávy při příchodu do centra, můžete nainstalovat rozšíření Azure IoT Hub pro Visual Studio Code a použít ho k monitorování integrovaného koncového bodu.

  5. Odesílání zpráv typu zařízení-cloud, které se mají směrovat do úložiště

    Tento --properties parametr nám umožňuje přidat do výchozí zprávy vlastnosti zprávy, aplikace nebo systému. V tomto rychlém startu trasa v centru IoT hledá zprávy, které obsahují vlastnost level=storagezprávy .

    az iot device simulate \
      --device-id contosoDevice \
      --hub-name {YourIoTHubName} \
      --properties level=storage \
      --data "This message will be routed to storage."
    

Kontrola směrovaných zpráv

  1. Přihlaste se k webu Azure Portal a vyberte skupinu prostředků a pak vyberte účet úložiště.

  2. Přejděte k podrobnostem účtu úložiště, dokud nenajdete soubory.

    Look at the storage account files

  3. Vyberte jeden ze souborů a vyberte Stáhnout a stáhnout soubor do umístění, které najdete později. Má název, který je číselný, například 47. Na konec přidejte soubor .txt a poklikáním otevřete soubor.

  4. Když soubor otevřete, každý řádek je určený pro jinou zprávu. Text každé zprávy je také zašifrovaný. Aby bylo možné provádět dotazy na text zprávy, musí být v pořádku.

    View the sent messages

    Poznámka:

    Tyto zprávy jsou kódovány v kódování UTF-8 a base64. Pokud zprávu přečtete zpět, musíte ji dekódovat z base64 a utf-8, abyste ji mohli číst jako ASCII. Pokud vás zajímá, můžete metodu ReadOneRowFromFile v kurzu směrování přečíst pro jeden z těchto souborů zpráv a dekódovat ji do ASCII. ReadOneRowFromFile je v úložišti sady IoT C# SDK, které jste pro účely tohoto rychlého startu rozbalí. Tady je cesta z horní části této složky: ./iothub/device/samples/how to guides/HubRoutingSample/Program.cs Nastavte logickou hodnotu readTheFile na true a pevně zakódujte cestu k souboru na disku a otevře se a přeloží první řádek v souboru.

V tomto rychlém startu jste nasadili soubor Bicep, abyste vytvořili Centrum IoT a účet úložiště a pak spustili program pro odesílání zpráv do centra. Zprávy se směrují na základě jejich vlastností zprávy a ukládají se do účtu úložiště, kde se dají zobrazit.

Vyčištění prostředků

Pokud už prostředky, které jste vytvořili, nepotřebujete, odstraňte skupinu prostředků.

az group delete --name exampleRG

Další kroky