Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les définitions de graphique sont essentielles au développement WASM, car elles définissent la façon dont vos modules se connectent aux flux de données et aux connecteurs. Comprendre la relation entre les définitions de graphiques et les graphiques de flux de données ou les connecteurs vous aide à développer efficacement.
Cet article se concentre sur la création et la configuration des définitions de graphique YAML. Pour plus d’informations sur le déploiement et le test des graphiques de flux de données, consultez Déployer des modules webAssembly (WASM) et des définitions de graphiques.
Important
Actuellement, les graphiques de flux de données prennent uniquement en charge les points de terminaison MQTT, Kafka et OpenTelemetry. D’autres types de points de terminaison tels que Data Lake, Microsoft Fabric OneLake, Azure Data Explorer et Stockage local ne sont pas pris en charge. Pour plus d’informations, consultez la section Problèmes connus.
Important
Actuellement, le seul connecteur qui prend en charge les définitions de graphiques pour le traitement personnalisé est le connecteur HTTP/REST.
Structure d’une définition de graphique
Les définitions de graphiques suivent un schéma JSON formel qui valide la structure et garantit la compatibilité. La configuration comprend :
- Configuration requise pour la compatibilité des versions de l’API et de la bibliothèque hôte
- Configurations de module pour les paramètres d’exécution et la personnalisation de l’opérateur
- Opérations qui définissent des nœuds de traitement dans votre flux de travail
- Connexions qui spécifient le routage du flux de données entre les opérations
- Schémas pour la validation facultative des données
Structure de graphique de base
metadata:
$schema: "https://www.schemastore.org/aio-wasm-graph-config-1.0.0.json"
name: "Simple graph"
description: "A simple graph with a source, a map module, and a sink"
version: "1.0.0"
vendor: "Microsoft"
moduleRequirements:
apiVersion: "1.1.0"
runtimeVersion: "1.1.0"
operations:
- operationType: "source"
name: "data-source"
- operationType: "map"
name: "my-operator/map"
module: "my-operator:1.0.0"
- operationType: "sink"
name: "data-sink"
connections:
- from: { name: "data-source" }
to: { name: "my-operator/map" }
- from: { name: "my-operator/map" }
to: { name: "data-sink" }
Compatibilité des versions
La section moduleRequirements garantit la compatibilité à l’aide de la gestion sémantique de version :
moduleRequirements:
apiVersion: "1.1.0" # WASI API version for interface compatibility
runtimeVersion: "1.1.0" # Runtime version providing runtime support
features: # Optional features required by modules
- name: "wasi-nn"
Conseil / Astuce
Pour obtenir des conseils sur l’activation de l’inférence ONNX en bande avec la wasi-nn fonctionnalité, consultez Exécuter l’inférence ONNX dans les graphiques de flux de données WebAssembly.
Exemple 1 : Définition de graphique simple
La définition de graphique simple illustre un pipeline à trois étapes de base qui convertit les données de température de Fahrenheit en Celsius :
metadata:
name: "Simple graph"
description: "A graph that transforms temperature from Fahrenheit to Celsius"
version: "1.0.0"
$schema: "https://www.schemastore.org/aio-wasm-graph-config-1.0.0.json"
vendor: "Microsoft"
moduleRequirements:
apiVersion: "1.1.0"
runtimeVersion: "1.1.0"
moduleConfigurations:
- name: module-temperature/map
parameters:
key1:
name: key2
description: key2
operations:
- operationType: "source"
name: "source"
- operationType: "map"
name: "module-temperature/map"
module: "temperature:1.0.0"
- operationType: "sink"
name: "sink"
connections:
- from:
name: "source"
to:
name: "module-temperature/map"
- from:
name: "module-temperature/map"
to:
name: "sink"
Pour obtenir des instructions de déploiement pas à pas, consultez Déployer des modules webAssembly (WASM) et des définitions de graphique. Pour tester un flux de données qui utilise cet exemple, consultez l’exemple 1 : Déploiement de base avec un module WASM.
Fonctionnement de graphique simple
Ce graphique crée un pipeline de traitement des données simple :
- Opération source : reçoit les données de température du point de terminaison source du flux de données
-
Opération de mappage : traite les données avec le module WASM de température (
temperature:1.0.0) - Opération de récepteur : envoie des données converties au point de terminaison de destination du flux de données
Le module de température convertit les degrés Fahrenheit en Celsius à l’aide de la formule standard (F - 32) × 5/9 = C.
Format d’entrée :
{"temperature": {"value": 100.0, "unit": "F"}}
Format de sortie :
{"temperature": {"value": 37.8, "unit": "C"}}
Exemple 2 : Définition de graphique complexe
La définition de graphique complexe illustre un flux de travail de traitement multi-capteur sophistiqué qui gère les données de température, d’humidité et d’image avec des analyses avancées :
metadata:
name: "Complex graph"
description: "A graph that processes temperature and humidity data from sensors, along with snapshot data. The graph performs filtering, accumulation, and enrichment operations before sending the processed data to the sink."
version: "1.0.0"
$schema: "https://www.schemastore.org/aio-wasm-graph-config-1.0.0.json"
vendor: "Microsoft"
moduleRequirements:
apiVersion: "1.1.0"
runtimeVersion: "1.1.0"
moduleConfigurations:
- name: module-temperature/map
parameters:
key1:
name: key2
description: key2
- name: module-snapshot/branch
parameters:
snapshot_topic:
name: snapshot_topic
description: Transform app snapshot_topic in snapshot branch's init routine
operations:
- operationType: "source"
name: "source"
- operationType: delay
name: module-window/delay
module: window:1.0.0
- operationType: "map"
name: "module-format/map"
module: "format:1.0.0"
- operationType: map
name: module-snapshot/map
module: snapshot:1.0.0
- operationType: branch
name: module-snapshot/branch
module: snapshot:1.0.0
- operationType: accumulate
name: module-snapshot/accumulate
module: snapshot:1.0.0
- operationType: map
name: module-temperature/map
module: temperature:1.0.0
- operationType: branch
name: module-temperature/branch
module: temperature:1.0.0
- operationType: filter
name: module-temperature/filter
module: temperature:1.0.0
- operationType: accumulate
name: module-temperature/accumulate
module: temperature:1.0.0
- operationType: accumulate
name: module-humidity/accumulate
module: humidity:1.0.0
- operationType: concatenate
name: concatenate1
module:
- operationType: accumulate
name: module-collection/accumulate
module: collection:1.0.0
- operationType: map
name: module-enrichment/map
module: enrichment:1.0.0
- operationType: "sink"
name: "sink"
connections:
- from:
name: source
to:
name: module-window/delay
- from:
name: module-window/delay
to:
name: module-snapshot/branch
- from:
name: module-snapshot/branch
arm: "False"
to:
name: module-temperature/branch
- from:
name: module-snapshot/branch
arm: "True"
to:
name: module-format/map
- from:
name: module-format/map
to:
name: module-snapshot/map
- from:
name: module-snapshot/map
to:
name: module-snapshot/accumulate
- from:
name: module-snapshot/accumulate
to:
name: concatenate1
- from:
name: module-temperature/branch
arm: "True"
to:
name: module-temperature/map
- from:
name: module-temperature/branch
arm: "False"
to:
name: module-humidity/accumulate
- from:
name: module-humidity/accumulate
to:
name: concatenate1
- from:
name: module-temperature/map
to:
name: module-temperature/filter
- from:
name: module-temperature/filter
to:
name: module-temperature/accumulate
- from:
name: module-temperature/accumulate
to:
name: concatenate1
- from:
name: concatenate1
to:
name: module-collection/accumulate
- from:
name: module-collection/accumulate
to:
name: module-enrichment/map
- from:
name: module-enrichment/map
to:
name: sink
Pour obtenir des instructions de déploiement pas à pas, consultez Déployer des modules webAssembly (WASM) et des définitions de graphique. Pour tester un flux de données qui utilise cet exemple, consultez l’exemple 2 : Déployer un graphique complexe.
Fonctionnement du graphique complexe
Le graphique complexe traite trois flux de données et les combine en analytique de capteur enrichie :
Comme illustré dans le diagramme, les données circulent d’une source unique via plusieurs étapes de traitement :
- Module de fenêtre : retarde les données entrantes pour le traitement basé sur le temps
- Opération de branche : achemine les données en fonction du type de contenu (données de capteur et instantanés)
-
Chemin de traitement de température :
- Convertit les degrés Fahrenheit en Celsius
- Filtre les lectures non valides
- Calcule des résumés statistiques dans les fenêtres de temps
-
Chemin de traitement de l’humidité :
- Accumule les mesures d’humidité avec l’analyse statistique
-
Chemin de traitement des images :
- Met en forme les données d’image pour le traitement
- Effectue la détection d’objets sur les captures instantanées de caméra
-
Agrégation finale :
- Concatène tous les flux de données traités
- Agrège les résultats multi-capteurs
- Ajoute des métadonnées et des alertes de surtempérature
Le graphique utilise des modules spécialisés à partir des exemples Rust :
- Module de fenêtre pour les délais de traitement basés sur le temps
- Modules de température pour la conversion, le filtrage et l’analyse statistique
- Module d’humidité pour le traitement des données environnementales
- Modules d’instantané pour le routage des données d’image et la détection d’objets
- Module de format pour la préparation de l’image pour le traitement
- Module de collecte pour l’agrégation de données multi-capteurs
- Module d’enrichissement pour l’ajout de métadonnées et la génération d’alertes
Les opérations de branche permettent le traitement parallèle de différentes entrées de capteur, ce qui permet au graphique de gérer efficacement plusieurs types de données au sein d’un même flux de travail.
Comment les définitions de graphique deviennent des flux de données
Voici comment les définitions de graphiques et les graphiques de flux de données Opérations Azure IoT sont liés :
Votre fichier YAML définit la logique de traitement interne avec des opérations source/récepteur en tant que points de terminaison abstraits. Cela devient l’artefact de définition de graphique. Les modules référencés implémentent les opérateurs de traitement réels en tant que modules WASM. Les définitions de graphique et les modules WASM sont chargés dans un registre de conteneurs (par exemple, Azure Container Registry) en tant qu’artefacts OCI pour le stockage du Registre.
La ressource Azure Resource Manager ou Kubernetes « encapsule » la définition du graphique et la connecte à des points de terminaison réels en tant que ressource de graphique de flux de données. Pendant le déploiement du runtime, le moteur de flux de données extrait les artefacts du Registre et les déploie. Pour le mappage de point de terminaison, les opérations source/récepteur abstraites dans votre graphique se connectent à des rubriques MQTT réelles, à Azure Event Hubs ou à d’autres sources de données.
Par exemple, ce diagramme illustre la relation entre les définitions de graphique, les modules WASM et les graphiques de flux de données :
Pour en savoir plus sur la configuration des graphiques de flux de données, consultez Utiliser WebAssembly avec des graphiques de flux de données.
Déploiement du Registre
Les définitions de graphique et les modules WASM doivent être chargés dans un registre de conteneurs en tant qu’artefacts Open Container Initiative (OCI) avant que les graphiques de flux de données puissent les référencer :
- Les définitions de graphique sont empaquetées en tant qu’artefacts OCI avec type de média
application/vnd.oci.image.config.v1+json - Les modules WASM sont empaquetés en tant qu’artefacts OCI contenant le binaire WebAssembly compilé
- Utiliser la gestion sémantique de version (par exemple
my-graph:1.0.0,temperature-converter:2.1.0) pour une gestion des dépendances appropriée - La prise en charge du Registre est compatible avec Azure Container Registry, Docker Hub et d’autres registres conformes à OCI
La séparation permet une logique réutilisable où la même définition de graphique se déploie avec différents points de terminaison. Elle fournit l’indépendance de l’environnement où le développement, la préproduction et la production utilisent différentes sources de données. Elle prend également en charge le déploiement modulaire où vous mettez à jour les configurations de point de terminaison sans modifier la logique de traitement.
Pour obtenir des instructions détaillées sur le chargement des définitions de graphiques et des modules WASM dans des registres, consultez Déployer des modules WebAssembly (WASM) et des définitions de graphiques.
Paramètres de configuration du module
Les définitions de graphiques peuvent spécifier des paramètres d’exécution pour les opérateurs WASM via des configurations de module :
moduleConfigurations:
- name: my-operator/map
parameters:
threshold:
name: temperature_threshold
description: "Temperature threshold for filtering"
required: true
unit:
name: output_unit
description: "Output temperature unit"
required: false
Ces paramètres sont passés à la fonction de votre opérateur WASM au moment de l’exécution de la fonction init, ce qui active la configuration dynamique sans reconstruire les modules. Pour obtenir des exemples détaillés d’accès et d’utilisation de ces paramètres dans votre code Rust et Python, consultez Paramètres de configuration du module.
Pour obtenir un exemple d’implémentation complet, consultez le module de branche, qui illustre l’utilisation des paramètres pour la logique de routage conditionnel.