Distribuire moduli WebAssembly (WASM) e definizioni di grafi

I grafici del flusso di dati di Operazioni di Azure IoT supportano moduli WebAssembly (WASM) per l'elaborazione dati personalizzata al margine. È possibile distribuire trasformazioni di dati e logica di business personalizzate come parte delle pipeline del flusso di dati.

Importante

I grafici del flusso di dati supportano attualmente solo gli endpoint MQTT, Kafka e OpenTelemetry. Altri tipi di endpoint come Data Lake, Microsoft Fabric OneLake, Esplora dati di Azure e Archiviazione locale non sono supportati.

Importante

Attualmente l'unico connettore che supporta le definizioni del grafo per l'elaborazione personalizzata è il connettore HTTP/REST.

Importante

Attualmente, l'interfaccia utente Web per le operazioni supporta solo la creazione e la visualizzazione di artefatti del grafico del flusso di dati provenienti da Registro Azure Container (ACR) e, per le trasformazioni integrate, da mcr.microsoft.com. Per saperne di più, consulta Operations Experience web UI mostra solo artefatti di grafici di flusso dati provenienti da Registro Azure Container (ACR) e mcr.microsoft.com.

Prerequisiti

Per eseguire il push di moduli e grafici personalizzati in un registro privato, ad esempio Registro Azure Container (Registro Azure Container), è necessario:

  • Accesso a un registro di contenitori, come Azure Container Registry (ACR), per archiviare moduli e grafici WASM.
  • Interfaccia della riga di comando OCI Registry As Storage (ORAS) per eseguire il push dei moduli WASM nel Registro di sistema.

Gli esempi interfaccia della riga di comando di Azure in questo articolo usano variabili di ambiente così puoi impostare ogni valore una volta e poi copiare e incollare i comandi as-is. Se stai usando l'ambiente Operazioni di Azure IoT Codespaces dal quickstart, queste variabili sono già impostate per te e puoi saltare questo passaggio. Altrimenti, imposta le seguenti variabili di ambiente nella tua shell prima di eseguire i comandi.

I seguenti script impostano le variabili di ambiente più comunemente utilizzate:

Variabile di ambiente Descrzione
SUBSCRIPTION_ID L'ID della sottoscrizione che contiene l'istanza di Operazioni di Azure IoT.
RESOURCE_GROUP Il nome del gruppo di risorse che contiene la tua istanza Operazioni di Azure IoT.
AIO_INSTANCE_NAME Il nome dell'istanza di Operazioni di Azure IoT. Per elencare le tue istanze, esegui az iot ops list -o table.
CLUSTER_NAME Il nome del cluster Kubernetes abilitato Azure Arc che ospita la tua istanza.
LOCATION La regione Azure da utilizzare per nuove risorse, ad esempio eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Devi solo impostare le variabili utilizzate in questo articolo. Questo articolo potrebbe utilizzare variabili ambientali aggiuntive per i nomi delle risorse che scegli. L'articolo spiega come posizionarli dove vengono introdotti.

Informazioni generali

I moduli WASM nei grafici di flusso dei dati e connettori di Operazioni di Azure IoT consentono di elaborare i dati al perimetro con elevata efficienza e sicurezza. WASM viene eseguito in un ambiente in modalità sandbox e supporta Rust e Python.

Usare moduli predefiniti da un registro pubblico

Puoi utilizzare i moduli WASM predefiniti e le definizioni di grafi che vengono pubblicati nel pubblico GitHub Container Registry (ghcr.io) sotto azure-samples/explore-iot-operations.

Annotazioni

ghcr.iorichiede uno scambio di token autenticato prima di servire anche gli artefatti pubblici, e l'attuale runtime di Operazioni di Azure IoT non effettua lo scambio anonimo. Configurare l'endpoint public-ghcr con un segreto pull di artefatto supportato da un token di accesso personale (PAT) di GitHub con l'ambitoread:packages, invece dell'autenticazione anonima. Per i passaggi relativi all'endpoint e al segreto, vedi Usa un registro pubblico.

Artefatti di esempio disponibili

Dopo avere creato l'endpoint del public-ghcr registry, farvi riferimento nei grafi del flusso di dati usando registryEndpointRef: public-ghcr. Poiché l'host dell'endpoint del Registro di sistema è ghcr.io, includere il percorso azure-samples/explore-iot-operations del repository nei riferimenti agli artefatti. Sono disponibili i moduli di esempio e le definizioni di grafo seguenti:

Artefatto Descrzione
azure-samples/explore-iot-operations/graph-simple:1.0.0 Definizione del grafico di conversione della temperatura semplice
azure-samples/explore-iot-operations/graph-complex:1.0.0 Definizione del grafo per l'elaborazione di più sensori
azure-samples/explore-iot-operations/temperature:1.0.0 Modulo di conversione della temperatura (da Fahrenheit a Celsius)
azure-samples/explore-iot-operations/window:1.0.0 Modulo di finestratura basata sul tempo
azure-samples/explore-iot-operations/snapshot:1.0.0 Modulo di elaborazione delle immagini e rilevamento degli oggetti
azure-samples/explore-iot-operations/format:1.0.0 Modulo di conversione del formato immagine
azure-samples/explore-iot-operations/humidity:1.0.0 Modulo di elaborazione dei dati di umidità
azure-samples/explore-iot-operations/collection:1.0.0 Modulo di aggregazione dei dati multi-sensore
azure-samples/explore-iot-operations/enrichment:1.0.0 Modulo di arricchimento dei metadati
azure-samples/explore-iot-operations/filter:1.0.0 Modulo di filtro dei dati

Annotazioni

Le definizioni del grafico di esempio pubblico usano riferimenti al modulo che includono il percorso del azure-samples/explore-iot-operations repository, ad esempio azure-samples/explore-iot-operations/temperature:1.0.0. Questo percorso è obbligatorio perché l'host dell'endpoint del Registro di sistema è ghcr.io. Se si copiano gli artefatti nel registro, assicurarsi che i riferimenti ai moduli all'interno della definizione del grafo corrispondano ai percorsi in cui si pubblicano gli artefatti dei moduli.

Per usare il grafico semplice con il registro pubblico, vedere Esempio 1: Distribuzione di base con un modulo WASM e usare public-ghcr come nome dell'endpoint del Registro di sistema.

Usare un registro privato

Se è necessario usare moduli personalizzati o ospitare copie personalizzate dei moduli di esempio, configurare un registro contenitori privato, ad esempio Registro Azure Container (ACR).

Configurare il registro contenitori

Operazioni di Azure IoT richiede un registro dei contenitori per recuperare moduli WASM e definizioni di grafico. È possibile usare Registro Azure Container (ACR) o un altro registro compatibile con OCI. Per creare un'istanza di Registro Azure Container, vedi Distribuire Registro Azure Container. Dopo aver creato il registro, creare un endpoint del registro che punti a esso. Vedere Creare un endpoint del registro.

Installare l'interfaccia della riga di comando di ORAS

Usare l'interfaccia della riga di comando di ORAS per eseguire il push di moduli WASM e delle definizioni dei grafici nel registro contenitori. Per istruzioni di installazione, vedere Installare ORAS.

Eseguire il pull dei moduli di esempio dal registro pubblico

Usare moduli di esempio predefiniti:

# 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

Eseguire il push dei moduli nel registro

Dopo aver ottenuto i moduli e i grafici di esempio, esegui il push dei moduli e dei grafici nel registro contenitori. Imposta la ACR_NAME variabile ambiente al nome del tuo Registro Azure Container.

Importante

L'esperienza operativa individua gli artefatti in base al tipo di supporto di configurazione OCI, non al tipo di supporto del livello. Quando si esegue il push degli artefatti in un Registro di sistema, è necessario impostare i tipi di supporti corretti o gli artefatti non verranno visualizzati nell'interfaccia utente dell'esperienza operativa:

Tipo di artefatto Tipo di supporto di configurazione OCI obbligatorio Tipo di supporto richiesto per il livello
Definizione del grafo application/vnd.microsoft.aio.graph.v1+yaml application/yaml
Modulo WASM application/vnd.module.wasm.content.layer.v1+wasm application/wasm

Se si usa una pipeline CI/CD o altri strumenti per copiare elementi tra registri, verificare che mantenga questi tipi di supporti. Alcuni strumenti rimuovono o sostituiscono i metadati degli artefatti durante il trasferimento, causando la loro scomparsa silenziosa dall'ambito operativo. Per ulteriori informazioni, vedere Requisiti degli artefatti del Registro.

Scegli la disposizione dell'artefatto

I nomi degli artefatti che si usanp quando si effettua il push di grafi e moduli determinano i riferimenti ai moduli necessari all'interno della definizione del grafo. Per informazioni di contesto su come l'host dell'endpoint del registro, il percorso dell'artefatto e il riferimento al modulo si relazionano tra loro, vedere Percorsi degli artefatti e riferimenti ai moduli del grafo.

Per i grafici di esempio di Azure, mantenete il percorso del repository di esempio quando si copiano gli artefatti nel proprio registry. I moduli di riferimento per le definizioni del grafo usano tale percorso:

<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

Usare artifact: azure-samples/explore-iot-operations/graph-simple:1.0.0 nel grafico del flusso di dati. La definizione del grafo usa module: "azure-samples/explore-iot-operations/temperature:1.0.0".

Per i grafici personalizzati, è possibile scegliere un layout piatto:

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

Usare artifact: graph-simple:1.0.0 nel grafico del flusso di dati e module: "temperature:1.0.0" all'interno della definizione del grafo.

Oppure scegli il tuo layout annidato:

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

Usare artifact: factory/graphs/graph-simple:1.0.0 nel grafico del flusso di dati e module: "factory/graphs/temperature:1.0.0" all'interno della definizione del grafo.

Per assicurarsi che i grafici e i moduli siano visibili nell'interfaccia utente Web dell'esperienza operativa, aggiungere i --config flag e --artifact-type come illustrato nell'esempio seguente:

# 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

Suggerimento

È anche possibile eseguire il push di moduli personalizzati e creare grafici personalizzati, vedere Configurazione dei grafici del flusso di dati personalizzati.

Aggiornare un modulo in un grafico in esecuzione

È possibile aggiornare un modulo WASM in un grafico in esecuzione senza arrestare il grafico. Ciò è utile quando si vuole aggiornare la logica di un operatore senza arrestare il flusso di dati. Ad esempio, per aggiornare il modulo di conversione della temperatura dalla versione 1.0.0 a 2.0.0 nel layout dell'artefatto di esempio Azure, caricare la nuova versione come indicato di seguito:

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

Annotazioni

Se si esegue il push di nuovo contenuto nello stesso tag (ad esempio, sovrascrivendo azure-samples/explore-iot-operations/temperature:1.0.0), il grafico del flusso di dati preleva automaticamente il modulo aggiornato senza ulteriori configurazioni. Tuttavia, se si esegue il push in un nuovo tag ( ad esempio , azure-samples/explore-iot-operations/temperature:2.0.0), è necessario aggiornare anche la definizione del grafo YAML per fare riferimento alla nuova versione ed eseguire nuovamente il push dell'artefatto del grafo.

Sviluppare moduli WASM personalizzati

Per creare logica di elaborazione dati personalizzata per i grafici del flusso di dati, sviluppare moduli WebAssembly in Rust o Python. I moduli personalizzati consentono di implementare logica di business specializzata, trasformazioni dei dati e analisi non disponibili negli operatori predefiniti.

Per indicazioni complete sullo sviluppo, tra cui:

  • Configurazione dell'ambiente di sviluppo
  • Creazione di operatori in Rust e Python
  • Informazioni sul modello di dati e sulle interfacce
  • Compilazione e test dei moduli

Vedere Sviluppare moduli WebAssembly per grafici del flusso di dati.

Per informazioni dettagliate sulla creazione e la configurazione delle definizioni di grafici YAML che definiscono i flussi di lavoro di elaborazione dati, vedere Configurare le definizioni dei grafici WebAssembly.

Requisiti dell'oggetto del Registro di sistema

L'esperienza operativa usa i metadati degli artefatti OCI per individuare e visualizzare grafici e moduli. Comprendere questi requisiti è importante quando si compilano pipeline CI/CD personalizzate, si copiano elementi tra registri o si risolvono i problemi relativi agli artefatti mancanti nell'interfaccia utente.

Il funzionamento dell'individuazione degli artefatti

Quando si esegue il push di un artefatto in un registro con ORAS, il manifesto OCI include due campi pertinenti:

  • Tipo di media di configurazione: Identifica di che tipo di artefatto si tratta. L'esperienza operativa filtra questo campo per trovare grafici e moduli.
  • Tipo di media del livello: descrive il formato del contenuto del file effettivo (YAML o WASM).

L'esperienza delle operazioni usa il tipo di supporto di configurazione per l'individuazione, non il tipo di supporto del livello. Se il tipo di supporto di configurazione manca o non è corretto, l'artefatto esiste nel Registro di sistema ma non viene visualizzato nell'interfaccia utente.

Tipi di supporti necessari

Tipo di artefatto Tipo media di configurazione (--config o --artifact-type) Tipo di supporto del livello
Definizione del grafo application/vnd.microsoft.aio.graph.v1+yaml application/yaml
Modulo WASM application/vnd.module.wasm.content.layer.v1+wasm application/wasm

Per le definizioni del grafo, passare il tipo di supporto di configurazione con il flag --config. Imposta la REGISTRY variabile ambiente sull'host del registro (ad esempio, <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

Per i moduli WASM, passali con l'opzione --artifact-type:

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

Considerazioni sulla pipeline CI/CD

Se si usano pipeline automatizzate per copiare o alzare di livello gli artefatti tra registri (ad esempio, da un registro di gestione temporanea a un registro di produzione), verificare che la pipeline mantenga i metadati degli artefatti OCI. Alcuni strumenti rimuovono o sostituiscono il tipo di supporto di configurazione durante il trasferimento, facendo scomparire silenziosamente gli artefatti dall'esperienza delle operazioni.

Per verificare che un artefatto abbia i metadati corretti dopo il trasferimento, controllare il relativo manifesto:

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

L'output dovrebbe visualizzare:

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

Se configMediaType mostra un valore generico come application/vnd.oci.empty.v1+json, i metadati sono stati rimossi e l'artefatto deve essere nuovamente sottoposto a push con i flag corretti.