Skip to content

Commit 4abc659

Browse files
committed
Fix WASM docs: add public registry path, fix links, add troubleshooting
Based on MaibornWolff partner feedback on AIO 1.2.112: - Add ghcr.io public registry quickstart path to reduce getting-started friction (no ACR setup needed for evaluation) - Add registry endpoint examples for ghcr.io with anonymous auth - Fix broken cross-reference link in configure-wasm-graph-definitions.md (pointed to connect-to-cloud/ instead of develop-edge-apps/) - Add clear Data Flow vs Data Flow Graph distinction note - Add troubleshooting section for RegistryEndpoint not found errors - Update host pattern docs to show non-ACR registries are supported - Improve prerequisites with two clear paths (public vs private registry)
1 parent 39abbe5 commit 4abc659

4 files changed

Lines changed: 187 additions & 11 deletions

File tree

articles/iot-operations/connect-to-cloud/howto-dataflow-graph-wasm.md

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@ Azure IoT Operations data flow graphs support WebAssembly (WASM) modules for cus
2626
## Prerequisites
2727

2828
- Deploy an Azure IoT Operations instance on an Arc-enabled Kubernetes cluster. For more information, see [Deploy Azure IoT Operations](../deploy-iot-ops/howto-deploy-iot-operations.md).
29-
- Configure your container registry and add the sample graph definitions and WASM modules by following guidance in [Deploy WebAssembly (WASM) modules and graph definitions](../develop-edge-apps/howto-deploy-wasm-graph-definitions.md).
29+
- Configure a registry endpoint to access WASM modules and graph definitions. You have two options:
30+
- **Quick start with public registry**: Create a registry endpoint pointing to `ghcr.io/azure-samples/explore-iot-operations` with anonymous authentication. See [Use prebuilt modules from a public registry](../develop-edge-apps/howto-deploy-wasm-graph-definitions.md#use-prebuilt-modules-from-a-public-registry) for instructions.
31+
- **Private registry**: Set up your own container registry and push the sample modules by following guidance in [Deploy WebAssembly (WASM) modules and graph definitions](../develop-edge-apps/howto-deploy-wasm-graph-definitions.md).
32+
33+
> [!NOTE]
34+
> **Data flows vs. data flow graphs**: A *data flow* is a pipeline that moves and transforms data between endpoints using built-in transformations. A *data flow graph* extends data flows with custom processing logic implemented as WebAssembly modules. Data flow graphs use YAML graph definitions that specify how WASM operators connect, while the data flow graph resource wraps this definition and maps its abstract source/sink operations to concrete endpoints (MQTT topics, Kafka topics, etc.). Use data flows for built-in transformations and data flow graphs when you need custom processing logic.
3035
3136
## Overview
3237

@@ -1056,6 +1061,50 @@ Registry endpoints provide access to container registries for pulling WASM modul
10561061
For detailed configuration information, see [Configure registry endpoints](../develop-edge-apps/howto-configure-registry-endpoint.md).
10571062

10581063

1064+
## Troubleshoot data flow graphs
1065+
1066+
### RegistryEndpoint not found
1067+
1068+
If the data flow graph fails to start and reports that it can't find the registry endpoint, verify the following:
1069+
1070+
1. **Registry endpoint name matches**: The `registryEndpointRef` value in your data flow graph must exactly match the `name` of your `RegistryEndpoint` resource. Check for typos and case sensitivity.
1071+
1072+
```bash
1073+
# List all registry endpoints in the namespace
1074+
kubectl get registryendpoints -n azure-iot-operations
1075+
```
1076+
1077+
1. **Registry endpoint is in the correct namespace**: The registry endpoint must be in the `azure-iot-operations` namespace (or the same namespace as your data flow graph).
1078+
1079+
1. **Registry endpoint is ready**: Check the status of your registry endpoint:
1080+
1081+
```bash
1082+
kubectl describe registryendpoint <REGISTRY_ENDPOINT_NAME> -n azure-iot-operations
1083+
```
1084+
1085+
1. **Authentication is configured correctly**: If using managed identity, ensure the Azure IoT Operations Arc extension has `AcrPull` permissions on the registry. If using anonymous authentication with a public registry, verify the host URL is correct.
1086+
1087+
1. **Artifacts exist in the registry**: Verify that the graph definition and WASM modules referenced in your graph are available at the expected tags in the registry:
1088+
1089+
```bash
1090+
# Check if artifacts exist (example with ORAS)
1091+
oras manifest fetch <REGISTRY_HOST>/graph-simple:1.0.0
1092+
```
1093+
1094+
### Data flow graph is running but not processing data
1095+
1096+
If the data flow graph is deployed but messages aren't being processed:
1097+
1098+
1. **Check data flow graph status**: Look for errors in the data flow graph resource status:
1099+
1100+
```bash
1101+
kubectl get dataflowgraph <GRAPH_NAME> -n azure-iot-operations -o yaml
1102+
```
1103+
1104+
1. **Verify MQTT topics**: Ensure the source topics in your data flow graph match the topics where you're publishing data.
1105+
1106+
1. **Check timestamps**: Data flow graphs use Hybrid Logical Clock (HLC) timestamps for message processing. Include the `__ts` user property when publishing MQTT messages to ensure timely processing.
1107+
10591108
## Related content
10601109

10611110
- [Configure MQTT data flow endpoints](howto-configure-mqtt-endpoint.md)

articles/iot-operations/develop-edge-apps/howto-configure-registry-endpoint.md

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,10 +180,11 @@ This section describes the configuration options available for registry endpoint
180180
The `host` property specifies the container registry hostname. For ACR, use the format `<registry-name>.azurecr.io`. The host property supports HTTPS URLs or just the hostname.
181181

182182
**Examples**:
183-
- `myregistry.azurecr.io`
184-
- `https://myregistry.azurecr.io`
183+
- `myregistry.azurecr.io` (Azure Container Registry)
184+
- `ghcr.io/azure-samples/explore-iot-operations` (GitHub Container Registry with path)
185+
- `docker.io/myorg` (Docker Hub)
185186

186-
**Pattern**: Must match the pattern `^(https:\/\/)?[a-zA-Z0-9\-]+\.azurecr\.io$` for ACR.
187+
The host property supports any OCI-compatible registry hostname, with an optional path prefix for registries that use repository namespaces.
187188

188189
### Authentication methods
189190

@@ -303,16 +304,65 @@ ACR is the recommended container registry for Azure IoT Operations. ACR provides
303304
1. **Configure permissions**: Ensure the Azure IoT Operations managed identity has `AcrPull` permissions on the registry.
304305
1. **Push artifacts**: Upload your WASM modules and graph definitions to the registry using tools like ORAS CLI.
305306

307+
## Use a public registry like GitHub Container Registry (ghcr.io)
308+
309+
You can configure a registry endpoint to point directly at a public OCI-compatible registry. This approach lets you use prebuilt WASM modules and graph definitions without setting up your own private registry, which is ideal for getting started quickly or for evaluation.
310+
311+
For example, the Azure IoT Operations sample WASM modules and graph definitions are published at `ghcr.io/azure-samples/explore-iot-operations`. You can create a registry endpoint that points directly to this public registry by using anonymous authentication.
312+
313+
# [Bicep](#tab/bicep)
314+
315+
```bicep
316+
resource publicRegistryEndpoint 'Microsoft.IoTOperations/instances/registryEndpoints@2025-10-01-preview' = {
317+
parent: aioInstance
318+
name: 'public-ghcr'
319+
extendedLocation: {
320+
name: customLocation.id
321+
type: 'CustomLocation'
322+
}
323+
properties: {
324+
host: 'ghcr.io/azure-samples/explore-iot-operations'
325+
authentication: {
326+
method: 'Anonymous'
327+
anonymousSettings: {}
328+
}
329+
}
330+
}
331+
```
332+
333+
# [Kubernetes](#tab/kubernetes)
334+
335+
```yaml
336+
apiVersion: connectivity.iotoperations.azure.com/v1beta1
337+
kind: RegistryEndpoint
338+
metadata:
339+
name: public-ghcr
340+
namespace: azure-iot-operations
341+
spec:
342+
host: ghcr.io/azure-samples/explore-iot-operations
343+
authentication:
344+
method: Anonymous
345+
anonymousSettings: {}
346+
```
347+
348+
---
349+
350+
After you create this registry endpoint, you can reference it in your data flow graph as `registryEndpointRef: public-ghcr`. No ORAS pull/push steps are needed because the runtime pulls the artifacts directly from the public registry.
351+
352+
> [!NOTE]
353+
> Public registries don't require authentication, but they may have rate limits. For production workloads, consider using a private registry like Azure Container Registry.
354+
306355
## Other container registries
307356

308-
Registry endpoints also support other OCI-compatible container registries such as:
357+
Registry endpoints support any OCI-compatible container registry, including:
309358

310359
- Docker Hub
360+
- GitHub Container Registry (ghcr.io)
311361
- Harbor
312362
- AWS Elastic Container Registry (ECR)
313363
- Google Container Registry (GCR)
314364

315-
For these registries, you typically use artifact pull secrets for authentication, unless they support Azure managed identity.
365+
For public registries, use anonymous authentication. For private registries, use artifact pull secrets or managed identity authentication as appropriate.
316366

317367
## Next steps
318368

articles/iot-operations/develop-edge-apps/howto-configure-wasm-graph-definitions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,4 +281,4 @@ For a complete implementation example, see the [branch module](https://github.co
281281

282282
- [Develop WebAssembly modules for data flow graphs](howto-develop-wasm-modules.md)
283283
- [Use WebAssembly with data flow graphs](../connect-to-cloud/howto-dataflow-graph-wasm.md)
284-
- [Configure registry endpoints](../connect-to-cloud/howto-configure-registry-endpoint.md)
284+
- [Configure registry endpoints](howto-configure-registry-endpoint.md)

articles/iot-operations/develop-edge-apps/howto-deploy-wasm-graph-definitions.md

Lines changed: 81 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,93 @@ Azure IoT Operations data flow graphs support WebAssembly (WASM) modules for cus
2323
## Prerequisites
2424

2525
- Deploy an Azure IoT Operations instance on an Arc-enabled Kubernetes cluster. For more information, see [Deploy Azure IoT Operations](../deploy-iot-ops/howto-deploy-iot-operations.md).
26-
- Use a container registry like Azure Container Registry (ACR) to store WASM modules and graphs.
27-
- Configure a registry endpoint to enable your Azure IoT Operations instance to access your container registry. For more information, see [Configure registry endpoints](howto-configure-registry-endpoint.md).
26+
- Configure a registry endpoint to enable your Azure IoT Operations instance to access a container registry. For more information, see [Configure registry endpoints](howto-configure-registry-endpoint.md).
27+
28+
If you want to use a private registry like Azure Container Registry (ACR), you also need:
29+
30+
- Access to a container registry like ACR to store WASM modules and graphs.
2831
- Install the OCI Registry As Storage (ORAS) CLI to push WASM modules to the registry.
29-
- Develop custom WASM modules by following guidance in [Build WASM modules for data flows in VS Code](howto-build-wasm-modules-vscode.md) or [Develop WebAssembly (WASM) modules and graph definitions for data flow graphs](howto-develop-wasm-modules.md).
32+
33+
> [!TIP]
34+
> For a quick start without setting up a private registry, you can use the prebuilt sample modules directly from the public GitHub Container Registry (ghcr.io). See [Use prebuilt modules from a public registry](#use-prebuilt-modules-from-a-public-registry) for instructions.
3035
3136
## Overview
3237

3338
WASM modules in Azure IoT Operations data flow graphs and connectors let you process data at the edge with high performance and security. WASM runs in a sandboxed environment and supports Rust and Python.
3439

35-
## Set up container registry
40+
## Use prebuilt modules from a public registry
41+
42+
The fastest way to get started is to use the prebuilt sample WASM modules and graph definitions directly from the public GitHub Container Registry. This approach doesn't require setting up a private registry, ORAS CLI, or any pull/push steps.
43+
44+
### Create a registry endpoint for the public registry
45+
46+
Create a registry endpoint that points to the public registry where the sample modules are hosted:
47+
48+
# [Bicep](#tab/bicep)
49+
50+
```bicep
51+
resource publicRegistryEndpoint 'Microsoft.IoTOperations/instances/registryEndpoints@2025-10-01-preview' = {
52+
parent: aioInstance
53+
name: 'public-ghcr'
54+
extendedLocation: {
55+
name: customLocation.id
56+
type: 'CustomLocation'
57+
}
58+
properties: {
59+
host: 'ghcr.io/azure-samples/explore-iot-operations'
60+
authentication: {
61+
method: 'Anonymous'
62+
anonymousSettings: {}
63+
}
64+
}
65+
}
66+
```
67+
68+
# [Kubernetes](#tab/kubernetes)
69+
70+
```yaml
71+
apiVersion: connectivity.iotoperations.azure.com/v1beta1
72+
kind: RegistryEndpoint
73+
metadata:
74+
name: public-ghcr
75+
namespace: azure-iot-operations
76+
spec:
77+
host: ghcr.io/azure-samples/explore-iot-operations
78+
authentication:
79+
method: Anonymous
80+
anonymousSettings: {}
81+
```
82+
83+
Apply the manifest:
84+
85+
```bash
86+
kubectl apply -f registry-endpoint.yaml
87+
```
88+
89+
---
90+
91+
After you create this registry endpoint, you can reference it in your data flow graphs by using `registryEndpointRef: public-ghcr`. The following sample modules and graph definitions are available:
92+
93+
| Artifact | Description |
94+
|----------|-------------|
95+
| `graph-simple:1.0.0` | Simple temperature conversion graph definition |
96+
| `graph-complex:1.0.0` | Multi-sensor processing graph definition |
97+
| `temperature:1.0.0` | Temperature conversion module (Fahrenheit to Celsius) |
98+
| `window:1.0.0` | Time-based windowing module |
99+
| `snapshot:1.0.0` | Image processing and object detection module |
100+
| `format:1.0.0` | Image format conversion module |
101+
| `humidity:1.0.0` | Humidity data processing module |
102+
| `collection:1.0.0` | Multi-sensor data aggregation module |
103+
| `enrichment:1.0.0` | Metadata enrichment module |
104+
| `filter:1.0.0` | Data filtering module |
105+
106+
To use the simple graph with the public registry, see [Example 1: Basic deployment with one WASM module](../connect-to-cloud/howto-dataflow-graph-wasm.md#example-1-basic-deployment-with-one-wasm-module) and use `public-ghcr` as the registry endpoint name.
107+
108+
## Use a private registry
109+
110+
If you need to use custom modules or want to host your own copies of the sample modules, set up a private container registry like Azure Container Registry (ACR).
111+
112+
### Set up container registry
36113

37114
Azure IoT Operations needs a container registry to pull WASM modules and graph definitions. You can use Azure Container Registry (ACR) or another OCI-compatible registry.
38115

0 commit comments

Comments
 (0)