Share via


Rövid útmutató: Azure IoT Hub és tárfiók üzembe helyezése a Bicep használatával

Ebben a rövid útmutatóban a Bicep használatával hoz létre egy IoT Hubot, egy Azure Storage-fiókot, valamint egy útvonalat, amellyel üzeneteket küldhet az IoT Hubról a tárolóba. A központ úgy van konfigurálva, hogy a központnak küldött üzenetek automatikusan a tárfiókba legyenek irányítva, ha megfelelnek az útválasztási feltételnek. A rövid útmutató végén megnyithatja a tárfiókot, és megtekintheti az elküldött üzeneteket.

Bicep is a domain-specific language (DSL) that uses declarative syntax to deploy Azure resources. Tömör szintaxist és megbízható típusbiztonságot kínál, valamint biztosítja a kódok újrafelhasználhatóságát. A Bicep a legjobb szerzői élményt nyújtja az Azure-beli infrastruktúra-kódmegoldásokhoz.

Előfeltételek

A Bicep-fájl áttekintése

Az ebben a rövid útmutatóban használt Bicep-fájlt az Azure Gyorsindítási sablonokból hívjuk meg101-iothub-auto-route-messages.

Két Azure-erőforrás van definiálva a Bicep-fájlban:

@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

A Bicep-fájl üzembe helyezése

Ez a szakasz a Bicep-fájl üzembe helyezésének lépéseit ismerteti.

  1. Töltse le a main.bicep fájlt az Azure Gyorsindítási sablonok adattárából.

  2. Hozza létre az erőforrásokat a Bicep-fájl Azure CLI-vel történő üzembe helyezésével.

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

    Az üzembe helyezés több percet is igénybe vehet. Amikor az üzembe helyezés befejeződik, látnia kell az üzembe helyezett erőforrásokat részletező kimenetet.

Eszközről felhőbe irányuló üzenetek küldése

Ebben a szakaszban regisztrál egy eszközt az új IoT Hubon, majd üzeneteket küld az eszközről az IoT Hubnak. Az IoT Hubban konfigurált Bicep-fájl által konfigurált útvonal csak akkor küld üzeneteket a tárolónak, ha tartalmazzák az üzenettulajdonságot level=storage. Annak ellenőrzéséhez, hogy ez az útválasztási feltétel a várt módon működik-e, küldünk néhány üzenetet ezzel a tulajdonsággal, és néhányat anélkül.

Tipp.

Ez a rövid útmutató az Azure CLI szimulált eszközét használja a kényelem érdekében. Az eszközről a felhőbe irányuló üzenetek útválasztáshoz használható üzenettulajdonságokkal történő küldéséhez lásd : HubRoutingSample a .NET-hez készült Azure IoT SDK-ban.

  1. Kérje le annak az IoT Hubnak a nevét, amelyet a sablon létrehozott Önnek.

    Ha az előző szakaszban az alapértelmezett parancsokat használta, az erőforrások a ContosoResourceGrp erőforráscsoportban lettek létrehozva. Ha másik erőforráscsoportot használt, frissítse a következő parancsot az egyezéshez.

    az iot hub list --resource-group ContosoResourceGrp --output table
    
  2. Másolja ki az IoT Hub nevét a kimenetből. Úgy kell formázni, mint contosoHub{randomidentifier}

  3. Adjon hozzá egy eszközt a központhoz.

    az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName} 
    
  4. Szimulálja az eszközt, és küldjön eszközről felhőbe irányuló üzeneteket.

    A --data paraméter lehetővé teszi az üzenet törzsének beállítását.

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

    A szimulátor 100 üzenetet küld, majd megszakad. Ebben a rövid útmutatóban nem kell mind a 100-ra várnia.

    Tipp.

    Az Azure CLI nem nyomtatja ki az üzeneteket, miközben elküldi őket. Ha meg szeretné tekinteni az üzeneteket a központ érkezésekor, telepítheti a Visual Studio Code Azure IoT Hub-bővítményét, és használhatja a beépített végpont figyelésére.

  5. Az eszközről a felhőbe irányuló üzenetek küldése a tárolóba irányítandó üzenetek küldéséhez.

    A --properties paraméter lehetővé teszi, hogy üzenet-, alkalmazás- vagy rendszertulajdonságokat adjunk hozzá az alapértelmezett üzenethez. Ebben a rövid útmutatóban az IoT Hub útvonala olyan üzeneteket keres, amelyek tartalmazzák az üzenet tulajdonságát level=storage.

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

Átirányított üzenetek áttekintése

  1. Jelentkezzen be az Azure Portalra , válassza ki az erőforráscsoportot, majd válassza ki a tárfiókot.

  2. Fúrjon le a tárfiókba, amíg nem talál fájlokat.

    Look at the storage account files

  3. Válassza ki az egyik fájlt, majd válassza a Letöltés lehetőséget, és töltse le a fájlt egy későbbi helyen. A neve numerikus, például 47. Adja hozzá a .txt fájlt a végéhez, majd kattintson duplán a fájlra a megnyitásához.

  4. A fájl megnyitásakor minden sor egy másik üzenethez tartozik. Az egyes üzenetek törzse is titkosítva van. Ahhoz, hogy lekérdezéseket hajthasson végre az üzenet törzsén.

    View the sent messages

    Megjegyzés:

    Ezek az üzenetek UTF-8-ban és base64-ben vannak kódolva. Ha visszaolvassa az üzenetet, a base64-ből és az utf-8-ból kell dekódolnia, hogy ASCII-ként olvashassa. Ha érdekli, az útválasztási oktatóanyag ReadOneRowFromFile metódusával elolvashat egyet az üzenetfájlok egyikéből, és asCII-re kódolhatja. A ReadOneRowFromFile abban az IoT C# SDK-adattárban található, amelyet a rövid útmutatóhoz kibontott. A mappa tetejéről a következő elérési út található: ./iothub/device/samples/how to guides/HubRoutingSample/Program.cs Állítsa a logikai readTheFile értéket igaz értékre, és kódolja a lemezen található fájl elérési útját, és megnyitja és lefordítja a fájl első sorát.

Ebben a rövid útmutatóban üzembe helyezett egy Bicep-fájlt egy IoT Hub és egy tárfiók létrehozásához, majd futtatott egy programot, amely üzeneteket küld a központnak. Az üzenetek az üzenet tulajdonságaik alapján vannak irányítva, és a tárfiókban vannak tárolva, ahol megtekinthetők.

Clean up resources

Ha már nincs szüksége a létrehozott erőforrásokra, törölje az erőforráscsoportot.

az group delete --name exampleRG

További lépések