Wdrażanie modułów WebAssembly (WASM) i definicji grafu

Operacje Azure IoT wykresy przepływu danych obsługują moduły WebAssembly (WASM) na potrzeby niestandardowego przetwarzania danych na urządzeniach brzegowych. Możesz wdrożyć niestandardową logikę biznesową i przekształcenia danych w ramach potoków przepływu danych.

Ważne

Wykresy przepływu danych obsługują obecnie tylko punkty końcowe MQTT, Kafka i OpenTelemetry. Inne typy punktów końcowych, takie jak Data Lake, Microsoft Fabric OneLake, Azure Data Explorer i Local Storage, nie są obsługiwane.

Ważne

Obecnie jedynym łącznikiem obsługującym definicje grafu na potrzeby przetwarzania niestandardowego jest łącznik HTTP/REST.

Ważne

Obecnie interfejs webowy doświadczenia operacyjnego obsługuje jedynie tworzenie i przeglądanie artefaktów grafów przepływu danych pochodzących z Azure Container Registry (ACR), a dla wbudowanych transformacji – mcr.microsoft.com. Aby dowiedzieć się więcej, zobacz Internetowy interfejs użytkownika środowiska obsługi wyświetla tylko artefakty grafu przepływu danych pochodzące z usługi Azure Container Registry (ACR) i witryny mcr.microsoft.com.

Wymagania wstępne

  • Instancja usługi Operacje Azure IoT wdrożona w klastrze Kubernetes. Aby uzyskać więcej informacji, zobacz Deploy Operacje Azure IoT.

Aby wypchnąć własne moduły i grafy do rejestru prywatnego, takiego jak Azure Container Registry (ACR), potrzebne są również następujące elementy:

  • Dostęp do rejestru kontenerów, takiego jak ACR, do przechowywania modułów i grafów WASM.
  • Narzędzie wiersza poleceń OCI Registry As Storage (ORAS) do przesyłania modułów WASM do rejestru.

Przykłady interfejsu wiersza polecenia platformy Azure (Azure CLI) w tym artykule wykorzystują zmienne środowiskowe, dzięki czemu można ustawić każdą wartość tylko raz, a następnie kopiować i wklejać polecenia bez zmian. Jeśli korzystasz ze środowiska Operacje Azure IoT Codespaces z quickstartu, te zmienne są już ustawione i możesz pominąć ten krok. W przeciwnym razie ustaw następujące zmienne środowiskowe w swojej poskoczce przed uruchomieniem poleceń.

Poniższe skrypty określają najczęściej używane zmienne środowiskowe:

Zmienna środowiskowa Opis
SUBSCRIPTION_ID ID subskrypcji zawierającej Twoją instancję Operacje Azure IoT.
RESOURCE_GROUP Nazwa grupy zasobów zawierającej Twoją instancję Operacje Azure IoT.
AIO_INSTANCE_NAME Nazwa Twojej instancji Operacje Azure IoT. Aby wyświetlić swoje instancje, uruchom az iot ops list -o table.
CLUSTER_NAME Nazwa klastra Kubernetes z włączonym Azure Arc, który hostuje Twoją instancję.
LOCATION Region platformy Azure, który ma być używany dla nowych zasobów, na przykład eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Wystarczy ustawić zmienne, których używa ten artykuł. W tym artykule może być użytych dodatkowych zmiennych środowiskowych do wyboru nazw zasobów. Artykuł wyjaśnia, jak ustawić je tam, gdzie są wprowadzane.

Przegląd

Moduły WASM w grafach i łącznikach przepływu danych Operacje Azure IoT umożliwiają przetwarzanie danych na krawędzi sieci z wysoką wydajnością i bezpieczeństwem. WASM uruchamia się w środowisku izolowanym (sandbox) i obsługuje języki Rust i Python.

Używanie wstępnie utworzonych modułów z rejestru publicznego

Możesz korzystać z gotowych przykładowych modułów WASM i definicji grafów, które są opublikowane w publicznym rejestrze kontenerowym GitHub (ghcr.io) pod adresem azure-samples/explore-iot-operations.

Uwaga / Notatka

ghcr.iowymaga uwierzytelnionej wymiany tokenów zanim obsłuży nawet publiczne artefakty, a obecne środowisko uruchomieniowe Operacje Azure IoT nie wykonuje anonimowej wymiany. Skonfiguruj punkt końcowy public-ghcr przy użyciu sekretu pobierania artefaktów opartego na osobistym tokenie dostępu GitHuba (PAT) z zakresem read:packages, zamiast uwierzytelniania anonimowego. Informacje o krokach dotyczących punktu końcowego i sekretu znajdziesz w sekcji Użyj publicznego rejestru.

Dostępne przykładowe artefakty

Po utworzeniu punktu końcowego rejestru public-ghcr odwołaj się do niego w grafach przepływu danych za pomocą polecenia registryEndpointRef: public-ghcr. Ponieważ hostem punktu końcowego rejestru jest ghcr.io, uwzględnij ścieżkę repozytorium azure-samples/explore-iot-operations w odwołaniach do artefaktów. Dostępne są następujące przykładowe moduły i definicje grafu:

Artifact Opis
azure-samples/explore-iot-operations/graph-simple:1.0.0 Prosta definicja grafu konwersji temperatury
azure-samples/explore-iot-operations/graph-complex:1.0.0 Definicja grafu przetwarzania wielu czujników
azure-samples/explore-iot-operations/temperature:1.0.0 Moduł konwersji temperatury (Fahrenheit do Stopni Celsjusza)
azure-samples/explore-iot-operations/window:1.0.0 Moduł obsługi okien opartych na czasie
azure-samples/explore-iot-operations/snapshot:1.0.0 Moduł przetwarzania obrazów i wykrywania obiektów
azure-samples/explore-iot-operations/format:1.0.0 Moduł konwersji formatu obrazu
azure-samples/explore-iot-operations/humidity:1.0.0 Moduł przetwarzania danych wilgotności
azure-samples/explore-iot-operations/collection:1.0.0 Moduł agregacji danych z wieloma czujnikami
azure-samples/explore-iot-operations/enrichment:1.0.0 Moduł wzbogacania metadanych
azure-samples/explore-iot-operations/filter:1.0.0 Moduł filtrowania danych

Uwaga / Notatka

Publicznie dostępne przykładowe definicje grafów używają odwołań do modułów, które zawierają ścieżkę repozytorium azure-samples/explore-iot-operations, na przykład azure-samples/explore-iot-operations/temperature:1.0.0. Ta ścieżka jest wymagana, ponieważ host punktu końcowego rejestru to ghcr.io. Jeśli skopiujesz artefakty do własnego rejestru, upewnij się, że odwołania do modułu w definicji grafu są zgodne ze ścieżkami, w których wypchniesz artefakty modułu.

Aby użyć prostego grafu z rejestrem publicznym, zobacz Przykład 1: Wdrożenie podstawowe z jednym modułem WASM i użyj public-ghcr go jako nazwy punktu końcowego rejestru.

Korzystanie z rejestru prywatnego

Jeśli chcesz użyć modułów niestandardowych lub chcesz hostować własne kopie przykładowych modułów, skonfiguruj prywatny rejestr kontenerów, taki jak Azure Container Registry (ACR).

Konfigurowanie rejestru kontenerów

Operacje Azure IoT wymaga rejestru kontenerów do ściągania modułów WASM i definicji grafów. Można użyć Azure Container Registry (ACR) lub innego rejestru zgodnego z protokołem OCI. Aby utworzyć wystąpienie usługi ACR, zobacz Wdrażanie usługi Azure Container Registry. Po utworzeniu rejestru utwórz punkt końcowy rejestru wskazujący go — zobacz Tworzenie punktu końcowego rejestru.

Zainstaluj CLI ORAS

Użyj ORAS CLI, aby przesłać moduły WASM i definicje grafu do rejestru kontenerów. Aby uzyskać instrukcje dotyczące instalacji, zobacz Instalowanie usługi ORAS.

Ściąganie przykładowych modułów z rejestru publicznego

Użyj wstępnie utworzonych przykładowych modułów:

# 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

Wypychanie modułów do rejestru

Po utworzeniu przykładowych modułów i grafów, prześlij je do rejestru kontenerów. Ustaw ACR_NAME zmienną środowiskową na nazwę swojego Azure Container Registry.

Ważne

Środowisko operacji odnajduje artefakty według typu nośnika konfiguracji OCI, a nie typu nośnika warstwowego. Podczas wypychania artefaktów do rejestru należy ustawić poprawne typy multimediów lub artefakty nie będą wyświetlane w interfejsie użytkownika środowiska operacji:

Typ artefaktu Wymagany typ nośnika konfiguracji OCI Wymagany typ nośnika warstwowego
Definicja grafu application/vnd.microsoft.aio.graph.v1+yaml application/yaml
Moduł WASM application/vnd.module.wasm.content.layer.v1+wasm application/wasm

Jeśli używasz potoku CI/CD lub innego narzędzia do kopiowania artefaktów między rejestrami, upewnij się, że zachowuje te typy mediów. Niektóre narzędzia usuwają lub zastępują metadane artefaktów podczas transferu, co powoduje dyskretne zniknięcie artefaktów ze środowiska operacji. Aby uzyskać więcej informacji, zobacz Wymagania dotyczące artefaktów rejestru.

Wybierz układ artefaktu

Nazwy artefaktów używane podczas publikowania grafów i modułów determinują odwołania do modułów potrzebne w definicji grafu. Informacje na temat zależności między hostem punktu końcowego rejestru, ścieżką artefaktu i odwołaniem do modułu można znaleźć w artykule Ścieżki artefaktów i odwołania do modułów grafu.

W przypadku przykładowych wykresów Azure zachowaj przykładową ścieżkę repozytorium podczas kopiowania artefaktów do własnego rejestru. Definicje grafu odwołują się do modułów używających tej ścieżki:

<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

Użyj artifact: azure-samples/explore-iot-operations/graph-simple:1.0.0 w grafie przepływu danych. Definicja grafu używa elementu module: "azure-samples/explore-iot-operations/temperature:1.0.0".

Dla własnych grafów możesz wybrać układ prosty:

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

Użyj artifact: graph-simple:1.0.0 w grafie przepływu danych i module: "temperature:1.0.0" w definicji grafu.

Możesz też wybrać własny układ zagnieżdżony:

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

Użyj artifact: factory/graphs/graph-simple:1.0.0 w grafie przepływu danych i module: "factory/graphs/temperature:1.0.0" w definicji grafu.

Aby upewnić się, że wykresy i moduły są widoczne w interfejsie użytkownika operacji w sieci Web, dodaj flagi --config i --artifact-type, jak pokazano w poniższym przykładzie.

# 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

Wskazówka

Możesz również wypchnąć własne moduły i utworzyć wykresy niestandardowe. Zobacz Konfiguracja niestandardowych wykresów przepływu danych.

Aktualizowanie modułu w uruchomionym grafie

Moduł WASM można zaktualizować w uruchomionym grafie bez zatrzymywania grafu. Jest to przydatne, gdy chcesz zaktualizować logikę operatora bez zatrzymywania przepływu danych. Aby na przykład zaktualizować moduł konwersji temperatury z wersji 1.0.0 do 2.0.0 w układzie przykładowego artefaktu Azure, przekaż nową wersję w następujący sposób:

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

Uwaga / Notatka

Jeśli wypchniesz nową zawartość do tego samego tagu (na przykład zastępowanie azure-samples/explore-iot-operations/temperature:1.0.0), graf przepływu danych automatycznie pobierze zaktualizowany moduł bez dodatkowej konfiguracji. Jeśli jednak wprowadzisz nowy tag (na przykład azure-samples/explore-iot-operations/temperature:2.0.0), musisz również zaktualizować plik YAML definicji grafu tak, aby odnosiła się do nowej wersji, oraz ponownie wprowadzić artefakt grafu.

Opracowywanie niestandardowych modułów WASM

Aby utworzyć niestandardową logikę przetwarzania danych dla grafów przepływu danych, utwórz moduły WebAssembly w języku Rust lub Python. Moduły niestandardowe umożliwiają implementowanie wyspecjalizowanej logiki biznesowej, przekształceń danych i analiz, które nie są dostępne w wbudowanych operatorach.

Aby uzyskać kompleksowe wskazówki dotyczące programowania, w tym:

  • Konfigurowanie środowiska projektowego
  • Tworzenie operatorów w języku Rust i Python
  • Omówienie modelu danych i interfejsów
  • Kompilowanie i testowanie modułów

Zobacz Develop WebAssembly modules for data flow graphs (Tworzenie modułów zestawu WebAssembly dla wykresów przepływu danych).

Aby uzyskać szczegółowe informacje na temat tworzenia i konfigurowania definicji grafu YAML definiujących przepływy pracy przetwarzania danych, zobacz Konfigurowanie definicji grafu zestawu WebAssembly.

Wymagania dotyczące artefaktów rejestru

Środowisko operacji używa metadanych artefaktu OCI do odnajdywania i wyświetlania grafów i modułów. Zrozumienie tych wymagań jest ważne podczas tworzenia niestandardowych potoków CI/CD, kopiowania artefaktów między rejestrami lub rozwiązywania problemów z brakującymi artefaktami w interfejsie użytkownika.

Jak działa odnajdywanie artefaktów

Podczas wypychania artefaktu do rejestru za pomocą usługi ORAS manifest OCI zawiera dwa istotne pola:

  • Typ nośnika konfiguracji: Określa, jakiego rodzaju jest ten artefakt. Środowisko operacji filtruje to pole, aby znaleźć grafy i moduły.
  • Typ nośnika warstwowego: opisuje format zawartości rzeczywistego pliku (YAML lub WASM).

Środowisko operacji używa typu nośnika konfiguracji do odnajdywania, a nie typu nośnika warstwowego. Jeśli brakuje typu nośnika konfiguracji lub jest on nieprawidłowy, artefakt istnieje w rejestrze, ale nie jest wyświetlany w interfejsie użytkownika.

Wymagane typy multimediów

Typ artefaktu Typ nośnika konfiguracji (--config lub --artifact-type) Typ nośnika warstwowego
Definicja grafu application/vnd.microsoft.aio.graph.v1+yaml application/yaml
Moduł WASM application/vnd.module.wasm.content.layer.v1+wasm application/wasm

W przypadku definicji grafów przekaż typ MIME konfiguracji z flagą --config. Ustaw zmienną środowiskową REGISTRY na hosta rejestru (na przykład: <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

W przypadku modułów WASM przekaż go z flagą --artifact-type :

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

Zagadnienia dotyczące potoku CI/CD

Jeśli używasz zautomatyzowanych pipeline'ów do kopiowania lub promowania artefaktów między rejestrami (na przykład z rejestru przejściowego do rejestru produkcyjnego), sprawdź, czy pipeline zachowuje metadane artefaktów OCI. Niektóre narzędzia usuwają lub zastępują typ nośnika konfiguracji podczas transferu, co powoduje dyskretne zniknięcie artefaktów ze środowiska operacji.

Aby sprawdzić, czy artefakt ma poprawne metadane po przeniesieniu, sprawdź jego manifest:

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

Dane wyjściowe powinny być wyświetlane:

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

Jeśli configMediaType pokazuje wartość ogólną, taką jak application/vnd.oci.empty.v1+json, metadane zostały usunięte, a artefakt musi zostać ponownie wypchnięty z prawidłowymi flagami.