Bereitstellen von WebAssembly(WASM)-Modulen und Diagrammdefinitionen

Azure IoT Einsatz Datenflussdiagramme unterstützen WebAssembly-Module (WASM) für die benutzerdefinierte Datenverarbeitung am Rand. Sie können benutzerdefinierte Geschäftslogik und Datentransformationen als Teil Ihrer Datenflusspipelinen bereitstellen.

Von Bedeutung

Datenflussdiagramme unterstützen zur Zeit nur MQTT-, Kafka- und OpenTelemetry-Endpunkte. Andere Endpunkttypen wie Data Lake, Microsoft Fabric OneLake, Azure Data Explorer und lokaler Speicher werden nicht unterstützt.

Von Bedeutung

Derzeit ist der einzige Connector, der Graphdefinitionen für die benutzerdefinierte Verarbeitung unterstützt, der HTTP/REST-Connector.

Von Bedeutung

Derzeit unterstützt die Web-UI für den Betrieb nur das Erstellen und Anzeigen von Datenflussgraph-Artefakten, die aus Azure Container Registry (ACR) und – bei integrierten Transformationen – aus mcr.microsoft.com bezogen werden. Um mehr zu erfahren, siehe Operations Experience WebUI zeigt nur Datenflussgraph-Artefakte, die von Azure Container Registry (ACR) und mcr.microsoft.com stammen.

Voraussetzungen

  • Eine Instanz von Azure IoT Einsatz, die in einem Kubernetes-Cluster bereitgestellt wird. Weitere Informationen finden Sie unter Deploy Azure IoT Einsatz.

Um Ihre eigenen Module und Diagramme an eine private Registrierung wie Azure Container Registry (ACR) zu übertragen, benötigen Sie außerdem Folgendes:

  • Zugriff auf eine Containerregistrierung wie ACR zum Speichern von WASM-Modulen und Diagrammen.
  • Die OCI-Registry-As-Storage-(ORAS)-CLI zum Hochladen von WASM-Modulen in das Registry.

Die Azure CLI-Beispiele in diesem Artikel verwenden Umgebungsvariablen, sodass Sie jeden Wert nur einmal festlegen und die Befehle dann unverändert kopieren und einfügen können. Wenn Sie die Azure IoT Einsatz Codespaces-Umgebung aus dem Quickstart verwenden, sind diese Variablen bereits für Sie festgelegt und Sie können diesen Schritt überspringen. Ansonsten setze die folgenden Umgebungsvariablen in deiner Shell, bevor du die Befehle ausführst.

Die folgenden Skripte legen die am häufigsten verwendeten Umweltvariablen fest:

Umgebungsvariable Description
SUBSCRIPTION_ID Die ID des Abonnements, das Ihre Azure IoT Einsatz-Instanz enthält.
RESOURCE_GROUP Der Name der Ressourcengruppe, die Ihre Azure IoT Einsatz-Instanz enthält.
AIO_INSTANCE_NAME Der Name Ihrer Azure IoT Einsatz Instanz. Um Ihre Instanzen aufzulisten, führen Sie az iot ops list -o table aus.
CLUSTER_NAME Der Name des Azure Arc-fähigen Kubernetes-Clusters, der deine Instanz hostet.
LOCATION Die Azure-Region zur Nutzung für neue Ressourcen, zum Beispiel eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Du musst nur die Variablen festlegen, die dieser Artikel verwendet. Dieser Artikel könnte zusätzliche Umgebungsvariablen für die von Ihnen gewählten Ressourcennamen verwenden. Der Artikel erklärt, wie man sie dort platziert, wo sie eingeführt werden.

Überblick

WASM-Module in Datenflussdiagrammen und Connectors von Azure IoT Einsatz ermöglichen Ihnen, Daten am Edge mit hoher Leistung und Sicherheit zu verarbeiten. WASM wird in einer Sandkastenumgebung ausgeführt und unterstützt Rust und Python.

Verwenden von vorgefertigten Modulen aus einer öffentlichen Registrierung

Sie können die vorgefertigten Beispiel-WASM-Module und Graphendefinitionen verwenden, die unter ghcr.io in der öffentlichen GitHub-Container-Registry (azure-samples/explore-iot-operations) veröffentlicht sind.

Hinweis

ghcr.ioerfordert einen authentifizierten Token-Austausch, bevor er überhaupt öffentliche Artefakte ausliefert, und die aktuelle Azure IoT Einsatz-Laufzeit führt den anonymen Austausch nicht durch. Konfigurieren Sie den public-ghcr Endpunkt mit einem Artefakt-Pull-Geheimnis, das durch ein GitHub Personal Access Token (PAT) mit dem Scope read:packages unterstützt wird, anstatt anonyme Authentifizierung. Für die Endpunkt- und Geheim-Schritte siehe Verwenden eines öffentlichen Registers.

Verfügbare Beispielartefakte

Nachdem Sie den public-ghcr Registrierungsendpunkt erstellt haben, verweisen Sie ihn in Ihren Datenflussdiagrammen mithilfe von registryEndpointRef: public-ghcr. Da der Host des Registry-Endpunkts ghcr.io ist, geben Sie den Repository-Pfad azure-samples/explore-iot-operations in Artefaktreferenzen an. Die folgenden Beispielmodule und Diagrammdefinitionen sind verfügbar:

Artefakt Description
azure-samples/explore-iot-operations/graph-simple:1.0.0 Definition eines einfachen Temperaturkonvertierungsdiagramms
azure-samples/explore-iot-operations/graph-complex:1.0.0 Multisensor-Verarbeitungsdiagrammdefinition
azure-samples/explore-iot-operations/temperature:1.0.0 Temperaturumwandlungsmodul (Fahrenheit zu Celsius)
azure-samples/explore-iot-operations/window:1.0.0 Zeitbasiertes Fenstermodul
azure-samples/explore-iot-operations/snapshot:1.0.0 Bildverarbeitungs- und Objekterkennungsmodul
azure-samples/explore-iot-operations/format:1.0.0 Konvertierungsmodul für Bildformate
azure-samples/explore-iot-operations/humidity:1.0.0 Luftfeuchtigkeits-Datenverarbeitungsmodul
azure-samples/explore-iot-operations/collection:1.0.0 Multisensorisches Datenaggregationsmodul
azure-samples/explore-iot-operations/enrichment:1.0.0 Modul zur Metadatenerweiterung
azure-samples/explore-iot-operations/filter:1.0.0 Datenfiltermodul

Hinweis

Die öffentlichen Beispiel-Graphdefinitionen verwenden Modulverweise, die den azure-samples/explore-iot-operations Repositorypfad enthalten, zum Beispiel azure-samples/explore-iot-operations/temperature:1.0.0. Dieser Pfad ist erforderlich, da der Registrierungsendpunkthost ist ghcr.io. Wenn Sie die Artefakte in Ihre eigene Registrierung kopieren, stellen Sie sicher, dass die Modulverweise in Ihrer Diagrammdefinition den Pfaden entsprechen, in denen Sie die Modulartefakte übertragen.

Informationen zum Verwenden des einfachen Diagramms mit der öffentlichen Registrierung finden Sie unter Beispiel 1: Grundlegende Bereitstellung mit einem WASM-Modul und Verwendung public-ghcr als Registrierungsendpunktnamen.

Verwenden einer privaten Registrierung

Wenn Sie benutzerdefinierte Module verwenden oder eigene Kopien der Beispielmodule hosten möchten, richten Sie eine private Containerregistrierung wie Azure Container Registry (ACR) ein.

Einrichten der Containerregistrierung

Azure IoT Einsatz benötigt eine Containerregistrierung, um WASM-Module und Graphdefinitionen abzurufen. Sie können Azure Container Registry (ACR) oder eine andere OCI-kompatible Registrierung verwenden. Informationen zum Erstellen einer ACR-Instanz finden Sie unter Bereitstellen von Azure Container Registry. Nachdem die Registrierung vorhanden ist, erstellen Sie einen Registrierungsendpunkt, der darauf verweist – siehe Erstellen eines Registrierungsendpunkts.

Installieren von ORAS CLI

Verwenden Sie die ORAS CLI, um WASM-Module und Graphdefinitionen an Ihre Containerregistrierung zu übertragen. Installationsanweisungen finden Sie unter Installieren von ORAS.

Beispielmodule aus dem öffentlichen Registry abrufen

Verwenden Sie vorgefertigte Beispielmodule:

# Pull sample modules and graphs
oras pull ghcr.io/azure-samples/explore-iot-operations/graph-simple:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/graph-complex:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/temperature:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/window:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/snapshot:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/format:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/humidity:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/collection:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/enrichment:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/filter:1.0.0

Module in Ihre Registry pushen

Sobald Sie über die Beispielmodule und Diagramme verfügen, übertragen Sie sie an ihre Containerregistrierung. Setze die ACR_NAME Umgebungsvariable auf den Namen deiner Azure Container Registry.

Von Bedeutung

Die Betriebsumgebung entdeckt Artefakte anhand ihres OCI-Konfigurationsmedientyps, nicht anhand des Layermedientyps. Wenn Sie Artefakte in eine Registrierung übertragen, müssen Sie die richtigen Medientypen festlegen, oder die Artefakte werden nicht in der Benutzeroberfläche für Vorgänge angezeigt:

Artefakttyp Erforderlicher OCI-Konfigurationsmedientyp Erforderlicher Layermedientyp
Graph-Definition application/vnd.microsoft.aio.graph.v1+yaml application/yaml
WASM-Modul application/vnd.module.wasm.content.layer.v1+wasm application/wasm

Wenn Sie eine CI/CD-Pipeline oder andere Tools zum Kopieren von Artefakten zwischen Registrierungen verwenden, überprüfen Sie, ob diese Medientypen erhalten bleiben. Einige Tools entfernen oder ersetzen Artefaktmetadaten während der Übertragung, wodurch die Artefakte unbemerkt aus dem Betriebsablauf verschwinden. Weitere Informationen finden Sie unter Anforderungen an Registrierungsartefakte.

Auswählen eines Artefaktlayouts

Die Artefaktnamen, die Sie verwenden, wenn Sie Diagramme und Module pushen, bestimmen die Modulverweise, die Sie innerhalb der Diagrammdefinition benötigen. Hintergrundinformationen dazu, wie der Registrierungsendpunkthost, Artefaktpfad und Modulverweis zusammenhängen, finden Sie unter Artefaktpfade und Diagrammmodulverweise.

Behalten Sie für die Azure-Beispielcharts den Pfad des Beispielrepositorys bei, wenn Sie Artefakte in Ihre eigene Registry kopieren. Die Diagrammdefinitionsreferenzmodule verwenden diesen Pfad:

<YOUR_ACR_NAME>.azurecr.io/azure-samples/explore-iot-operations/graph-simple:1.0.0
<YOUR_ACR_NAME>.azurecr.io/azure-samples/explore-iot-operations/temperature:1.0.0

Verwenden Sie artifact: azure-samples/explore-iot-operations/graph-simple:1.0.0 im Datenflussdiagramm. Die Diagrammdefinition verwendet module: "azure-samples/explore-iot-operations/temperature:1.0.0".

Für Ihre eigenen Diagramme können Sie ein flaches Layout auswählen:

<YOUR_ACR_NAME>.azurecr.io/graph-simple:1.0.0
<YOUR_ACR_NAME>.azurecr.io/temperature:1.0.0

Verwenden Sie artifact: graph-simple:1.0.0 im Datenflussdiagramm und module: "temperature:1.0.0" innerhalb der Diagrammdefinition.

Oder wählen Sie Ihr eigenes geschachteltes Layout aus:

<YOUR_ACR_NAME>.azurecr.io/factory/graphs/graph-simple:1.0.0
<YOUR_ACR_NAME>.azurecr.io/factory/graphs/temperature:1.0.0

Verwenden Sie artifact: factory/graphs/graph-simple:1.0.0 im Datenflussdiagramm und module: "factory/graphs/temperature:1.0.0" innerhalb der Diagrammdefinition.

Um sicherzustellen, dass die Diagramme und Module im Web-UI für den Betriebsablauf sichtbar sind, fügen Sie die --config und --artifact-type Flags hinzu, wie im folgenden Beispiel gezeigt:

# Log in to your ACR
az acr login --name $ACR_NAME

# Push modules to your registry
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/graph-simple:1.0.0 --config /dev/null:application/vnd.microsoft.aio.graph.v1+yaml graph-simple.yaml:application/yaml --disable-path-validation
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/graph-complex:1.0.0 --config /dev/null:application/vnd.microsoft.aio.graph.v1+yaml graph-complex.yaml:application/yaml --disable-path-validation
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/temperature:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm temperature.wasm:application/wasm
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/window:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm window.wasm:application/wasm
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/snapshot:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm snapshot.wasm:application/wasm
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/format:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm format.wasm:application/wasm
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/humidity:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm humidity.wasm:application/wasm
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/collection:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm collection.wasm:application/wasm
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/enrichment:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm enrichment.wasm:application/wasm
oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/filter:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm filter.wasm:application/wasm

Tipp

Sie können auch eigene Module pushen und benutzerdefinierte Diagramme erstellen, siehe Konfiguration von benutzerdefinierten Datenflussdiagrammen.

Aktualisieren eines Moduls in einem ausgeführten Diagramm

Sie können ein WASM-Modul in einem ausgeführten Diagramm aktualisieren, ohne das Diagramm zu beenden. Dies ist nützlich, wenn Sie die Logik eines Operators aktualisieren möchten, ohne den Datenfluss zu beenden. Um beispielsweise das Temperaturkonvertierungsmodul von Version 1.0.0 auf 2.0.0 im Azure Beispielartefaktelayout zu aktualisieren, laden Sie die neue Version wie folgt hoch:

oras push $ACR_NAME.azurecr.io/azure-samples/explore-iot-operations/temperature:2.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm temperature.wasm:application/wasm

Hinweis

Wenn Sie neuen Inhalt an dasselbe Tag übertragen (z. B. Überschreiben azure-samples/explore-iot-operations/temperature:1.0.0), übernimmt das Datenflussdiagramm automatisch das aktualisierte Modul ohne zusätzliche Konfiguration. Wenn Sie jedoch zu einem neuen Tag (z.B. azure-samples/explore-iot-operations/temperature:2.0.0) pushen, müssen Sie auch die YAML der Graphdefinition aktualisieren, um auf die neue Version zu verweisen, und das Artefakt des Graphen erneut pushen.

Entwickeln von benutzerdefinierten WASM-Modulen

Um benutzerdefinierte Datenverarbeitungslogik für Ihre Datenflussdiagramme zu erstellen, entwickeln Sie WebAssembly-Module in Rust oder Python. Mit benutzerdefinierten Modulen können Sie spezielle Geschäftslogik, Datentransformationen und Analysen implementieren, die in den integrierten Operatoren nicht verfügbar sind.

Umfassende Anleitungen zur Entwicklung, einschließlich:

  • Einrichten der Entwicklungsumgebung
  • Erstellen von Operatoren in Rust und Python
  • Grundlegendes zu Datenmodell und Schnittstellen
  • Erstellen und Testen Ihrer Module

Siehe Entwickeln von WebAssembly-Modulen für Datenflussdiagramme.

Ausführliche Informationen zum Erstellen und Konfigurieren der YAML-Diagrammdefinitionen, die Ihre Datenverarbeitungsworkflows definieren, finden Sie unter Konfigurieren von WebAssembly-Diagrammdefinitionen.

Anforderungen für Registrierungsartefakte

Die Betriebsumgebung verwendet OCI-Artefaktmetadaten zum Ermitteln und Anzeigen von Diagrammen und Modulen. Das Verständnis dieser Anforderungen ist wichtig, wenn Sie benutzerdefinierte CI/CD-Pipelines erstellen, Artefakte zwischen Registrierungen kopieren oder probleme mit fehlenden Artefakten auf der Benutzeroberfläche beheben.

Funktionsweise der Artefaktentdeckung

Wenn Sie ein Artefakt mit ORAS an eine Registrierung übertragen, enthält das OCI-Manifest zwei relevante Felder:

  • Konfigurationsmedientyp: Gibt an, welche Art von Artefakt dies ist. Die Betriebserfahrung filtert in diesem Feld, um Diagramme und Module zu finden.
  • Layermedientyp: Beschreibt das Inhaltsformat der tatsächlichen Datei (YAML oder WASM).

Die Betriebserfahrung verwendet den Konfigurationsmedientyp für die Ermittlung, nicht den Layer-Medientyp. Wenn der Konfigurationsmedientyp fehlt oder falsch ist, ist das Artefakt in der Registrierung vorhanden, wird aber nicht in der Benutzeroberfläche angezeigt.

Erforderliche Medientypen

Artefakttyp Konfigurationsmedientyp (--config oder --artifact-type) Layermedientyp
Graph-Definition application/vnd.microsoft.aio.graph.v1+yaml application/yaml
WASM-Modul application/vnd.module.wasm.content.layer.v1+wasm application/wasm

Übergeben Sie bei Graph-Definitionen den Konfigurationsmedientyp mit dem Flag --config . Setze die Umgebungsvariable REGISTRY auf deinen Registry-Host (zum Beispiel, <your-registry>.azurecr.io):

oras push $REGISTRY/my-graph:1.0.0 \
  --config /dev/null:application/vnd.microsoft.aio.graph.v1+yaml \
  graph.yaml:application/yaml \
  --disable-path-validation

Übergeben Sie es für WASM-Module mit der --artifact-type Kennzeichnung:

oras push $REGISTRY/my-module:1.0.0 \
  --artifact-type application/vnd.module.wasm.content.layer.v1+wasm \
  module.wasm:application/wasm

Überlegungen zur CI/CD-Pipeline

Wenn Sie automatisierte Pipelines zum Kopieren oder Heraufstufen von Artefakten zwischen Registrierungen (z. B. von einer Stagingregistrierung in eine Produktionsregistrierung) verwenden, überprüfen Sie, ob die Pipeline OCI-Artefaktmetadaten behält. Einige Tools entfernen oder ersetzen den Konfigurationsmedientyp während der Übertragung, wodurch Artefakte automatisch aus der Betriebserfahrung verschwinden.

Überprüfen Sie das Manifest, um zu überprüfen, ob ein Artefakt nach der Übertragung über die richtigen Metadaten verfügt:

oras manifest fetch $REGISTRY/my-graph:1.0.0 | jq '{mediaType, configMediaType: .config.mediaType}'

Die Ausgabe sollte folgendes anzeigen:

{
  "mediaType": "application/vnd.oci.image.manifest.v1+json",
  "configMediaType": "application/vnd.microsoft.aio.graph.v1+yaml"
}

Wenn configMediaType einen generischen Wert wie application/vnd.oci.empty.v1+json anzeigt, wurden die Metadaten entfernt und das Artefakt muss mit den korrekten Flags erneut hochgeladen werden.