WASM-modules (WebAssembly) en grafiekdefinities implementeren

Azure IoT-bewerkingen gegevensstroomgrafieken ondersteunen WEBAssembly-modules (WASM) voor aangepaste gegevensverwerking aan de rand. U kunt aangepaste bedrijfslogica en gegevenstransformaties implementeren als onderdeel van uw gegevensstroompijplijnen.

Belangrijk

Gegevensstroomgrafieken ondersteunen momenteel alleen MQTT-, Kafka- en OpenTelemetry-eindpunten. Andere eindpunttypen, zoals Data Lake, Microsoft Fabric OneLake, Azure Data Explorer en Lokale opslag, worden niet ondersteund.

Belangrijk

Momenteel is de enige connector die ondersteuning biedt voor grafiekdefinities voor aangepaste verwerking de HTTP/REST-connector.

Belangrijk

Momenteel ondersteunt de operations experience webinterface alleen het creëren en bekijken van datastroomgrafiekartefacten afkomstig van Azure Container Registry (ACR) en, voor ingebouwde transformaties, mcr.microsoft.com. Voor meer informatie, zie Operations experience webUI toont alleen artefacten van datastroomgrafieken afkomstig van Azure Container Registry (ACR) en mcr.microsoft.com.

Vereiste voorwaarden

  • Een exemplaar van Azure IoT-bewerkingen geïmplementeerd in een Kubernetes-cluster. Zie Deploy Azure IoT-bewerkingen voor meer informatie.

Als u uw eigen modules en grafieken wilt pushen naar een privéregister zoals Azure Container Registry (ACR), hebt u ook het volgende nodig:

  • Toegang tot een containerregister, zoals ACR, om WASM-modules en -grafieken op te slaan.
  • De ORAS-CLI (OCI Registry As Storage) om WASM-modules naar het register te pushen.

De Azure CLI voorbeelden in dit artikel gebruiken omgevingsvariabelen zodat je elke waarde één keer kunt instellen en vervolgens de commando's kunt kopiëren en plakken as-is. Als je de Azure IoT-bewerkingen Codespaces-omgeving vanuit de quickstart gebruikt, zijn deze variabelen al voor je ingesteld en kun je deze stap overslaan. Anders stel je de volgende omgevingsvariabelen in je shell voordat je de commando's uitvoert.

De volgende scripts stellen de meest gebruikte omgevingsvariabelen in:

Omgevingsvariabele Description
SUBSCRIPTION_ID De ID van het abonnement dat je Azure IoT-bewerkingen-instantie bevat.
RESOURCE_GROUP De naam van de resourcegroep die je Azure IoT-bewerkingen-instantie bevat.
AIO_INSTANCE_NAME De naam van je Azure IoT-bewerkingen instance. Voer az iot ops list -o table uit om je instanties weer te geven.
CLUSTER_NAME De naam van de Azure Arc-enabled Kubernetes-cluster die jouw instantie host.
LOCATION De Azure-regio om te gebruiken voor nieuwe bronnen, bijvoorbeeld eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Je hoeft alleen de variabelen in te stellen die dit artikel gebruikt. Dit artikel kan extra omgevingsvariabelen gebruiken voor de bronnamen die je kiest. Het artikel legt uit hoe je ze op de plek kunt plaatsen waar ze worden geïntroduceerd.

Overzicht

U kunt met de WASM-modules in Azure IoT-bewerkingen gegevens aan de rand van het netwerk verwerken met hoge prestaties en beveiliging door gebruik te maken van gegevensstroomgrafieken en -connectors. WASM wordt uitgevoerd in een sandbox-omgeving en ondersteunt Rust en Python.

Vooraf samengestelde modules uit een openbaar register gebruiken

Je kunt de vooraf gebouwde voorbeeldmodules van WASM en grafiekdefinities gebruiken die worden gepubliceerd in het publieke GitHub Container Registry (ghcr.io) onder azure-samples/explore-iot-operations.

Opmerking

ghcr.iovereist een geauthenticeerde tokenuitwisseling voordat het zelfs publieke artefacten bedient, en de huidige Azure IoT-bewerkingen-runtime voert de anonieme uitwisseling niet uit. Configureer het public-ghcr eindpunt met een artefact pull secret ondersteund door een GitHub personal access token (PAT) met de read:packages scope, in plaats van anonieme authenticatie. Voor de endpoint- en secret-stappen, zie Gebruik een openbaar register.

Beschikbare voorbeeldartefacten

Nadat u het public-ghcr registereindpunt hebt gemaakt, raadpleegt u het in uw gegevensstroomgrafieken met behulp van registryEndpointRef: public-ghcr. Omdat de registereindpunthost is ghcr.io, neemt u het opslagplaatspad azure-samples/explore-iot-operations op in artefactverwijzingen. De volgende voorbeeldmodules en grafiekdefinities zijn beschikbaar:

Artifact Description
azure-samples/explore-iot-operations/graph-simple:1.0.0 Eenvoudige definitie van temperatuurconversiegrafiek
azure-samples/explore-iot-operations/graph-complex:1.0.0 Grafiekdefinitie voor multisensorverwerking
azure-samples/explore-iot-operations/temperature:1.0.0 Temperatuurconversiemodule (Fahrenheit naar Celsius)
azure-samples/explore-iot-operations/window:1.0.0 Tijdgebaseerde venstermodule
azure-samples/explore-iot-operations/snapshot:1.0.0 Module afbeeldingsverwerking en objectdetectie
azure-samples/explore-iot-operations/format:1.0.0 Conversiemodule voor afbeeldingsformaat
azure-samples/explore-iot-operations/humidity:1.0.0 Module voor gegevensverwerking van vochtigheid
azure-samples/explore-iot-operations/collection:1.0.0 Module voor gegevensaggregatie met meerdere sensoren
azure-samples/explore-iot-operations/enrichment:1.0.0 Module voor metagegevensverrijking
azure-samples/explore-iot-operations/filter:1.0.0 Module voor gegevensfiltering

Opmerking

De openbare voorbeeldgrafiekdefinities maken gebruik van moduleverwijzingen die bijvoorbeeld azure-samples/explore-iot-operationshet pad naar de azure-samples/explore-iot-operations/temperature:1.0.0 opslagplaats bevatten. Dit pad is vereist omdat de host van het registereindpunt is ghcr.io. Als u de artefacten naar uw eigen register kopieert, moet u ervoor zorgen dat de moduleverwijzingen in de grafiekdefinitie overeenkomen met de paden waar u de moduleartefacten pusht.

Als u de eenvoudige grafiek met het openbare register wilt gebruiken, raadpleegt u voorbeeld 1: Basisimplementatie met één WASM-module en gebruikt public-ghcr u deze als de naam van het registereindpunt.

Een privéregister gebruiken

Als u aangepaste modules wilt gebruiken of uw eigen kopieën van de voorbeeldmodules wilt hosten, stelt u een privécontainerregister in, zoals Azure Container Registry (ACR).

Containerregister instellen

Azure IoT-bewerkingen heeft een containerregister nodig om WASM-modules en grafiekdefinities op te halen. U kunt Azure Container Registry (ACR) of een ander OCI-compatibel register gebruiken. Zie Azure Container Registry implementeren om een ACR-exemplaar te maken. Nadat het register bestaat, maakt u een registereindpunt dat ernaar verwijst. Zie Een registereindpunt maken.

ORAS CLI installeren

Gebruik de ORAS CLI om WASM-modules en grafiekdefinities naar uw containerregister te pushen. Zie ORAS installeren voor installatie-instructies.

Voorbeeldmodules ophalen uit het openbare register

Vooraf gemaakte voorbeeldmodules gebruiken:

# 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

Modules naar uw register pushen

Zodra u de voorbeeldmodules en grafieken hebt, pusht u ze naar uw containerregister. Stel de omgevingsvariabele ACR_NAME in op de naam van je Azure Container Registry.

Belangrijk

De operationele ervaring ontdekt artefacten door hun OCI-configuratie media type, niet het media type van de laag. Wanneer u artefacten naar een register pusht, moet u de juiste mediatypen instellen of worden de artefacten niet weergegeven in de gebruikersinterface van de bewerkingservaring:

Artefactentype Vereist OCI-configuratiemediatype Vereiste mediumtype voor de laag
Grafiekdefinitie application/vnd.microsoft.aio.graph.v1+yaml application/yaml
WASM-module application/vnd.module.wasm.content.layer.v1+wasm application/wasm

Als u een CI/CD-pijplijn of andere hulpprogramma's gebruikt om artefacten tussen registers te kopiëren, controleert u of deze mediatypen behouden blijven. Sommige hulpprogramma's stripen of vervangen metagegevens van artefacten tijdens de overdracht, waardoor de artefacten op de achtergrond verdwijnen uit de bewerkingservaring. Zie Vereisten voor registerartefacten voor meer informatie.

Een artefactindeling kiezen

De artefactnamen die u gebruikt wanneer u grafieken en modules pusht, bepalen welke moduleverwijzingen u nodig hebt in de grafiekdefinitie. Zie Artefactpaden en grafiekmoduleverwijzingen voor achtergrondinformatie over hoe de hostnaam van het registereindpunt, het artefactpad en de moduleverwijzing zich tot elkaar verhouden.

Bewaar voor de Azure voorbeeldgrafieken het pad naar de voorbeeldopslagplaats wanneer u artefacten naar uw eigen register kopieert. De grafiekdefinities verwijzen naar modules met behulp van dat pad:

<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

Gebruiken artifact: azure-samples/explore-iot-operations/graph-simple:1.0.0 in de gegevensstroomgrafiek. De grafiekdefinitie maakt gebruik van module: "azure-samples/explore-iot-operations/temperature:1.0.0".

Voor uw eigen grafieken kunt u een platte indeling kiezen:

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

Gebruik artifact: graph-simple:1.0.0 in de gegevensstroomgrafiek en module: "temperature:1.0.0" binnen de grafiekdefinitie.

Of kies uw eigen geneste indeling:

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

Gebruik artifact: factory/graphs/graph-simple:1.0.0 in de gegevensstroomgrafiek en module: "factory/graphs/temperature:1.0.0" binnen de grafiekdefinitie.

Als u ervoor wilt zorgen dat de grafieken en modules zichtbaar zijn in de webinterface van de operations-ervaring, voegt u de --config en --artifact-type vlaggen toe, zoals wordt weergegeven in het volgende voorbeeld:

# 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

Aanbeveling

U kunt ook uw eigen modules pushen en aangepaste grafieken maken. Zie Configuratie van aangepaste gegevensstroomgrafieken.

Een module bijwerken in een actieve grafiek

U kunt een WASM-module bijwerken in een actieve grafiek zonder de grafiek te stoppen. Dit is handig als u de logica van een operator wilt bijwerken zonder de gegevensstroom te stoppen. Als u bijvoorbeeld de temperatuurconversiemodule wilt bijwerken van versie 1.0.0 naar 2.0.0 in de indeling van het Azure voorbeeldartefact, uploadt u de nieuwe versie als volgt:

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

Opmerking

Als u nieuwe inhoud naar dezelfde tag pusht (bijvoorbeeld overschrijven azure-samples/explore-iot-operations/temperature:1.0.0), haalt de gegevensstroomgrafiek automatisch de bijgewerkte module op zonder extra configuratie. Als u echter naar een nieuwe tag pusht (bijvoorbeeld azure-samples/explore-iot-operations/temperature:2.0.0), moet u ook de YAML van de grafiekdefinitie bijwerken om te verwijzen naar de nieuwe versie en het graafartefact opnieuw pushen.

Aangepaste WASM-modules ontwikkelen

Als u aangepaste logica voor gegevensverwerking voor uw gegevensstroomgrafieken wilt maken, ontwikkelt u WebAssembly-modules in Rust of Python. Met aangepaste modules kunt u gespecialiseerde bedrijfslogica, gegevenstransformaties en analyses implementeren die niet beschikbaar zijn in de ingebouwde operators.

Voor uitgebreide richtlijnen voor ontwikkeling, waaronder:

  • Uw ontwikkelomgeving instellen
  • Operators maken in Rust en Python
  • Informatie over het gegevensmodel en de interfaces
  • Uw modules bouwen en testen

Zie WebAssembly-modules ontwikkelen voor gegevensstroomgrafieken.

Zie WebAssembly-grafiekdefinities configureren voor gedetailleerde informatie over het maken en configureren van de YAML-grafiekdefinities die uw gegevensverwerkingswerkstromen definiëren.

Vereisten voor registerartefacten

De bewerkingservaring maakt gebruik van metagegevens van OCI-artefacten om grafieken en modules te detecteren en weer te geven. Inzicht in deze vereisten is belangrijk wanneer u aangepaste CI/CD-pijplijnen bouwt, artefacten kopieert tussen registers of problemen met ontbrekende artefacten in de gebruikersinterface oplost.

Hoe artefactdetectie werkt

Wanneer u een artefact naar een register pusht met ORAS, bevat het OCI-manifest twee relevante velden:

  • Configuratiemediatype: Bepaalt om welk type object het gaat. De bewerkingservaring filtert op dit veld om grafieken en modules te vinden.
  • Laagmediatype: Beschrijft de inhoudsindeling van het werkelijke bestand (YAML of WASM).

De bewerkingservaring maakt gebruik van het type configuratiemedia voor detectie, niet het type laagmedia. Als het type configuratiemedia ontbreekt of onjuist is, bestaat het artefact wel in het register, maar wordt het niet weergegeven in de gebruikersinterface.

Vereiste mediatypen

Artefactentype Type configuratiemedia (--config of --artifact-type) Laagmediatype
Grafiekdefinitie application/vnd.microsoft.aio.graph.v1+yaml application/yaml
WASM-module application/vnd.module.wasm.content.layer.v1+wasm application/wasm

Voor grafiekdefinities geef je het configuratie-mediatype door met de --config vlag. Stel de omgevingsvariabele REGISTRY in op je registryhost (bijvoorbeeld, <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

Geef voor WASM-modules deze door met de --artifact-type vlag:

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

Overwegingen voor CI/CD-pijplijnen

Als u geautomatiseerde pijplijnen gebruikt om artefacten tussen registers te kopiëren of te promoveren (bijvoorbeeld van een faseringsregister naar een productieregister), controleert u of de pijplijn metagegevens van OCI-artefacten behoudt. Sommige hulpprogramma's stripen of vervangen het type configuratiemedia tijdens de overdracht, waardoor artefacten op de achtergrond verdwijnen uit de bewerkingservaring.

Controleer het manifest ervan om te controleren of een artefact de juiste metagegevens heeft na overdracht:

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

In de uitvoer moet het volgende worden weergegeven:

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

Als configMediaType een algemene waarde toont, zijn de metagegevens verwijderd, en moet het artefact opnieuw worden gepusht met de juiste instellingen.