Exercice : déployer une fonction Azure dans IoT Edge

Effectué

Filtrez les données de télémétrie envoyées par l’appareil.

Rappelez-vous que vous voulez réduire au minimum la quantité de données envoyées depuis chaque magasin. Pour réduire la quantité de données de télémétrie envoyées à votre application IoT Central, vous devrez filtrer les données sur l’appareil IoT Edge.

Dans cette unité, vous allez utiliser Azure Functions sur le périphérique IoT Edge pour implémenter un filtre. Ce filtre garantit que l’appareil envoie uniquement des données de télémétrie lorsque la température ambiante est supérieure à 21°C.

Remarque

Cet exercice est facultatif. Si vous souhaitez effectuer cet exercice, vous devrez créer un abonnement Azure avant de commencer. Si vous n’avez pas de compte Azure ou si vous ne souhaitez pas en créer un pour l’instant, vous pouvez lire les instructions pour comprendre les informations qui sont présentées.

Créer un registre de conteneurs

Votre appareil IoT Edge doit télécharger et installer le module Azure Functions personnalisé qui implémente le filtre. Les modules IoT Edge sont empaquetés en tant qu’images compatibles avec Docker que vous pouvez stocker dans un référentiel de conteneurs. Vous décidez d’utiliser le Azure Container Registry (ACR) pour stocker votre nouveau module. Vous utiliserez également ACR pour générer le conteneur à partir d’un projet source.

Exécutez les commandes suivantes pour ajouter un registre de conteneurs à votre groupe de ressources dans Azure :

REGISTRY_NAME="edgecentral$RANDOM"
az acr create -n $REGISTRY_NAME -g <rgn>[sandbox resource group name]</rgn> --sku Standard --admin-enabled true
az acr credential show -n $REGISTRY_NAME
echo "Your registry name is: $REGISTRY_NAME"

Prenez note du nom et des valeurs password du registre ; vous les utiliserez plus tard dans cette unité.

Créer un projet Azure Functions

Vous utilisez C# pour implémenter la fonction. Exécutez les commandes suivantes pour installer le modèle de projet, puis générer un squelette de projet :

dotnet new -i Microsoft.Azure.IoT.Edge.Function
dotnet new aziotedgefunction -n FilterFunction -r $REGISTRY_NAME.azurecr.io/filterfunction
cd FilterFunction
ls

Exécutez la commande suivante pour remplacer la fonction FilterFunction.cs existante par une implémentation qui filtre les valeurs de télémétrie de température de l’ordinateur :

curl -O https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/iotedge/FilterFunction.cs

Générez maintenant une image Docker et chargez-la dans votre registre de conteneurs. Patientez quelques minutes le temps que cette commande s’exécute :

az acr build --registry $REGISTRY_NAME --image filterfunction:v1 -f Dockerfile.amd64 .

Vous pouvez répertorier les images dans votre registre avec la commande suivante :

az acr repository list --name $REGISTRY_NAME

Mettre à jour le manifeste de déploiement

Pour utiliser le nouveau module de filtre sur votre appareil IoT Edge, mettez à jour le manifeste de déploiement avec la nouvelle version.

Téléchargez le nouveau manifeste de déploiement et la nouvelle définition d’interface sur votre ordinateur local en cliquant avec le bouton droit sur les liens suivants et en choisissant Enregistrer sous :

Ouvrez EnvironmentalSensorManifestFilter-1-4.json dans un éditeur de texte et mettez-le à jour pour utiliser le module de filtre de votre registre de conteneurs :

  1. Remplacez les trois instances de <YOUR CONTAINER REGISTRY NAME> par le nom de votre registre de conteneurs. Le nom ressemble à edgecentral27912.
  2. Remplacez <YOUR CONTAINER REGISTRY PASSWORD> par le mot de passe que vous avez noté précédemment dans cette unité.
  3. Enregistrez les modifications.

Cette version du manifeste de déploiement :

  • Ajoute le module avec la fonction Azure que vous avez créée :

    "filterfunction": {
      "version": "1.0",
      "type": "docker",
      "status": "running",
      "restartPolicy": "always",
      "settings": {
        "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1",
        "createOptions": ""
      }
    
  • Achemine la sortie du module SimulatedTemperatureSensor vers le module FilterFunction avant d’envoyer les données de télémétrie filtrées à votre application IoT Central :

    "routes": {
        "FilterFunctionToIoTCentral": "FROM /messages/modules/filterfunction/outputs/* INTO $upstream",
        "sensorToFilterFunction": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filterfunction/inputs/input1\")"
      },
    

Pour charger le nouveau manifeste de déploiement :

  1. Dans votre application IoT Central, accédez à Manifestes Edge et sélectionnez le manifeste Capteur environnemental.

  2. Dans la page Personnaliser, chargez le nouveau fichier EnvironmentalSensorManifestFilter-1-4.json. Sélectionnez Suivant.

  3. La page Vérifier et terminer affiche le nouveau module filterfunction. Sélectionnez Enregistrer.

  4. Accédez à l’appareil Appareil Edge - Capteur environnemental - store-001 à partir de la page Appareils, puis sélectionnez Modules.

  5. Dans la page Modules, sélectionnez Gérer le manifeste > Affecter un manifeste Edge. Sélectionnez le manifeste Capteur environnemental.

  6. La liste des modules inclut maintenant le module filterfunction en cours d’exécution :

Screenshot that shows the FilterFunction module running on the IoT Edge device.

Mettre à jour le modèle d’appareil pour utiliser le nouveau module

L’appareil IoT Edge envoie maintenant la télémétrie via l’interface filterfunction au lieu de l’interface Télémétrie. Par conséquent, vous devez mettre à jour le modèle et les vues d’appareil :

  1. Accédez à Appareil Edge - Capteur environnemental dans la page Modèles d’appareil.

  2. Sélectionnez Modules, puis Importer des modules à partir du manifeste.

  3. Dans la boîte de dialogue Importer des modules, sélectionnez Capteur environnemental, puis Importer.

Screenshot that shows the FilterFunction module added to the device template.

Le nouveau module envoie maintenant les données de télémétrie à IoT Central. Ensuite, ajoutez une interface au nouveau module de filtre qui spécifie les données de télémétrie et mettez à jour le graphique :

  1. Sélectionnez Module FilterFunction, puis + Ajouter une interface héritée. Vous devrez peut-être sélectionner ... pour afficher cette option.
  2. Choisissez la vignette Importer l’interface. Sélectionnez le fichier TelemetryInterface.json que vous avez téléchargé précédemment.

Vous pouvez supprimer l’interface Télémétrie d’origine, car le SimulatedTemperatureModule n’envoie plus de données de télémétrie directement à IoT Central. Le formulaire de sortie de ce module est routé vers le module FilterFunction par le runtime IoT Edge :

  1. Sélectionnez l’interface Télémétrie dans le module SimulatedTemperatureSensor .
  2. Sélectionnez Supprimer, puis confirmez l’opération.

Modifiez la vue Afficher les données de télémétrie de l’appareil IoT Edge pour afficher les données de télémétrie envoyées par le module FilterFunction :

  1. Dans le modèle d’appareil, sélectionnez la vue Afficher les données de télémétrie de l’appareil IoT Edge, puis sélectionnez l’option Modifier sur la vignette du graphique.
  2. Ajoutez les types de télémétrie ambiant/température, humidité, machine/température et pression.
  3. Sélectionnez Mettre à jour, puis Enregistrer pour enregistrer vos modifications.
  4. Sélectionnez Publier pour publier la nouvelle version du modèle d’appareil.

Vérifier votre travail

Pour visualiser les données de télémétrie filtrées provenant de votre appareil IoT Edge :

  1. Accédez à l’appareil store-001 dans la page Appareils.

  2. Sélectionnez la vue Afficher les données de télémétrie de l’appareil IoT Edge.

  3. Vous pouvez afficher les données de télémétrie filtrées sur le graphique. Aucune valeur ne s’affiche quand la température ambiante moyenne est inférieure à 21,0 degrés.

    Screenshot that shows telemetry plot with no average ambient temperature values less than 21.

Si l’appareil cesse d’envoyer de la télémétrie, c’est probablement dû au fait que le module SimulatedTemperatureSensor s’arrête après avoir envoyé 500 messages. Si vous redémarrez la machine virtuelle, le comptage est rétabli, et vous verrez que les données de télémétrie commencent à fluctuer de nouveau :

az vm restart --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name $(az vm list --resource-group <rgn>[sandbox resource group name]</rgn> --query [0].name -o tsv)