Dela via


Snabbstart: Distribuera en Azure IoT-hubb och ett lagringskonto med Bicep

I den här snabbstarten använder du Bicep för att skapa en IoT-hubb, ett Azure Storage-konto och en väg för att skicka meddelanden från IoT-hubben till lagringen. Hubben är konfigurerad så att meddelanden som skickas till hubben automatiskt dirigeras till lagringskontot om de uppfyller routningsvillkoret. I slutet av den här snabbstarten kan du öppna lagringskontot och se meddelandena som skickas.

Bicep är ett domänspecifikt språk (DSL) som använder deklarativ syntax för att distribuera Azure-resurser. Det ger koncis syntax, tillförlitlig typsäkerhet och stöd för återanvändning av kod. Bicep erbjuder den bästa redigeringsupplevelsen för dina infrastruktur-som-kod-lösningar i Azure.

Förutsättningar

Granska Bicep-filen

Bicep-filen som används i den här snabbstarten anropas 101-iothub-auto-route-messages från Azure-snabbstartsmallar.

Två Azure-resurser definieras i Bicep-filen:

@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

Distribuera Bicep-filen

Det här avsnittet innehåller stegen för att distribuera Bicep-filen.

  1. Ladda ned filen main.bicep från lagringsplatsen för Azure-snabbstartsmallar.

  2. Skapa resurserna genom att distribuera Bicep-filen med hjälp av Azure CLI.

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

    Distributionen tar normalt flera minuter för att slutföras. När distributionen är klar bör du se utdata som beskriver de distribuerade resurserna.

Skicka meddelanden från enhet till moln

I det här avsnittet registrerar du en enhet i din nya IoT-hubb och skickar sedan meddelanden från den enheten till IoT Hub. Den väg som Bicep-filen som konfigurerats i IoT-hubben skickar bara meddelanden till lagringen om de innehåller meddelandeegenskapen level=storage. För att testa att det här routningsvillkoret fungerar som förväntat skickar vi några meddelanden med den egenskapen och några utan.

Dricks

Den här snabbstarten använder den simulerade Azure CLI-enheten för enkelhetens skull. Ett kodexempel på hur du skickar meddelanden från enhet till moln med meddelandeegenskaper för routning finns i HubRoutingSample i Azure IoT SDK för .NET.

  1. Hämta namnet på den IoT-hubb som mallen skapade åt dig.

    Om du använde standardkommandona i föregående avsnitt skapades dina resurser i resursgruppen ContosoResourceGrp . Om du använde en annan resursgrupp uppdaterar du följande kommando så att det matchar.

    az iot hub list --resource-group ContosoResourceGrp --output table
    
  2. Kopiera namnet på din IoT-hubb från utdata. Den ska formateras som contosoHub{randomidentifier}

  3. Lägg till en enhet i hubben.

    az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName} 
    
  4. Simulera enheten och skicka meddelanden från enhet till moln.

    Med --data parametern kan vi ange meddelandetexten.

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

    Simulatorn skickar 100 meddelanden och kopplar sedan från. Du behöver inte vänta på alla 100 i den här snabbstarten.

    Dricks

    Azure CLI skriver inte ut meddelandena när de skickas. Om du vill se meddelandena när du kommer till din hubb kan du installera Azure IoT Hub-tillägget för Visual Studio Code och använda det för att övervaka den inbyggda slutpunkten.

  5. Skicka meddelanden från enhet till moln som ska dirigeras till lagring.

    Med --properties parametern kan vi lägga till egenskaper för meddelande, program eller system i standardmeddelandet. För den här snabbstarten letar vägen i din IoT-hubb efter meddelanden som innehåller meddelandeegenskapen level=storage.

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

Granska dirigerade meddelanden

  1. Logga in på Azure Portal och välj resursgruppen och välj sedan lagringskontot.

  2. Öka detaljnivån i lagringskontot tills du hittar filer.

    Titta på lagringskontofilerna

  3. Välj en av filerna och välj Ladda ned och ladda ned filen till en plats som du kan hitta senare. Den har ett namn som är numeriskt, till exempel 47. Lägg till .txt i slutet och dubbelklicka sedan på filen för att öppna den.

  4. När du öppnar filen är varje rad för ett annat meddelande. Brödtexten för varje meddelande krypteras också. Det måste vara för att du ska kunna utföra frågor mot meddelandets brödtext.

    Visa skickade meddelanden

    Kommentar

    Dessa meddelanden kodas i UTF-8 och base64. Om du läser tillbaka meddelandet måste du avkoda det från base64 och utf-8 för att kunna läsa det som ASCII. Om du är intresserad kan du använda metoden ReadOneRowFromFile i routningsguiden för att läsa en för från en av dessa meddelandefiler och avkoda den till ASCII. ReadOneRowFromFile finns på IoT C# SDK-lagringsplatsen som du har packat upp för den här snabbstarten. Här är sökvägen längst upp i mappen: ./iothub/device/samples/how to guides/HubRoutingSample/Program.cs Ange booleskt readTheFile värde till true och hårdkoda sökvägen till filen på disken, så öppnas och översätts den första raden i filen.

I den här snabbstarten distribuerade du en Bicep-fil för att skapa en IoT-hubb och ett lagringskonto och kör sedan ett program för att skicka meddelanden till hubben. Meddelandena dirigeras baserat på deras meddelandeegenskaper och lagras i lagringskontot där de kan visas.

Rensa resurser

När du inte längre behöver de resurser som du skapade tar du bort resursgruppen.

az group delete --name exampleRG

Nästa steg