Stocker des données en périphérie avec le Stockage Blob Azure sur IoT Edge

S’applique à :Coche IoT Edge 1.4 IoT Edge 1.4

Important

IoT Edge 1.4 est la version prise en charge. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.

Stockage Blob Azure sur IoT Edge fournit une solution de stockage d’objets blob de blocs et d’objets blob d’ajout en périphérie. Un module de stockage de blobs sur votre appareil IoT Edge se comporte comme un service blob Azure, à ceci près que les blobs sont stockés localement sur votre appareil IoT Edge. Vous pouvez accéder à vos blobs avec les mêmes méthodes que celles du SDK Stockage Azure, ou aux appels d’API blob auxquels vous êtes déjà habitué. Cet article explique les concepts relatifs au Stockage Blob Azure sur le conteneur IoT Edge qui exécute un service d’objets blob sur votre appareil IoT Edge.

Ce module est utile dans les scénarios suivants :

  • Où les données doivent être stockées localement jusqu’à ce qu’elles puissent être traitées ou transférées vers le cloud. Ces données peuvent être des vidéos, des images, des données financières, des données médicales ou toute autre donnée non structurée.
  • Quand les appareils se trouvent à un endroit où la connectivité est limitée.
  • Quand vous souhaitez traiter efficacement les données en local pour obtenir une faible latence d’accès aux données, afin de pouvoir réagir à des situations d’urgence le plus rapidement possible.
  • Quand vous souhaitez réduire les coûts de bande passante et éviter de transférer des téraoctets de données vers le cloud. Vous pouvez traiter les données en local et envoyez uniquement les données traitées vers le cloud.

Ce module est fourni avec les fonctionnalités deviceToCloudUpload et deviceAutoDelete.

deviceToCloudUpload est une fonctionnalité configurable. Cette fonction vous permet de charger automatiquement les données à partir de votre stockage blob local vers Azure avec prise en charge de connectivité internet intermittente. Vous pouvez ainsi :

  • Activer/désactiver la fonctionnalité deviceToCloudUpload.
  • Choisissez l’ordre dans lequel les données sont copiées vers Azure comme NewestFirst ou OldestFirst.
  • Spécifiez le compte de stockage Azure vers lequel vous souhaitez que vos données soient téléchargées.
  • Spécifiez les conteneurs que vous voulez télécharger dans Azure. Ce module vous permet de spécifier des noms de conteneur source et cible.
  • Choisissez la possibilité de supprimer les objets blob immédiatement, après le téléchargement dans le stockage cloud.
  • Effectuez le chargement de blob complet (à l’aide de l’opération Put Blob) et le chargement de niveau bloc (à l’aide des opérations Put Block, Put Block List et Append Block).

Ce module utilise le téléchargement de niveau bloc, lorsque votre objet blob est constitué de blocs. Voici quelques scénarios courants :

  • Votre application met à jour des blocs d’un objet blob de blocs précédemment chargé ou ajoute de nouveaux blocs à un blob d’ajout, ce module charge uniquement les blocs mis à jour et pas le blob entier.
  • Si le module télécharge un objet blob lorsque vous perdez la connexion Internet, il ne téléchargera que les blocs restants et pas l’objet blob entier lorsque vous serez de nouveau connecté.

Si un arrêt inattendu du processus (par exemple, une panne de courant) se produit pendant le chargement d’un blob, tous les blocs qui devaient être chargés sont chargés à nouveau lorsque le module revient en ligne.

deviceAutoDelete est une fonctionnalité configurable. Cette fonction supprime automatiquement vos objets blob du stockage local lorsque la durée spécifiée (exprimée en minutes) expire. Vous pouvez ainsi :

  • Activer/désactiver la fonctionnalité deviceAutoDelete.
  • Spécifiez la durée en minutes (deleteAfterMinutes) après laquelle les blobs sont supprimés automatiquement.
  • Choisissez la possibilité de conserver l’objet blob pendant son chargement en cas d’expiration de la valeur deleteAfterMinutes.

Prérequis

Un appareil Azure IoT Edge :

  • Vous pouvez utiliser votre ordinateur de développement ou une machine virtuelle comme un appareil IoT Edge, en suivant les étapes décrites dans le Guide de démarrage rapide pour Linux ou pour les Appareils Windows.

  • Reportez-vous à Systèmes Azure IoT Edge pris en charge pour obtenir une liste des systèmes d’exploitation et architectures pris en charge. Le module de Stockage Blob Azure sur IoT Edge prend en charge les architectures suivantes :

    • Windows AMD64
    • Linux AMD64
    • Linux ARM32
    • Linux ARM64

Ressources cloud :

Un niveau standard IoT Hub dans Azure.

Propriétés deviceToCloudUpload et deviceAutoDelete

Utilisez les propriétés souhaitées du module pour définir les propriétés deviceToCloudUploadProperties et deviceAutoDeleteProperties. Les propriétés souhaitées peuvent être définies lors du déploiement ou modifiées ultérieurement en modifiant le jumeau de module sans avoir besoin de le redéployer. Nous vous recommandons de vérifier le « jumeau de module » et ses valeurs reported configuration et configurationValidation pour vous assurer qu’elles ont été correctement propagées.

deviceToCloudUploadProperties

Le nom de ce paramètre est deviceToCloudUploadProperties. Si vous utilisez le simulateur IoT Edge, définissez les valeurs sur les variables d’environnement associées pour ces propriétés, que vous trouverez dans la section Explication.

Propriété Valeurs possibles Explication
uploadOn true, false Définissez cette valeur sur false par défaut. Si vous souhaitez activer cette fonctionnalité, définissez ce champ sur true.

Variable d’environnement : deviceToCloudUploadProperties__uploadOn={false,true}
uploadOrder NewestFirst, OldestFirst Vous permet de choisir l’ordre dans lequel les données sont copiées vers Azure. Définissez cette valeur sur OldestFirst par défaut. L’ordre est déterminé par l’heure de dernière modification de l’objet blob.

Variable d’environnement : deviceToCloudUploadProperties__uploadOrder={NewestFirst,OldestFirst}
cloudStorageConnectionString "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>" est une chaîne de connexion qui vous permet de spécifier le compte de stockage vers lequel vous souhaitez que vos données soient téléchargées. Spécifiez Azure Storage Account Name, Azure Storage Account Key, End point suffix. Ajoutez la valeur EndpointSuffix appropriée d’Azure où les données sont chargées, elle varie entre Azure global, Azure Government et Microsoft Azure Stack.

Vous pouvez choisir de spécifier la chaîne de connexion SAS du stockage Azure ici. Toutefois, vous devez mettre à jour cette propriété lorsqu’elle expire. Les autorisations SAS peuvent inclure la création d’un accès pour les conteneurs et la création, l’écriture et l’ajout d’un accès pour les objets blob.

Variable d’environnement : deviceToCloudUploadProperties__cloudStorageConnectionString=<connection string>
storageContainersForUpload "<source container name1>": {"target": "<target container name>"}

"<source container name1>": {"target": "%h-%d-%m-%c"}

"<source container name1>": {"target": "%d-%c"}
Vous permet de spécifier les noms des conteneurs que vous voulez télécharger dans Azure. Ce module vous permet de spécifier des noms de conteneur source et cible. Si vous ne spécifiez pas le nom du conteneur cible, un nom de conteneur est automatiquement attribué, tel que <IoTHubName>-<IotEdgeDeviceID>-<ModuleName>-<SourceContainerName>. Vous pouvez créer des chaînes de modèle pour le nom du conteneur cible. Consultez la colonne des valeurs possibles.
* %h -> nom du hub IoT (entre 3 et 50 caractères).
* %d -> ID d’appareil IoT Edge (entre 1 et 129 caractères).
* %m -> nom du module (entre 1 et 64 caractères).
* %c -> nom du conteneur source (entre 3 et 63 caractères).

La taille maximale du nom d’un conteneur est de 63 caractères. Le nom est automatiquement attribué au nom du conteneur cible si la taille du conteneur dépasse 63 caractères. Dans ce cas, le nom est réduit à 15 caractères dans chaque section (IoTHubName, IotEdgeDeviceID, ModuleName, SourceContainerName).

Variable d’environnement : deviceToCloudUploadProperties__storageContainersForUpload__<sourceName>__target=<targetName>
deleteAfterUpload true, false Définissez cette valeur sur false par défaut. Si elle est définie sur true, les données sont automatiquement supprimées après avoir été chargées dans un stockage cloud.

ATTENTION : Si vous utilisez des objets blob d’ajout, ce paramètre les supprime du stockage local après un chargement réussi, et toutes les opérations de bloc d’ajout ultérieures à ces objets blob échouent. Utilisez ce paramètre avec précaution. Ne l’activez pas si votre application effectue des opérations d’ajout peu fréquentes ou ne prend pas en charge les opérations d’ajout continues

Variable d’environnement : deviceToCloudUploadProperties__deleteAfterUpload={false,true}.

deviceAutoDeleteProperties

Le nom de ce paramètre est deviceAutoDeleteProperties. Si vous utilisez le simulateur IoT Edge, définissez les valeurs sur les variables d’environnement associées pour ces propriétés, que vous trouverez dans la section Explication.

Propriété Valeurs possibles Explication
deleteOn true, false Définissez cette valeur sur false par défaut. Si vous souhaitez activer cette fonctionnalité, définissez ce champ sur true.

Variable d’environnement : deviceAutoDeleteProperties__deleteOn={false,true}
deleteAfterMinutes <minutes> Indiquez le temps en minutes. Le module supprime automatiquement vos objets blob du stockage local à l’expiration de cette valeur. Le nombre de minutes maximal actuellement autorisé est de 35 791.

Variable d’environnement : deviceAutoDeleteProperties__ deleteAfterMinutes=<minutes>
retainWhileUploading true, false Par défaut, elle est définie sur true et conserve l’objet blob pendant son chargement dans le stockage cloud si deleteAfterMinutes expire. Vous pouvez la définir sur false pour qu’elle supprime les données dès que deleteAfterMinutes expire. Remarque : Pour que cette propriété fonctionne, uploadOn doit être définie sur true.

ATTENTION : Si vous utilisez des objets blob d’ajout, ce paramètre les supprime du stockage local lorsque la valeur expire, et toutes les opérations de bloc d’ajout ultérieures à ces objets blob échouent. Vérifiez que la valeur d’expiration est suffisamment grande pour la fréquence prévue des opérations d’ajout effectuées par votre application.

Variable d’environnement : deviceAutoDeleteProperties__retainWhileUploading={false,true}

Utilisation du partage SMB comme stockage local

Vous pouvez fournir le partage SMB comme chemin de stockage local lorsque vous déployez le conteneur Windows de ce module sur l’hôte Windows.

Assurez-vous que le partage SMB et l’appareil IoT se trouvent dans des domaines mutuellement approuvés.

Vous pouvez exécuter la commande PowerShell New-SmbGlobalMapping pour mapper le partage SMB localement sur l’appareil IoT exécutant Windows.

Les étapes de configuration :

$creds = Get-Credential
New-SmbGlobalMapping -RemotePath <remote SMB path> -Credential $creds -LocalPath <Any available drive letter>

Par exemple :

$creds = Get-Credential
New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:

Cette commande utilise les informations d’identification pour s’authentifier auprès du serveur SMB distant. Ensuite, mappez le chemin d’accès du partage à distance à la lettre de lecteur G: (il peut s’agir de toute autre lettre de lecteur disponible). Le volume de données de l’appareil IoT est maintenant mappé à un chemin sur le lecteur G:.

Assurez-vous que l’utilisateur de l’appareil IoT peut lire/écrire sur le partage SMB distant.

Pour votre déploiement, la valeur de <storage mount> peut être G:/ContainerData:C:/BlobRoot.

Octroi de l’accès aux annuaires à l’utilisateur de conteneur sur Linux

Si vous utilisez le montage de volume pour le stockage dans vos options de création pour les conteneurs Linux, vous n’avez pas besoin d’effectuer d’étapes supplémentaires, mais si vous utilisez le montage de liaison, ces étapes sont requises pour exécuter le service correctement.

En suivant le principe du moindre privilège pour limiter les droits d’accès des utilisateurs aux autorisations minimales dont ils ont besoin pour effectuer leur travail, ce module comprend un utilisateur (nom : absie, ID : 11000) et un groupe d’utilisateurs (nom : absie, ID : 11000). Si le conteneur est démarré en tant que root (l’utilisateur par défaut est root), notre service est démarré en tant qu’utilisateur absie à faibles privilèges.

Avec ce comportement, la configuration des autorisations sur des liaisons de chemin d’hôte est essentielle pour que le service fonctionne correctement, sinon le service plante avec des erreurs d’accès refusé. Le chemin d’accès utilisé dans la liaison de répertoire doit être accessible à l’utilisateur de conteneur (par exemple : absie 11000). Vous pouvez autoriser l’utilisateur de conteneur à accéder au répertoire en exécutant ces commandes sur l’hôte :

sudo chown -R 11000:11000 <blob-dir>
sudo chmod -R 700 <blob-dir>

Par exemple :

sudo chown -R 11000:11000 /srv/containerdata
sudo chmod -R 700 /srv/containerdata

Si vous devez exécuter le service en tant qu’utilisateur autre que absie, vous pouvez spécifier votre ID d’utilisateur personnalisé dans createOptions, sous la propriété « User » de votre manifeste de déploiement. Dans ce cas, utilisez l’ID de groupe par défaut ou racine 0.

"createOptions": {
  "User": "<custom user ID>:0"
}

Accordez maintenant à l’utilisateur de conteneur un accès au répertoire

sudo chown -R <user ID>:<group ID> <blob-dir>
sudo chmod -R 700 <blob-dir>

Configurer des fichiers journaux

Le niveau du journal de sortie par défaut est « Info ». Pour modifier le niveau du journal de sortie, définissez la variable d’environnement LogLevel pour ce module dans le manifeste de déploiement. LogLevel accepte les valeurs suivantes :

  • Critique
  • Erreur
  • Avertissement
  • Infos
  • Déboguer

Pour plus d’informations sur la configuration des fichiers journaux de votre module, consultez ces meilleures pratiques de production.

Se connecter au module de stockage d’objets blob

Vous pouvez utiliser le nom du compte et la clé de compte que vous avez configurés pour que votre module accède au stockage d’objets blob sur votre appareil IoT Edge.

Spécifiez votre appareil IoT Edge en tant que point de terminaison d’objets blob pour toutes les demandes de stockage que vous lui adressez. Vous pouvez Créer une chaîne de connexion pour un point de terminaison de stockage explicite en utilisant les informations de l’appareil IoT Edge et le nom du compte que vous avez configuré.

  • Pour les modules qui sont déployés sur le même appareil, où le module de « Stockage Blob Azure sur IoT Edge » est en cours d’exécution, le point de terminaison d’objet blob est : http://<module name>:11002/<account name>.
  • Pour les modules ou applications s'exécutant sur un autre appareil, vous devez choisir le bon point de terminaison pour votre réseau. En fonction de la configuration de votre réseau, choisissez un format de point de terminaison de sorte que le trafic de données de votre module ou de votre application externe puisse atteindre l’appareil exécutant le module Stockage d’objets Blob Azure sur IoT Edge. Le point de terminaison d’objet blob pour ce scénario est l’un des suivants :
    • http://<device IP >:11002/<account name>
    • http://<IoT Edge device hostname>:11002/<account name>
    • http://<fully qualified domain name>:11002/<account name>

Important

Azure IoT Edge respecte la casse lorsque vous effectuez des appels de modules, et le SDK de stockage utilise également des minuscules par défaut. Même si le nom du module dans la place de marché Azure est AzureBlobStorageonIoTEdge, le passage de ce dernier en minuscules permet de s’assurer que vos connexions au module de stockage Blob Azure sur IoT Edge ne sont pas interrompues.

Exemples de démarrage rapide de Stockage Blob Azure

La documentation du Stockage Blob Azure comprend des guides de démarrage rapide avec des exemples de code dans différents langages. Vous pouvez exécuter ces exemples pour tester le Stockage Blob Azure sur IoT Edge en changeant le point de terminaison des objets blob pour le connecter à votre module de stockage d’objets blob local.

Les exemples de guides de démarrage rapide suivants utilisent des langages qui sont également pris en charge par IoT Edge, vous pouvez donc les déployer en tant que modules IoT Edge en même temps que le module de stockage d’objets blob :

  • .NET
    • Le module Stockage Blob Azure sur IoT Edge v1.4.0 et ses versions antérieures sont compatibles avec le SDK WindowsAzure.Storage 9.3.3, et la version v1.4.1 prend également en charge le SDK Azure.Storage.Blobs 12.8.0.
  • Python
    • Les versions antérieures à la version 2.1 du SDK Python présentent un problème connu où le module ne retourne pas l’heure de création de l’objet blob. En raison de ce problème, certaines méthodes comme les objets blob de liste ne fonctionnent pas. En tant que solution de contournement, définissez explicitement la version de l’API sur le client d’objet blob sur « 2017-04-17 ». Exemple : block_blob_service._X_MS_VERSION = '2017-04-17'
    • Exemple Append Blob
  • Node.JS
  • JS/HTML
  • Ruby
  • Go
  • PHP

Se connecter à votre stockage local avec l’Explorateur Stockage Microsoft Azure

Vous pouvez utiliser l’Explorateur Stockage Azure pour vous connecter à votre compte de stockage local.

  1. Télécharger et installer l’Explorateur Stockage Azure

  2. La dernière version de l’Explorateur Stockage Azure utilise une version plus récente de l’API de stockage non prise en charge par le module de stockage d’objets blob. Démarrez l’Explorateur de stockage Azure. Cliquez sur le menu Modifier. Vérifiez que Cibler les API Azure Stack Hub est sélectionné. Si ce n’est pas le cas, sélectionnez Cibler Azure Stack Hub. Redémarrez l’Explorateur Stockage Azure pour que le changement prenne effet. Cette configuration est requise pour la compatibilité avec votre environnement IoT Edge.

  3. Se connecter à Stockage Azure à l’aide d’une chaîne de connexion

  4. Fournissez la chaîne de connexion : DefaultEndpointsProtocol=http;BlobEndpoint=http://<host device name>:11002/<your local account name>;AccountName=<your local account name>;AccountKey=<your local account key>;

  5. Suivez les étapes pour vous connecter.

  6. Créer le conteneur à l’intérieur de votre compte de stockage local

  7. Lancez le chargement de fichiers en tant qu’objets blob de blocs ou objets blob d’ajout.

    Remarque

    Ce module ne prend pas en charge les objets blob de pages.

  8. Vous pouvez également choisir de vous connecter à vos comptes de stockage Azure dans Explorateur Stockage. Cette configuration vous offre une vue unique sur votre compte de stockage local et votre compte de stockage Azure

Opérations de stockage prises en charge

Les modules de stockage d’objets blob sur IoT Edge utilisent les kits SDK de stockage Azure et sont compatibles avec la version 17-04-2017 de l’API de stockage Azure pour les points de terminaison d’objets blob de blocs.

Les opérations de Stockage Blob Azure ne sont pas toutes prises en charge par le stockage Blob Azure sur IoT Edge. Cette section liste le statut de chacune d’entre elles.

Compte

Pris en charge :

  • Lister des conteneurs

Non pris en charge :

  • Obtenir et définir les propriétés du service BLOB
  • Demande d’objet blob préliminaire
  • Obtenir les statistiques du service BLOB
  • Obtenir les informations de compte

conteneurs

Pris en charge :

  • Créer et supprimer un conteneur
  • Obtenir les métadonnées et les propriétés de conteneur
  • Liste des objets blob
  • Obtenir et définir une ACL de conteneur
  • Définir les métadonnées d’un conteneur

Non pris en charge :

  • Louer à bail un conteneur

Objets blob

Pris en charge :

  • Placer, obtenir et supprimer un objet blob
  • Obtenir et définir les propriétés d’un objet blob
  • Obtenir et définir les métadonnées d’un objet blob

Non pris en charge :

  • Louer à bail un objet blob
  • Faire une capture instantanée d’un objet blob
  • Copier et abandonner la copie d’un objet blob
  • Annuler la suppression d’un objet blob
  • Définir un niveau d’objet blob

Objets blob de blocs

Pris en charge :

  • Placer un bloc
  • Placer et obtenir une liste de refus

Non pris en charge :

  • Placer un bloc à partir d’une URL

Objets blob d’ajout

Pris en charge :

  • Bloc d’ajout

Non pris en charge :

  • Ajouter un bloc à partir d’une URL

Intégration d’Event Grid sur IoT Edge

Attention

L’intégration à Event Grid sur IoT Edge est en version préliminaire

Ce module Stockage Blob Azure sur IoT Edge permet désormais d’intégrer Event Grid sur IoT Edge. Pour plus d’informations sur cette intégration, reportez-vous au didacticiel pour déployer les modules, publier des événements et vérifier la remise d’événements.

Notes de publication

Voici les notes de publication dans docker hub pour ce module. Vous pouvez trouver plus d’informations sur les correctifs de bogues et les mises à jour de correction dans les notes de publication d’une version spécifique.

Étapes suivantes

En savoir plus sur le Déploiement du Stockage Blob Azure sur IoT Edge

Tenez-vous informé des dernières mises à jour et annonces en consultant la page Notes de publication de Stockage Blob Azure sur IoT Edge.