---
id: "azure-device-registry"
type: "component"
kind: "coordination-service"
provider: "azure"
category: "ops"
docs: "https://learn.microsoft.com/en-us/azure/iot-operations/discover-manage-assets/overview-manage-assets"
url: "https://localhost:3000/catalogue/components/azure-device-registry"
---

# Azure Device Registry

Cloud registry that projects Azure IoT Operations devices and assets into Azure Resource Manager and syncs them to the edge cluster.

| | |
|---|---|
| Provider | [azure](https://localhost:3000/catalogue?provider=azure) |
| Kind | [Coordination service](https://localhost:3000/catalogue/kinds/coordination-service) |
| Category | Operations |
| Official docs | [https://learn.microsoft.com/en-us/azure/iot-operations/discover-manage-assets/overview-manage-assets](https://learn.microsoft.com/en-us/azure/iot-operations/discover-manage-assets/overview-manage-assets) |

## Properties

| property | type | values | required | kind default | this component |
|---|---|---|---|---|---|
| `cloudSourceOfTruth` | boolean | — | no | true | inherited |
| `consensus` | enum | `none`, `raft`, `paxos`, `zab` | no | "none" | inherited |
| `edgeSync` | boolean | — | no | true | inherited |
| `managed` | boolean | — | no | false | **true** |
| `namespaces` | boolean | — | no | true | inherited |
| `nodes` | integer | — | no | — | inherited |
| `replicated` | boolean | — | no | false | inherited |
| `role` | enum | `metadata`, `lock`, `discovery`, `placement`, `sharding`, `leader-election`, `config` | yes | — | **"metadata"** |

Bold values are the ones this component pins.

## Rules that apply · 2

### Shared dependency without redundancy `shared-dependency-without-redundancy` (error)

- Page: https://localhost:3000/catalogue/rules/shared-dependency-without-redundancy.md
- Why: The design requires redundant discovery, but this DNS or coordination service, which everything depends on, runs on a single provider or a single replica. Its failure is the whole system's failure.
- Applies to: every node of kind dns or coordination-service
- Message: Shared dependency '{{node.id}}' is not redundant, but the design requires redundant discovery.

It fires when:

- all of these hold:
  - the design requirement `availability.discoveryRedundant` is true
  - any of these hold:
    - the node's `redundantProviders` is false
    - the node's `replicated` is false

### Stateful engine pinned to a single zone `stateful-engine-pinned-to-single-zone` (error)

- Page: https://localhost:3000/catalogue/rules/stateful-engine-pinned-to-single-zone.md
- Why: A matching engine, coordination service or event store living in exactly one availability zone, with no failover and no replication, is lost with that zone. Everything that depends on it stops with it.
- Applies to: every node of kind matching-engine, coordination-service or event-store
- Message: '{{node.id}}' is pinned to a single availability zone with no failover or replication.

It fires when:

- all of these hold:
  - the node sits inside exactly 1 availability-zone group
  - any of these hold:
    - the node's `failover` is "none"
    - the node's `replicated` is false
    - the node's `replication` is "none"

## Other products of the same kind · 17

- [Microservices Engine](https://localhost:3000/catalogue/components/alibaba-mse.md) `alibaba-mse` — alibabacloud
- [AWS Cloud Map](https://localhost:3000/catalogue/components/aws-cloud-map.md) `aws-cloud-map` — aws
- [Azure Arc](https://localhost:3000/catalogue/components/azure-arc.md) `azure-arc` — azure
- [Durable Objects](https://localhost:3000/catalogue/components/cloudflare-durable-objects.md) `cloudflare-durable-objects` — cloudflare
- [Apache Helix](https://localhost:3000/catalogue/components/apache-helix.md) `apache-helix` — default
- [Consul](https://localhost:3000/catalogue/components/consul.md) `consul` — default
- [Generic coordination service](https://localhost:3000/catalogue/components/coordination-service.md) `coordination-service` — default
- [etcd](https://localhost:3000/catalogue/components/etcd.md) `etcd` — default
- [Eureka](https://localhost:3000/catalogue/components/eureka.md) `eureka` — default
- [Nacos](https://localhost:3000/catalogue/components/nacos.md) `nacos` — default
- [Oxia](https://localhost:3000/catalogue/components/oxia.md) `oxia` — default
- [Apache ZooKeeper](https://localhost:3000/catalogue/components/zookeeper.md) `zookeeper` — default
- [Service Directory](https://localhost:3000/catalogue/components/google-service-directory.md) `google-service-directory` — gcp
- [Endpoints](https://localhost:3000/catalogue/components/k8s-endpoints.md) `k8s-endpoints` — k8s
- [OpenStack Blazar](https://localhost:3000/catalogue/components/openstack-blazar.md) `openstack-blazar` — openstack
- [OpenStack Cyborg](https://localhost:3000/catalogue/components/openstack-cyborg.md) `openstack-cyborg` — openstack
- [OpenStack Placement](https://localhost:3000/catalogue/components/openstack-placement.md) `openstack-placement` — openstack

## Use it in a design

```yaml
nodes:
  - { id: "azure-device-registry", component: "azure-device-registry" }
```

## Source (`component` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../../schema/component.schema.json
# Azure Device Registry: the cloud registry that projects the devices and assets of an Azure IoT
# Operations deployment into Azure Resource Manager ("Asset and Device Management - Azure IoT
# Operations"). That page states Device Registry "offers a unified registry so that apps and services
# that interact with your assets connect to a single source", that it "syncs assets in the cloud with
# custom resources in Kubernetes on the edge", that it organises assets and devices into namespaces
# with one namespace per IoT Operations instance, and that "the cloud is always the source of truth for
# device and asset configuration".
schemaVersion: "1"
type: "component"
id: "azure-device-registry"
kind: "coordination-service"
provider: "azure"
docs: "https://learn.microsoft.com/en-us/azure/iot-operations/discover-manage-assets/overview-manage-assets"
defaults:
  managed: true
  role: "metadata"
properties:
  namespaces:
    type: "boolean"
    default: true
  edgeSync:
    type: "boolean"
    default: true
  cloudSourceOfTruth:
    type: "boolean"
    default: true
```

Human page: https://localhost:3000/catalogue/components/azure-device-registry
