Distribuera WebAssembly-moduler (WASM) och diagramdefinitioner

Azure IoT Operations dataflödesdiagram stöder WebAssembly-moduler (WASM) för anpassad databearbetning vid gränsen. Du kan distribuera anpassad affärslogik och datatransformeringar som en del av dina dataflödespipelines.

Viktigt!

Dataflödesdiagram stöder för närvarande endast MQTT-, Kafka- och OpenTelemetry-slutpunkter. Andra slutpunktstyper som Data Lake, Microsoft Fabric OneLake, Azure Data Explorer och Local Storage stöds inte.

Viktigt!

För närvarande är HTTP/REST-anslutningsappen den enda anslutningsappen som stöder grafdefinitioner för anpassad bearbetning.

Viktigt!

För närvarande stödjer webbgränssnittet för operationsupplevelsen endast skapande och visning av dataflödesgrafartefakter hämtade från Azure Container Registry (ACR) och, för inbyggda transformationer, mcr.microsoft.com. För att lära dig mer, se Operations experience web UI visar endast dataflödesgrafartefakter hämtade från Azure Container Registry (ACR) och mcr.microsoft.com.

Förutsättningar

Om du vill push-överföra dina egna moduler och grafer till ett privat register som Azure Container Registry (ACR) behöver du också:

  • Åtkomst till ett containerregister som ACR för att lagra WASM-moduler och diagram.
  • OCI Registry As Storage (ORAS) CLI för att skicka WASM-moduler till registret.

De Azure CLI exemplen i denna artikel använder miljövariabler så att du kan sätta varje värde en gång och sedan kopiera och klistra in kommandona as-is. Om du använder Azure IoT Operations Codespaces-miljön från quickstart är dessa variabler redan inställda för dig och du kan hoppa över detta steg. Annars, ställ in följande miljövariabler i ditt skal innan du kör kommandona.

Följande skript anger de mest använda miljövariablerna:

Miljövariabel Description
SUBSCRIPTION_ID ID:t för prenumerationen som innehåller din Azure IoT Operations-instans.
RESOURCE_GROUP Namnet på resursgruppen som innehåller din Azure IoT Operations-instans.
AIO_INSTANCE_NAME Namnet på din Azure IoT Operations-instans. För att lista dina instanser, kör az iot ops list -o table.
CLUSTER_NAME Namnet på det Azure Arc-aktiverade Kubernetes-klustret som hostar din instans.
LOCATION Azure-regionen att använda för nya resurser, till exempel eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Du behöver bara ställa in de variabler som denna artikel använder. Den här artikeln kan använda ytterligare miljövariabler för resursnamn som du väljer. Artikeln förklarar hur man placerar dem där de introduceras.

Översikt

MED WASM-moduler i Azure IoT Operations dataflödesdiagram och anslutningsappar kan du bearbeta data vid gränsen med hög prestanda och säkerhet. WASM körs i en sandbox-miljö och stöder Rust och Python.

Använda fördefinierade moduler från ett offentligt register

Du kan använda de förbyggda exempelmodulerna för WASM och grafdefinitioner som publiceras i det publika GitHub Container Registry (ghcr.io) under azure-samples/explore-iot-operations.

Anmärkning

ghcr.iokräver ett autentiserat tokenutbyte innan det ens betjänar publika artefakter, och den nuvarande Azure IoT Operations-runtimen utför inte det anonyma utbytet. Konfigurera slutpunkten public-ghcr med en pull-hemlighet för artefakter som använder en personlig åtkomsttoken (PAT) för GitHub med omfånget read:packages, i stället för anonym autentisering. För slutpunkts- och hemlighetsstegen, se Använd ett publikt register.

Tillgängliga exempelartefakter

När du har skapat public-ghcr registerslutpunkten refererar du till den i dina dataflödesdiagram med hjälp registryEndpointRef: public-ghcrav . Eftersom värden för registerslutpunkten är ghcr.io, ska lagringsplatssökvägen azure-samples/explore-iot-operations inkluderas i artefaktreferenser. Följande exempelmoduler och grafdefinitioner är tillgängliga:

Artifact Description
azure-samples/explore-iot-operations/graph-simple:1.0.0 Enkel definition av temperaturkonverteringsdiagram
azure-samples/explore-iot-operations/graph-complex:1.0.0 Diagramdefinition för bearbetning av flera sensorer
azure-samples/explore-iot-operations/temperature:1.0.0 Modul för temperaturkonvertering (Fahrenheit till Celsius)
azure-samples/explore-iot-operations/window:1.0.0 Tidsbaserad fönstermodul
azure-samples/explore-iot-operations/snapshot:1.0.0 Modul för bildbearbetning och objektidentifiering
azure-samples/explore-iot-operations/format:1.0.0 Modul för konvertering av bildformat
azure-samples/explore-iot-operations/humidity:1.0.0 Modul för bearbetning av fuktighetsdata
azure-samples/explore-iot-operations/collection:1.0.0 Modul för datasammansättning med flera sensorer
azure-samples/explore-iot-operations/enrichment:1.0.0 Modul för metadataberikning
azure-samples/explore-iot-operations/filter:1.0.0 Modul för datafiltrering

Anmärkning

De offentliga exempeldiagramdefinitionerna använder modulreferenser som innehåller azure-samples/explore-iot-operations lagringsplatsens sökväg, till exempel azure-samples/explore-iot-operations/temperature:1.0.0. Den här sökvägen krävs eftersom värdnamnet för registerslutpunkten är ghcr.io. Om du kopierar artefakterna till ditt eget register, se till att modulreferenserna i din grafdefinition stämmer överens med sökvägarna där du publicerar modulartefakterna.

Om du vill använda det enkla diagrammet med det offentliga registret kan du läsa Exempel 1: Grundläggande distribution med en WASM-modul och använda public-ghcr som registerslutpunktsnamn.

Använda ett privat register

Om du behöver använda anpassade moduler eller vill vara värd för dina egna kopior av exempelmodulerna konfigurerar du ett privat containerregister som Azure Container Registry (ACR).

Konfigurera containerregister

Azure IoT Operations behöver ett containerregister för att hämta WASM-moduler och grafdefinitioner. Du kan använda Azure Container Registry (ACR) eller ett annat OCI-kompatibelt register. Information om hur du skapar en ACR-instans finns i Distribuera Azure Container Registry. När registret finns skapar du en registerslutpunkt som pekar på det – se Skapa en registerslutpunkt.

Installera ORAS CLI

Använd ORAS CLI för att push-överföra WASM-moduler och grafdefinitioner till containerregistret. Installationsinstruktioner finns i Installera ORAS.

Hämta exempelmoduler från det offentliga registret

Använd fördefinierade exempelmoduler:

# 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

Skicka moduler till ditt register

När du har exempelmoduler och grafer skickar du dem till containerregistret. Ställ in miljövariabeln ACR_NAME till namnet på din Azure Container Registry.

Viktigt!

Driftupplevelsen identifierar artefakter efter deras OCI-konfigurationsmedietyp, inte lagermedietypen. När du skickar artefakter till ett register måste du ange rätt medietyper, annars visas inte artefakterna i användargränssnittet för driftsupplevelsen:

Typ av artefakt Nödvändig OCI-konfigurationsmediatyp Nödvändig lagermedietyp
Grafdefinition application/vnd.microsoft.aio.graph.v1+yaml application/yaml
WASM-modul application/vnd.module.wasm.content.layer.v1+wasm application/wasm

Om du använder en CI/CD-pipeline eller andra verktyg för att kopiera artefakter mellan register kontrollerar du att den bevarar dessa medietyper. Vissa verktyg tar bort eller ersätter artefaktmetadata under överföringen, vilket gör att artefakterna tyst försvinner från driftupplevelsen. Mer information finns i Krav för registerartefakt.

Välj en layout för artefakter

De artefaktnamn som du använder när du push-överför grafer och moduler avgör vilka modulreferenser du behöver i grafdefinitionen. Mer information om hur värdnamnet för registerslutpunkten, artefaktsökvägen och modulreferensen hänger ihop finns i Artefaktsökvägar och grafmodulreferenser.

För Azure-exempelgraferna ska du bevara sökvägen till exempellagringsplatsen när du kopierar artefakter till ditt eget register. Grafdefinitionerna hänvisar till moduler via den sökvägen:

<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

Använd artifact: azure-samples/explore-iot-operations/graph-simple:1.0.0 i dataflödesdiagrammet. Grafdefinitionen använder module: "azure-samples/explore-iot-operations/temperature:1.0.0".

För dina egna grafer kan du välja en plan layout:

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

Använd artifact: graph-simple:1.0.0 i dataflödesdiagrammet och module: "temperature:1.0.0" inuti grafdefinitionen.

Eller välj din egen kapslade layout:

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

Använd artifact: factory/graphs/graph-simple:1.0.0 i dataflödesdiagrammet och module: "factory/graphs/temperature:1.0.0" inuti grafdefinitionen.

För att säkerställa att diagram och moduler visas i webbgränssnittet för driftupplevelse lägger du till flaggorna --config och --artifact-type som visas i följande exempel:

# 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

Tips/Råd

Du kan också push-överföra dina egna moduler och skapa anpassade grafer, se Konfiguration av anpassade dataflödesdiagram.

Uppdatera en modul i ett diagram som körs

Du kan uppdatera en WASM-modul i ett diagram som körs utan att stoppa grafen. Detta är användbart när du vill uppdatera logiken för en operator utan att stoppa dataflödet. Om du till exempel vill uppdatera temperaturkonverteringsmodulen från version 1.0.0 till 2.0.0 i Azure artefaktlayout laddar du upp den nya versionen på följande sätt:

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

Anmärkning

Om du skickar nytt innehåll till samma tagg (till exempel överskrivning azure-samples/explore-iot-operations/temperature:1.0.0) hämtar dataflödesdiagrammet automatiskt den uppdaterade modulen utan ytterligare konfiguration. Men om du push-överför till en ny tagg (till exempel azure-samples/explore-iot-operations/temperature:2.0.0), måste du också uppdatera grafdefinitionen YAML för att referera till den nya versionen och push-överföra grafartefakten igen.

Utveckla anpassade WASM-moduler

Om du vill skapa anpassad databearbetningslogik för dina dataflödesdiagram utvecklar du WebAssembly-moduler i Rust eller Python. Med anpassade moduler kan du implementera specialiserad affärslogik, datatransformering och analys som inte är tillgängliga i de inbyggda operatorerna.

För omfattande utvecklingsvägledning, inklusive:

  • Konfigurera utvecklingsmiljön
  • Skapa operatorer i Rust och Python
  • Förstå datamodellen och gränssnitten
  • Skapa och testa dina moduler

Se Utveckla WebAssembly-moduler för dataflödesdiagram.

Detaljerad information om hur du skapar och konfigurerar YAML-grafdefinitioner som definierar dina arbetsflöden för databearbetning finns i Konfigurera WebAssembly-grafdefinitioner.

Krav för registerartefakt

Driftupplevelsen använder OCI-artefaktmetadata för att identifiera och visa grafer och moduler. Att förstå dessa krav är viktigt när du skapar anpassade CI/CD-pipelines, kopierar artefakter mellan register eller felsöker saknade artefakter i användargränssnittet.

Så här fungerar artefaktidentifiering

När du skickar en artefakt till ett register med ORAS innehåller OCI-manifestet två relevanta fält:

  • Typ av konfigurationsmedium: Identifierar vilken typ av artefakt det här är. Driftupplevelsen filtrerar det här fältet för att hitta grafer och moduler.
  • Lagermedietyp: Beskriver innehållsformatet för den faktiska filen (YAML eller WASM).

Driftupplevelsen använder konfigmediatypen för identifiering, inte layermediatypen. Om konfigurationsmedietypen saknas eller är felaktig finns artefakten i registret men visas inte i användargränssnittet.

Nödvändiga medietyper

Typ av artefakt Konfigurationsmedietyp (--config eller --artifact-type) Medietyp för lager
Grafdefinition application/vnd.microsoft.aio.graph.v1+yaml application/yaml
WASM-modul application/vnd.module.wasm.content.layer.v1+wasm application/wasm

För grafdefinitioner, skicka konfigurationsmediatypen med flaggan --config . Ställ in miljövariabeln REGISTRY till din registervärd (till exempel, <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

För WASM-moduler skickar du det med --artifact-type flaggan:

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

Överväganden för CI/CD-pipeline

Om du använder automatiserade pipelines för att kopiera eller flytta upp artefakter mellan register (till exempel från ett mellanlagringsregister till ett produktionsregister) kontrollerar du att pipelinen bevarar OCI-artefaktmetadata. Vissa verktyg tar bort eller ersätter config-medietypen under överföringen, vilket gör att artefakter tyst försvinner från driftupplevelsen.

Kontrollera att en artefakt har rätt metadata efter överföringen genom att granska dess manifest:

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

Utdata ska visa:

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

Om configMediaType visar ett generiskt värde som application/vnd.oci.empty.v1+json, har metadatan tagits bort och artefakten måste pushas igen med rätt flaggor.