Partager via


Démarrage rapide : Déployer un hub Azure IoT et un compte de stockage à l'aide de Bicep

Dans ce guide de démarrage rapide, vous utilisez Bicep pour créer un hub IoT, un compte de stockage Azure et un itinéraire afin d’envoyer des messages du hub IoT au stockage. Le hub est configuré de sorte que les messages qui lui sont envoyés sont automatiquement routés vers le compte de stockage s’ils remplissent la condition de routage. À la fin de ce guide de démarrage rapide, vous pouvez ouvrir le compte de stockage et voir les messages envoyés.

Bicep est un langage spécifique à un domaine (DSL) qui utilise la syntaxe déclarative pour déployer des ressources Azure. Il fournit une syntaxe concise, une cohérence des types fiable et une prise en charge de la réutilisation du code. Bicep offre la meilleure expérience de création pour vos solutions d’infrastructure en tant que code dans Azure.

Prérequis

Examiner le fichier Bicep

Le fichier Bicep utilisé dans ce démarrage rapide est appelé 101-iothub-auto-route-messages et provient des modèles de démarrage rapide Azure.

Deux ressources Azure sont définies dans le fichier Bicep :

@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

Déployer le fichier Bicep

Cette section fournit les étapes de déploiement du fichier Bicep.

  1. Téléchargez le fichier main.bicep à partir du référentiel de modèles du guide démarrage rapide Azure.

  2. Créez les ressources en déployant le fichier Bicep à l’aide d’Azure CLI.

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

    Le déploiement prend plusieurs minutes. Une fois le déploiement terminé, vous devez voir la sortie détaillant les ressources déployées.

Envoyer des messages appareil-à-cloud

Dans cette section, vous inscrivez un appareil dans votre nouveau hub IoT, puis envoyez des messages de cet appareil au hub IoT. L’itinéraire que le fichier Bicep a configuré dans le hub IoT envoie uniquement des messages au stockage s’ils contiennent la propriété de message level=storage. Pour tester que cette condition de routage fonctionne comme prévu, nous allons envoyer des messages avec cette propriété et d’autres sans elle.

Conseil

Ce guide de démarrage rapide utilise l’appareil simulé Azure CLI pour des raisons pratiques. Pour obtenir un exemple de code d’envoi de messages appareil-à-cloud avec des propriétés de message pour le routage, consultez HubRoutingSample dans le Kit de développement logiciel (SDK) Azure IoT pour .NET.

  1. Récupérez le nom du hub IoT que le modèle a créé pour vous.

    Si vous avez utilisé les commandes par défaut dans la section précédente, vos ressources ont été créées dans le groupe de ressources ContosoResourceGrp . Si vous avez utilisé un autre groupe de ressources, mettez à jour la commande suivante pour qu’elle y corresponde.

    az iot hub list --resource-group ContosoResourceGrp --output table
    
  2. Copiez le nom de votre hub IoT à partir de la sortie. Le format utilisé devrait être le suivant : contosoHub{randomidentifier}

  3. Ajoutez un appareil au hub.

    az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName} 
    
  4. Simulez l’appareil et envoyez des messages appareil-à-cloud.

    Le paramètre --data nous permet de définir le corps du message.

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

    Le simulateur envoie 100 messages, puis se déconnecte. Dans le cadre de ce démarrage rapide, vous n’avez pas besoin d’attendre l’envoi de la totalité des messages.

    Conseil

    Azure CLI n’imprime pas les messages à mesure qu’il les envoie. Si vous souhaitez surveiller les messages au fur et à mesure qu’ils arrivent à votre hub, vous pouvez installer l’extension Azure IoT Hub pour Visual Studio Code et l’utiliser pour surveiller le point de terminaison intégré.

  5. Envoyer des messages appareil-à-cloud à router vers le stockage.

    Le paramètre --properties nous permet d’ajouter des propriétés système, application ou message au message par défaut. Pour ce guide de démarrage rapide, l’itinéraire dans votre hub IoT recherche des messages qui contiennent la propriété de message level=storage.

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

Évaluez les messages routés

  1. Connectez-vous au portail Azure, sélectionnez le groupe de ressources, puis le compte de stockage.

  2. Explorez le compte de stockage jusqu’à trouver les fichiers.

    Examiner les fichiers du compte de stockage

  3. Sélectionnez un des fichiers et sélectionnez Télécharger, puis téléchargez le fichier à un emplacement que vous pouvez retrouver ultérieurement. Son nom est un nombre, par exemple 47. Ajoutez .txt à la fin, puis double-cliquez sur le fichier pour l’ouvrir.

  4. Lorsque vous ouvrez le fichier, chaque ligne correspond à un message distinct. Le corps de chaque message est également chiffré. Il doit vous permettre d’effectuer des requêtes sur le corps du message.

    Voir les messages envoyés

    Remarque

    Ces messages sont encodés au format UTF-8 et base64. Si vous relisez le message, vous devez le décoder des formats base64 et UTF-8 pour pouvoir lire au format ASCII. Si vous êtes intéressé, vous pouvez utiliser la méthode ReadOneRowFromFile du tutoriel Routage pour en lire un depuis un de ces fichiers de messages et le décoder en ASCII. ReadOneRowFromFile se trouve dans le référentiel du Kit de développement logiciel (SDK) C# IoT que vous avez décompressé pour ce démarrage rapide. Voici le chemin d’accès à partir du haut de ce dossier : ./iothub/device/samples/how to guides/HubRoutingSample/Program.cs. Définissez le booléen readTheFile sur true et codez en dur le chemin d’accès au fichier sur le disque. Il ouvrira et traduira la première ligne du fichier.

Dans ce guide de démarrage rapide, vous avez déployé un fichier Bicep pour créer un hub IoT et un compte de stockage, puis vous avez exécuté un programme pour envoyer des messages au hub. Les messages sont routés en fonction de leurs propriétés de message et stockés dans le compte de stockage où ils peuvent être affichés.

Nettoyer les ressources

Quand vous n’avez plus besoin des ressources que vous avez créées, supprimez le groupe de ressources.

az group delete --name exampleRG

Étapes suivantes