Configure Azure IoT Operations Brokers

The azure-native:iotoperations:Broker resource, part of the Pulumi Azure Native provider, defines an MQTT broker instance within Azure IoT Operations: its scaling topology, memory footprint, message buffering, and runtime behavior. This guide focuses on four capabilities: memory profiles and resource allocation, frontend/backend scaling (cardinality), disk-backed message buffering, and client limits and diagnostics.

Brokers run within an Azure IoT Operations instance and require an Azure Arc custom location. Disk buffering relies on Kubernetes storage classes. The examples are intentionally small. Combine them with your own IoT Operations instance, custom location, and storage configuration.

Create a minimal broker with memory profile

Most deployments start with a minimal broker that sets the memory profile and relies on defaults.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const broker = new azure_native.iotoperations.Broker("broker", {
    brokerName: "resource-name123",
    extendedLocation: {
        name: "qmbrfwcpwwhggszhrdjv",
        type: azure_native.iotoperations.ExtendedLocationType.CustomLocation,
    },
    instanceName: "resource-name123",
    properties: {
        memoryProfile: azure_native.iotoperations.BrokerMemoryProfile.Tiny,
    },
    resourceGroupName: "rgiotoperations",
});
import pulumi
import pulumi_azure_native as azure_native

broker = azure_native.iotoperations.Broker("broker",
    broker_name="resource-name123",
    extended_location={
        "name": "qmbrfwcpwwhggszhrdjv",
        "type": azure_native.iotoperations.ExtendedLocationType.CUSTOM_LOCATION,
    },
    instance_name="resource-name123",
    properties={
        "memory_profile": azure_native.iotoperations.BrokerMemoryProfile.TINY,
    },
    resource_group_name="rgiotoperations")
package main

import (
	iotoperations "github.com/pulumi/pulumi-azure-native-sdk/iotoperations/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := iotoperations.NewBroker(ctx, "broker", &iotoperations.BrokerArgs{
			BrokerName: pulumi.String("resource-name123"),
			ExtendedLocation: &iotoperations.ExtendedLocationArgs{
				Name: pulumi.String("qmbrfwcpwwhggszhrdjv"),
				Type: pulumi.String(iotoperations.ExtendedLocationTypeCustomLocation),
			},
			InstanceName: pulumi.String("resource-name123"),
			Properties: &iotoperations.BrokerPropertiesArgs{
				MemoryProfile: pulumi.String(iotoperations.BrokerMemoryProfileTiny),
			},
			ResourceGroupName: pulumi.String("rgiotoperations"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var broker = new AzureNative.IoTOperations.Broker("broker", new()
    {
        BrokerName = "resource-name123",
        ExtendedLocation = new AzureNative.IoTOperations.Inputs.ExtendedLocationArgs
        {
            Name = "qmbrfwcpwwhggszhrdjv",
            Type = AzureNative.IoTOperations.ExtendedLocationType.CustomLocation,
        },
        InstanceName = "resource-name123",
        Properties = new AzureNative.IoTOperations.Inputs.BrokerPropertiesArgs
        {
            MemoryProfile = AzureNative.IoTOperations.BrokerMemoryProfile.Tiny,
        },
        ResourceGroupName = "rgiotoperations",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.iotoperations.Broker;
import com.pulumi.azurenative.iotoperations.BrokerArgs;
import com.pulumi.azurenative.iotoperations.inputs.ExtendedLocationArgs;
import com.pulumi.azurenative.iotoperations.inputs.BrokerPropertiesArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var broker = new Broker("broker", BrokerArgs.builder()
            .brokerName("resource-name123")
            .extendedLocation(ExtendedLocationArgs.builder()
                .name("qmbrfwcpwwhggszhrdjv")
                .type("CustomLocation")
                .build())
            .instanceName("resource-name123")
            .properties(BrokerPropertiesArgs.builder()
                .memoryProfile("Tiny")
                .build())
            .resourceGroupName("rgiotoperations")
            .build());

    }
}
resources:
  broker:
    type: azure-native:iotoperations:Broker
    properties:
      brokerName: resource-name123
      extendedLocation:
        name: qmbrfwcpwwhggszhrdjv
        type: CustomLocation
      instanceName: resource-name123
      properties:
        memoryProfile: Tiny
      resourceGroupName: rgiotoperations

The memoryProfile property controls the broker’s resource footprint. Options include Tiny, Low, Medium, and High. The extendedLocation ties the broker to an Azure Arc custom location, and instanceName references the parent IoT Operations instance. Without additional configuration, the broker uses default scaling and buffering settings.

Scale frontend and backend with cardinality settings

Production workloads require explicit control over broker scaling to handle message throughput and ensure high availability.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const broker = new azure_native.iotoperations.Broker("broker", {
    brokerName: "resource-name123",
    extendedLocation: {
        name: "qmbrfwcpwwhggszhrdjv",
        type: azure_native.iotoperations.ExtendedLocationType.CustomLocation,
    },
    instanceName: "resource-name123",
    properties: {
        cardinality: {
            backendChain: {
                partitions: 2,
                redundancyFactor: 2,
                workers: 2,
            },
            frontend: {
                replicas: 2,
                workers: 2,
            },
        },
        generateResourceLimits: {
            cpu: azure_native.iotoperations.OperationalMode.Enabled,
        },
        memoryProfile: azure_native.iotoperations.BrokerMemoryProfile.Low,
    },
    resourceGroupName: "rgiotoperations",
});
import pulumi
import pulumi_azure_native as azure_native

broker = azure_native.iotoperations.Broker("broker",
    broker_name="resource-name123",
    extended_location={
        "name": "qmbrfwcpwwhggszhrdjv",
        "type": azure_native.iotoperations.ExtendedLocationType.CUSTOM_LOCATION,
    },
    instance_name="resource-name123",
    properties={
        "cardinality": {
            "backend_chain": {
                "partitions": 2,
                "redundancy_factor": 2,
                "workers": 2,
            },
            "frontend": {
                "replicas": 2,
                "workers": 2,
            },
        },
        "generate_resource_limits": {
            "cpu": azure_native.iotoperations.OperationalMode.ENABLED,
        },
        "memory_profile": azure_native.iotoperations.BrokerMemoryProfile.LOW,
    },
    resource_group_name="rgiotoperations")
package main

import (
	iotoperations "github.com/pulumi/pulumi-azure-native-sdk/iotoperations/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := iotoperations.NewBroker(ctx, "broker", &iotoperations.BrokerArgs{
			BrokerName: pulumi.String("resource-name123"),
			ExtendedLocation: &iotoperations.ExtendedLocationArgs{
				Name: pulumi.String("qmbrfwcpwwhggszhrdjv"),
				Type: pulumi.String(iotoperations.ExtendedLocationTypeCustomLocation),
			},
			InstanceName: pulumi.String("resource-name123"),
			Properties: &iotoperations.BrokerPropertiesArgs{
				Cardinality: &iotoperations.CardinalityArgs{
					BackendChain: &iotoperations.BackendChainArgs{
						Partitions:       pulumi.Int(2),
						RedundancyFactor: pulumi.Int(2),
						Workers:          pulumi.Int(2),
					},
					Frontend: &iotoperations.FrontendArgs{
						Replicas: pulumi.Int(2),
						Workers:  pulumi.Int(2),
					},
				},
				GenerateResourceLimits: &iotoperations.GenerateResourceLimitsArgs{
					Cpu: pulumi.String(iotoperations.OperationalModeEnabled),
				},
				MemoryProfile: pulumi.String(iotoperations.BrokerMemoryProfileLow),
			},
			ResourceGroupName: pulumi.String("rgiotoperations"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var broker = new AzureNative.IoTOperations.Broker("broker", new()
    {
        BrokerName = "resource-name123",
        ExtendedLocation = new AzureNative.IoTOperations.Inputs.ExtendedLocationArgs
        {
            Name = "qmbrfwcpwwhggszhrdjv",
            Type = AzureNative.IoTOperations.ExtendedLocationType.CustomLocation,
        },
        InstanceName = "resource-name123",
        Properties = new AzureNative.IoTOperations.Inputs.BrokerPropertiesArgs
        {
            Cardinality = new AzureNative.IoTOperations.Inputs.CardinalityArgs
            {
                BackendChain = new AzureNative.IoTOperations.Inputs.BackendChainArgs
                {
                    Partitions = 2,
                    RedundancyFactor = 2,
                    Workers = 2,
                },
                Frontend = new AzureNative.IoTOperations.Inputs.FrontendArgs
                {
                    Replicas = 2,
                    Workers = 2,
                },
            },
            GenerateResourceLimits = new AzureNative.IoTOperations.Inputs.GenerateResourceLimitsArgs
            {
                Cpu = AzureNative.IoTOperations.OperationalMode.Enabled,
            },
            MemoryProfile = AzureNative.IoTOperations.BrokerMemoryProfile.Low,
        },
        ResourceGroupName = "rgiotoperations",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.iotoperations.Broker;
import com.pulumi.azurenative.iotoperations.BrokerArgs;
import com.pulumi.azurenative.iotoperations.inputs.ExtendedLocationArgs;
import com.pulumi.azurenative.iotoperations.inputs.BrokerPropertiesArgs;
import com.pulumi.azurenative.iotoperations.inputs.CardinalityArgs;
import com.pulumi.azurenative.iotoperations.inputs.BackendChainArgs;
import com.pulumi.azurenative.iotoperations.inputs.FrontendArgs;
import com.pulumi.azurenative.iotoperations.inputs.GenerateResourceLimitsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var broker = new Broker("broker", BrokerArgs.builder()
            .brokerName("resource-name123")
            .extendedLocation(ExtendedLocationArgs.builder()
                .name("qmbrfwcpwwhggszhrdjv")
                .type("CustomLocation")
                .build())
            .instanceName("resource-name123")
            .properties(BrokerPropertiesArgs.builder()
                .cardinality(CardinalityArgs.builder()
                    .backendChain(BackendChainArgs.builder()
                        .partitions(2)
                        .redundancyFactor(2)
                        .workers(2)
                        .build())
                    .frontend(FrontendArgs.builder()
                        .replicas(2)
                        .workers(2)
                        .build())
                    .build())
                .generateResourceLimits(GenerateResourceLimitsArgs.builder()
                    .cpu("Enabled")
                    .build())
                .memoryProfile("Low")
                .build())
            .resourceGroupName("rgiotoperations")
            .build());

    }
}
resources:
  broker:
    type: azure-native:iotoperations:Broker
    properties:
      brokerName: resource-name123
      extendedLocation:
        name: qmbrfwcpwwhggszhrdjv
        type: CustomLocation
      instanceName: resource-name123
      properties:
        cardinality:
          backendChain:
            partitions: 2
            redundancyFactor: 2
            workers: 2
          frontend:
            replicas: 2
            workers: 2
        generateResourceLimits:
          cpu: Enabled
        memoryProfile: Low
      resourceGroupName: rgiotoperations

The cardinality property defines the broker’s scaling topology. The frontend block sets replicas (number of frontend pods) and workers (threads per replica). The backendChain block configures partitions (message distribution), redundancyFactor (replication for fault tolerance), and workers (backend processing threads). These settings directly affect throughput and availability.

Add disk-backed message buffering for reliability

When message delivery must survive broker restarts or handle traffic spikes, disk-backed buffering provides persistent storage.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const broker = new azure_native.iotoperations.Broker("broker", {
    brokerName: "resource-name123",
    extendedLocation: {
        name: "qmbrfwcpwwhggszhrdjv",
        type: azure_native.iotoperations.ExtendedLocationType.CustomLocation,
    },
    instanceName: "resource-name123",
    properties: {
        cardinality: {
            backendChain: {
                partitions: 2,
                redundancyFactor: 2,
                workers: 2,
            },
            frontend: {
                replicas: 2,
                workers: 2,
            },
        },
        diskBackedMessageBuffer: {
            maxSize: "50M",
        },
        generateResourceLimits: {
            cpu: azure_native.iotoperations.OperationalMode.Enabled,
        },
        memoryProfile: azure_native.iotoperations.BrokerMemoryProfile.Medium,
    },
    resourceGroupName: "rgiotoperations",
});
import pulumi
import pulumi_azure_native as azure_native

broker = azure_native.iotoperations.Broker("broker",
    broker_name="resource-name123",
    extended_location={
        "name": "qmbrfwcpwwhggszhrdjv",
        "type": azure_native.iotoperations.ExtendedLocationType.CUSTOM_LOCATION,
    },
    instance_name="resource-name123",
    properties={
        "cardinality": {
            "backend_chain": {
                "partitions": 2,
                "redundancy_factor": 2,
                "workers": 2,
            },
            "frontend": {
                "replicas": 2,
                "workers": 2,
            },
        },
        "disk_backed_message_buffer": {
            "max_size": "50M",
        },
        "generate_resource_limits": {
            "cpu": azure_native.iotoperations.OperationalMode.ENABLED,
        },
        "memory_profile": azure_native.iotoperations.BrokerMemoryProfile.MEDIUM,
    },
    resource_group_name="rgiotoperations")
package main

import (
	iotoperations "github.com/pulumi/pulumi-azure-native-sdk/iotoperations/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := iotoperations.NewBroker(ctx, "broker", &iotoperations.BrokerArgs{
			BrokerName: pulumi.String("resource-name123"),
			ExtendedLocation: &iotoperations.ExtendedLocationArgs{
				Name: pulumi.String("qmbrfwcpwwhggszhrdjv"),
				Type: pulumi.String(iotoperations.ExtendedLocationTypeCustomLocation),
			},
			InstanceName: pulumi.String("resource-name123"),
			Properties: &iotoperations.BrokerPropertiesArgs{
				Cardinality: &iotoperations.CardinalityArgs{
					BackendChain: &iotoperations.BackendChainArgs{
						Partitions:       pulumi.Int(2),
						RedundancyFactor: pulumi.Int(2),
						Workers:          pulumi.Int(2),
					},
					Frontend: &iotoperations.FrontendArgs{
						Replicas: pulumi.Int(2),
						Workers:  pulumi.Int(2),
					},
				},
				DiskBackedMessageBuffer: &iotoperations.DiskBackedMessageBufferArgs{
					MaxSize: pulumi.String("50M"),
				},
				GenerateResourceLimits: &iotoperations.GenerateResourceLimitsArgs{
					Cpu: pulumi.String(iotoperations.OperationalModeEnabled),
				},
				MemoryProfile: pulumi.String(iotoperations.BrokerMemoryProfileMedium),
			},
			ResourceGroupName: pulumi.String("rgiotoperations"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var broker = new AzureNative.IoTOperations.Broker("broker", new()
    {
        BrokerName = "resource-name123",
        ExtendedLocation = new AzureNative.IoTOperations.Inputs.ExtendedLocationArgs
        {
            Name = "qmbrfwcpwwhggszhrdjv",
            Type = AzureNative.IoTOperations.ExtendedLocationType.CustomLocation,
        },
        InstanceName = "resource-name123",
        Properties = new AzureNative.IoTOperations.Inputs.BrokerPropertiesArgs
        {
            Cardinality = new AzureNative.IoTOperations.Inputs.CardinalityArgs
            {
                BackendChain = new AzureNative.IoTOperations.Inputs.BackendChainArgs
                {
                    Partitions = 2,
                    RedundancyFactor = 2,
                    Workers = 2,
                },
                Frontend = new AzureNative.IoTOperations.Inputs.FrontendArgs
                {
                    Replicas = 2,
                    Workers = 2,
                },
            },
            DiskBackedMessageBuffer = new AzureNative.IoTOperations.Inputs.DiskBackedMessageBufferArgs
            {
                MaxSize = "50M",
            },
            GenerateResourceLimits = new AzureNative.IoTOperations.Inputs.GenerateResourceLimitsArgs
            {
                Cpu = AzureNative.IoTOperations.OperationalMode.Enabled,
            },
            MemoryProfile = AzureNative.IoTOperations.BrokerMemoryProfile.Medium,
        },
        ResourceGroupName = "rgiotoperations",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.iotoperations.Broker;
import com.pulumi.azurenative.iotoperations.BrokerArgs;
import com.pulumi.azurenative.iotoperations.inputs.ExtendedLocationArgs;
import com.pulumi.azurenative.iotoperations.inputs.BrokerPropertiesArgs;
import com.pulumi.azurenative.iotoperations.inputs.CardinalityArgs;
import com.pulumi.azurenative.iotoperations.inputs.BackendChainArgs;
import com.pulumi.azurenative.iotoperations.inputs.FrontendArgs;
import com.pulumi.azurenative.iotoperations.inputs.DiskBackedMessageBufferArgs;
import com.pulumi.azurenative.iotoperations.inputs.GenerateResourceLimitsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var broker = new Broker("broker", BrokerArgs.builder()
            .brokerName("resource-name123")
            .extendedLocation(ExtendedLocationArgs.builder()
                .name("qmbrfwcpwwhggszhrdjv")
                .type("CustomLocation")
                .build())
            .instanceName("resource-name123")
            .properties(BrokerPropertiesArgs.builder()
                .cardinality(CardinalityArgs.builder()
                    .backendChain(BackendChainArgs.builder()
                        .partitions(2)
                        .redundancyFactor(2)
                        .workers(2)
                        .build())
                    .frontend(FrontendArgs.builder()
                        .replicas(2)
                        .workers(2)
                        .build())
                    .build())
                .diskBackedMessageBuffer(DiskBackedMessageBufferArgs.builder()
                    .maxSize("50M")
                    .build())
                .generateResourceLimits(GenerateResourceLimitsArgs.builder()
                    .cpu("Enabled")
                    .build())
                .memoryProfile("Medium")
                .build())
            .resourceGroupName("rgiotoperations")
            .build());

    }
}
resources:
  broker:
    type: azure-native:iotoperations:Broker
    properties:
      brokerName: resource-name123
      extendedLocation:
        name: qmbrfwcpwwhggszhrdjv
        type: CustomLocation
      instanceName: resource-name123
      properties:
        cardinality:
          backendChain:
            partitions: 2
            redundancyFactor: 2
            workers: 2
          frontend:
            replicas: 2
            workers: 2
        diskBackedMessageBuffer:
          maxSize: 50M
        generateResourceLimits:
          cpu: Enabled
        memoryProfile: Medium
      resourceGroupName: rgiotoperations

The diskBackedMessageBuffer property enables persistent message storage. The maxSize property sets the buffer capacity (e.g., “50M” for 50 megabytes). Messages that can’t be delivered immediately are written to disk, surviving broker restarts and absorbing traffic bursts. This configuration omits volume claim specifications, relying on default Kubernetes storage behavior.

Configure advanced settings and diagnostics

Complex deployments require fine-grained control over client behavior, internal security, and observability.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const broker = new azure_native.iotoperations.Broker("broker", {
    brokerName: "resource-name123",
    extendedLocation: {
        name: "qmbrfwcpwwhggszhrdjv",
        type: azure_native.iotoperations.ExtendedLocationType.CustomLocation,
    },
    instanceName: "resource-name123",
    properties: {
        advanced: {
            clients: {
                maxKeepAliveSeconds: 3744,
                maxMessageExpirySeconds: 3263,
                maxPacketSizeBytes: 3029,
                maxReceiveMaximum: 2365,
                maxSessionExpirySeconds: 3859,
                subscriberQueueLimit: {
                    length: 6,
                    strategy: azure_native.iotoperations.SubscriberMessageDropStrategy.None,
                },
            },
            encryptInternalTraffic: azure_native.iotoperations.OperationalMode.Enabled,
            internalCerts: {
                duration: "bchrc",
                privateKey: {
                    algorithm: azure_native.iotoperations.PrivateKeyAlgorithm.Ec256,
                    rotationPolicy: azure_native.iotoperations.PrivateKeyRotationPolicy.Always,
                },
                renewBefore: "xkafmpgjfifkwwrhkswtopdnne",
            },
        },
        cardinality: {
            backendChain: {
                partitions: 11,
                redundancyFactor: 5,
                workers: 15,
            },
            frontend: {
                replicas: 2,
                workers: 6,
            },
        },
        diagnostics: {
            logs: {
                level: "rnmwokumdmebpmfxxxzvvjfdywotav",
            },
            metrics: {
                prometheusPort: 7581,
            },
            selfCheck: {
                intervalSeconds: 158,
                mode: azure_native.iotoperations.OperationalMode.Enabled,
                timeoutSeconds: 14,
            },
            traces: {
                cacheSizeMegabytes: 28,
                mode: azure_native.iotoperations.OperationalMode.Enabled,
                selfTracing: {
                    intervalSeconds: 22,
                    mode: azure_native.iotoperations.OperationalMode.Enabled,
                },
                spanChannelCapacity: 1000,
            },
        },
        diskBackedMessageBuffer: {
            ephemeralVolumeClaimSpec: {
                accessModes: ["nuluhigrbb"],
                dataSource: {
                    apiGroup: "npqapyksvvpkohujx",
                    kind: "wazgyb",
                    name: "cwhsgxxcxsyppoefm",
                },
                dataSourceRef: {
                    apiGroup: "mnfnykznjjsoqpfsgdqioupt",
                    kind: "odynqzekfzsnawrctaxg",
                    name: "envszivbbmixbyddzg",
                    namespace: "etcfzvxqd",
                },
                resources: {
                    limits: {
                        key2719: "hmphcrgctu",
                    },
                    requests: {
                        key2909: "txocprnyrsgvhfrg",
                    },
                },
                selector: {
                    matchExpressions: [{
                        key: "e",
                        operator: azure_native.iotoperations.OperatorValues.In,
                        values: ["slmpajlywqvuyknipgztsonqyybt"],
                    }],
                    matchLabels: {
                        key6673: "wlngfalznwxnurzpgxomcxhbqefpr",
                    },
                },
                storageClassName: "sseyhrjptkhrqvpdpjmornkqvon",
                volumeMode: "rxvpksjuuugqnqzeiprocknbn",
                volumeName: "c",
            },
            maxSize: "500M",
            persistentVolumeClaimSpec: {
                accessModes: ["nuluhigrbb"],
                dataSource: {
                    apiGroup: "npqapyksvvpkohujx",
                    kind: "wazgyb",
                    name: "cwhsgxxcxsyppoefm",
                },
                dataSourceRef: {
                    apiGroup: "mnfnykznjjsoqpfsgdqioupt",
                    kind: "odynqzekfzsnawrctaxg",
                    name: "envszivbbmixbyddzg",
                    namespace: "etcfzvxqd",
                },
                resources: {
                    limits: {
                        key2719: "hmphcrgctu",
                    },
                    requests: {
                        key2909: "txocprnyrsgvhfrg",
                    },
                },
                selector: {
                    matchExpressions: [{
                        key: "e",
                        operator: azure_native.iotoperations.OperatorValues.In,
                        values: ["slmpajlywqvuyknipgztsonqyybt"],
                    }],
                    matchLabels: {
                        key6673: "wlngfalznwxnurzpgxomcxhbqefpr",
                    },
                },
                storageClassName: "sseyhrjptkhrqvpdpjmornkqvon",
                volumeMode: "rxvpksjuuugqnqzeiprocknbn",
                volumeName: "c",
            },
        },
        generateResourceLimits: {
            cpu: azure_native.iotoperations.OperationalMode.Enabled,
        },
        memoryProfile: azure_native.iotoperations.BrokerMemoryProfile.Tiny,
    },
    resourceGroupName: "rgiotoperations",
});
import pulumi
import pulumi_azure_native as azure_native

broker = azure_native.iotoperations.Broker("broker",
    broker_name="resource-name123",
    extended_location={
        "name": "qmbrfwcpwwhggszhrdjv",
        "type": azure_native.iotoperations.ExtendedLocationType.CUSTOM_LOCATION,
    },
    instance_name="resource-name123",
    properties={
        "advanced": {
            "clients": {
                "max_keep_alive_seconds": 3744,
                "max_message_expiry_seconds": 3263,
                "max_packet_size_bytes": 3029,
                "max_receive_maximum": 2365,
                "max_session_expiry_seconds": 3859,
                "subscriber_queue_limit": {
                    "length": 6,
                    "strategy": azure_native.iotoperations.SubscriberMessageDropStrategy.NONE,
                },
            },
            "encrypt_internal_traffic": azure_native.iotoperations.OperationalMode.ENABLED,
            "internal_certs": {
                "duration": "bchrc",
                "private_key": {
                    "algorithm": azure_native.iotoperations.PrivateKeyAlgorithm.EC256,
                    "rotation_policy": azure_native.iotoperations.PrivateKeyRotationPolicy.ALWAYS,
                },
                "renew_before": "xkafmpgjfifkwwrhkswtopdnne",
            },
        },
        "cardinality": {
            "backend_chain": {
                "partitions": 11,
                "redundancy_factor": 5,
                "workers": 15,
            },
            "frontend": {
                "replicas": 2,
                "workers": 6,
            },
        },
        "diagnostics": {
            "logs": {
                "level": "rnmwokumdmebpmfxxxzvvjfdywotav",
            },
            "metrics": {
                "prometheus_port": 7581,
            },
            "self_check": {
                "interval_seconds": 158,
                "mode": azure_native.iotoperations.OperationalMode.ENABLED,
                "timeout_seconds": 14,
            },
            "traces": {
                "cache_size_megabytes": 28,
                "mode": azure_native.iotoperations.OperationalMode.ENABLED,
                "self_tracing": {
                    "interval_seconds": 22,
                    "mode": azure_native.iotoperations.OperationalMode.ENABLED,
                },
                "span_channel_capacity": 1000,
            },
        },
        "disk_backed_message_buffer": {
            "ephemeral_volume_claim_spec": {
                "access_modes": ["nuluhigrbb"],
                "data_source": {
                    "api_group": "npqapyksvvpkohujx",
                    "kind": "wazgyb",
                    "name": "cwhsgxxcxsyppoefm",
                },
                "data_source_ref": {
                    "api_group": "mnfnykznjjsoqpfsgdqioupt",
                    "kind": "odynqzekfzsnawrctaxg",
                    "name": "envszivbbmixbyddzg",
                    "namespace": "etcfzvxqd",
                },
                "resources": {
                    "limits": {
                        "key2719": "hmphcrgctu",
                    },
                    "requests": {
                        "key2909": "txocprnyrsgvhfrg",
                    },
                },
                "selector": {
                    "match_expressions": [{
                        "key": "e",
                        "operator": azure_native.iotoperations.OperatorValues.IN_,
                        "values": ["slmpajlywqvuyknipgztsonqyybt"],
                    }],
                    "match_labels": {
                        "key6673": "wlngfalznwxnurzpgxomcxhbqefpr",
                    },
                },
                "storage_class_name": "sseyhrjptkhrqvpdpjmornkqvon",
                "volume_mode": "rxvpksjuuugqnqzeiprocknbn",
                "volume_name": "c",
            },
            "max_size": "500M",
            "persistent_volume_claim_spec": {
                "access_modes": ["nuluhigrbb"],
                "data_source": {
                    "api_group": "npqapyksvvpkohujx",
                    "kind": "wazgyb",
                    "name": "cwhsgxxcxsyppoefm",
                },
                "data_source_ref": {
                    "api_group": "mnfnykznjjsoqpfsgdqioupt",
                    "kind": "odynqzekfzsnawrctaxg",
                    "name": "envszivbbmixbyddzg",
                    "namespace": "etcfzvxqd",
                },
                "resources": {
                    "limits": {
                        "key2719": "hmphcrgctu",
                    },
                    "requests": {
                        "key2909": "txocprnyrsgvhfrg",
                    },
                },
                "selector": {
                    "match_expressions": [{
                        "key": "e",
                        "operator": azure_native.iotoperations.OperatorValues.IN_,
                        "values": ["slmpajlywqvuyknipgztsonqyybt"],
                    }],
                    "match_labels": {
                        "key6673": "wlngfalznwxnurzpgxomcxhbqefpr",
                    },
                },
                "storage_class_name": "sseyhrjptkhrqvpdpjmornkqvon",
                "volume_mode": "rxvpksjuuugqnqzeiprocknbn",
                "volume_name": "c",
            },
        },
        "generate_resource_limits": {
            "cpu": azure_native.iotoperations.OperationalMode.ENABLED,
        },
        "memory_profile": azure_native.iotoperations.BrokerMemoryProfile.TINY,
    },
    resource_group_name="rgiotoperations")
package main

import (
	iotoperations "github.com/pulumi/pulumi-azure-native-sdk/iotoperations/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := iotoperations.NewBroker(ctx, "broker", &iotoperations.BrokerArgs{
			BrokerName: pulumi.String("resource-name123"),
			ExtendedLocation: &iotoperations.ExtendedLocationArgs{
				Name: pulumi.String("qmbrfwcpwwhggszhrdjv"),
				Type: pulumi.String(iotoperations.ExtendedLocationTypeCustomLocation),
			},
			InstanceName: pulumi.String("resource-name123"),
			Properties: &iotoperations.BrokerPropertiesArgs{
				Advanced: &iotoperations.AdvancedSettingsArgs{
					Clients: &iotoperations.ClientConfigArgs{
						MaxKeepAliveSeconds:     pulumi.Int(3744),
						MaxMessageExpirySeconds: pulumi.Int(3263),
						MaxPacketSizeBytes:      pulumi.Int(3029),
						MaxReceiveMaximum:       pulumi.Int(2365),
						MaxSessionExpirySeconds: pulumi.Int(3859),
						SubscriberQueueLimit: &iotoperations.SubscriberQueueLimitArgs{
							Length:   pulumi.Float64(6),
							Strategy: pulumi.String(iotoperations.SubscriberMessageDropStrategyNone),
						},
					},
					EncryptInternalTraffic: pulumi.String(iotoperations.OperationalModeEnabled),
					InternalCerts: &iotoperations.CertManagerCertOptionsArgs{
						Duration: pulumi.String("bchrc"),
						PrivateKey: &iotoperations.CertManagerPrivateKeyArgs{
							Algorithm:      pulumi.String(iotoperations.PrivateKeyAlgorithmEc256),
							RotationPolicy: pulumi.String(iotoperations.PrivateKeyRotationPolicyAlways),
						},
						RenewBefore: pulumi.String("xkafmpgjfifkwwrhkswtopdnne"),
					},
				},
				Cardinality: &iotoperations.CardinalityArgs{
					BackendChain: &iotoperations.BackendChainArgs{
						Partitions:       pulumi.Int(11),
						RedundancyFactor: pulumi.Int(5),
						Workers:          pulumi.Int(15),
					},
					Frontend: &iotoperations.FrontendArgs{
						Replicas: pulumi.Int(2),
						Workers:  pulumi.Int(6),
					},
				},
				Diagnostics: &iotoperations.BrokerDiagnosticsArgs{
					Logs: &iotoperations.DiagnosticsLogsArgs{
						Level: pulumi.String("rnmwokumdmebpmfxxxzvvjfdywotav"),
					},
					Metrics: &iotoperations.MetricsArgs{
						PrometheusPort: pulumi.Int(7581),
					},
					SelfCheck: &iotoperations.SelfCheckArgs{
						IntervalSeconds: pulumi.Int(158),
						Mode:            pulumi.String(iotoperations.OperationalModeEnabled),
						TimeoutSeconds:  pulumi.Int(14),
					},
					Traces: &iotoperations.TracesArgs{
						CacheSizeMegabytes: pulumi.Int(28),
						Mode:               pulumi.String(iotoperations.OperationalModeEnabled),
						SelfTracing: &iotoperations.SelfTracingArgs{
							IntervalSeconds: pulumi.Int(22),
							Mode:            pulumi.String(iotoperations.OperationalModeEnabled),
						},
						SpanChannelCapacity: pulumi.Int(1000),
					},
				},
				DiskBackedMessageBuffer: &iotoperations.DiskBackedMessageBufferArgs{
					EphemeralVolumeClaimSpec: &iotoperations.VolumeClaimSpecArgs{
						AccessModes: pulumi.StringArray{
							pulumi.String("nuluhigrbb"),
						},
						DataSource: &iotoperations.LocalKubernetesReferenceArgs{
							ApiGroup: pulumi.String("npqapyksvvpkohujx"),
							Kind:     pulumi.String("wazgyb"),
							Name:     pulumi.String("cwhsgxxcxsyppoefm"),
						},
						DataSourceRef: &iotoperations.KubernetesReferenceArgs{
							ApiGroup:  pulumi.String("mnfnykznjjsoqpfsgdqioupt"),
							Kind:      pulumi.String("odynqzekfzsnawrctaxg"),
							Name:      pulumi.String("envszivbbmixbyddzg"),
							Namespace: pulumi.String("etcfzvxqd"),
						},
						Resources: &iotoperations.VolumeClaimResourceRequirementsArgs{
							Limits: pulumi.StringMap{
								"key2719": pulumi.String("hmphcrgctu"),
							},
							Requests: pulumi.StringMap{
								"key2909": pulumi.String("txocprnyrsgvhfrg"),
							},
						},
						Selector: &iotoperations.VolumeClaimSpecSelectorArgs{
							MatchExpressions: iotoperations.VolumeClaimSpecSelectorMatchExpressionsArray{
								&iotoperations.VolumeClaimSpecSelectorMatchExpressionsArgs{
									Key:      pulumi.String("e"),
									Operator: pulumi.String(iotoperations.OperatorValuesIn),
									Values: pulumi.StringArray{
										pulumi.String("slmpajlywqvuyknipgztsonqyybt"),
									},
								},
							},
							MatchLabels: pulumi.StringMap{
								"key6673": pulumi.String("wlngfalznwxnurzpgxomcxhbqefpr"),
							},
						},
						StorageClassName: pulumi.String("sseyhrjptkhrqvpdpjmornkqvon"),
						VolumeMode:       pulumi.String("rxvpksjuuugqnqzeiprocknbn"),
						VolumeName:       pulumi.String("c"),
					},
					MaxSize: pulumi.String("500M"),
					PersistentVolumeClaimSpec: &iotoperations.VolumeClaimSpecArgs{
						AccessModes: pulumi.StringArray{
							pulumi.String("nuluhigrbb"),
						},
						DataSource: &iotoperations.LocalKubernetesReferenceArgs{
							ApiGroup: pulumi.String("npqapyksvvpkohujx"),
							Kind:     pulumi.String("wazgyb"),
							Name:     pulumi.String("cwhsgxxcxsyppoefm"),
						},
						DataSourceRef: &iotoperations.KubernetesReferenceArgs{
							ApiGroup:  pulumi.String("mnfnykznjjsoqpfsgdqioupt"),
							Kind:      pulumi.String("odynqzekfzsnawrctaxg"),
							Name:      pulumi.String("envszivbbmixbyddzg"),
							Namespace: pulumi.String("etcfzvxqd"),
						},
						Resources: &iotoperations.VolumeClaimResourceRequirementsArgs{
							Limits: pulumi.StringMap{
								"key2719": pulumi.String("hmphcrgctu"),
							},
							Requests: pulumi.StringMap{
								"key2909": pulumi.String("txocprnyrsgvhfrg"),
							},
						},
						Selector: &iotoperations.VolumeClaimSpecSelectorArgs{
							MatchExpressions: iotoperations.VolumeClaimSpecSelectorMatchExpressionsArray{
								&iotoperations.VolumeClaimSpecSelectorMatchExpressionsArgs{
									Key:      pulumi.String("e"),
									Operator: pulumi.String(iotoperations.OperatorValuesIn),
									Values: pulumi.StringArray{
										pulumi.String("slmpajlywqvuyknipgztsonqyybt"),
									},
								},
							},
							MatchLabels: pulumi.StringMap{
								"key6673": pulumi.String("wlngfalznwxnurzpgxomcxhbqefpr"),
							},
						},
						StorageClassName: pulumi.String("sseyhrjptkhrqvpdpjmornkqvon"),
						VolumeMode:       pulumi.String("rxvpksjuuugqnqzeiprocknbn"),
						VolumeName:       pulumi.String("c"),
					},
				},
				GenerateResourceLimits: &iotoperations.GenerateResourceLimitsArgs{
					Cpu: pulumi.String(iotoperations.OperationalModeEnabled),
				},
				MemoryProfile: pulumi.String(iotoperations.BrokerMemoryProfileTiny),
			},
			ResourceGroupName: pulumi.String("rgiotoperations"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var broker = new AzureNative.IoTOperations.Broker("broker", new()
    {
        BrokerName = "resource-name123",
        ExtendedLocation = new AzureNative.IoTOperations.Inputs.ExtendedLocationArgs
        {
            Name = "qmbrfwcpwwhggszhrdjv",
            Type = AzureNative.IoTOperations.ExtendedLocationType.CustomLocation,
        },
        InstanceName = "resource-name123",
        Properties = new AzureNative.IoTOperations.Inputs.BrokerPropertiesArgs
        {
            Advanced = new AzureNative.IoTOperations.Inputs.AdvancedSettingsArgs
            {
                Clients = new AzureNative.IoTOperations.Inputs.ClientConfigArgs
                {
                    MaxKeepAliveSeconds = 3744,
                    MaxMessageExpirySeconds = 3263,
                    MaxPacketSizeBytes = 3029,
                    MaxReceiveMaximum = 2365,
                    MaxSessionExpirySeconds = 3859,
                    SubscriberQueueLimit = new AzureNative.IoTOperations.Inputs.SubscriberQueueLimitArgs
                    {
                        Length = 6,
                        Strategy = AzureNative.IoTOperations.SubscriberMessageDropStrategy.None,
                    },
                },
                EncryptInternalTraffic = AzureNative.IoTOperations.OperationalMode.Enabled,
                InternalCerts = new AzureNative.IoTOperations.Inputs.CertManagerCertOptionsArgs
                {
                    Duration = "bchrc",
                    PrivateKey = new AzureNative.IoTOperations.Inputs.CertManagerPrivateKeyArgs
                    {
                        Algorithm = AzureNative.IoTOperations.PrivateKeyAlgorithm.Ec256,
                        RotationPolicy = AzureNative.IoTOperations.PrivateKeyRotationPolicy.Always,
                    },
                    RenewBefore = "xkafmpgjfifkwwrhkswtopdnne",
                },
            },
            Cardinality = new AzureNative.IoTOperations.Inputs.CardinalityArgs
            {
                BackendChain = new AzureNative.IoTOperations.Inputs.BackendChainArgs
                {
                    Partitions = 11,
                    RedundancyFactor = 5,
                    Workers = 15,
                },
                Frontend = new AzureNative.IoTOperations.Inputs.FrontendArgs
                {
                    Replicas = 2,
                    Workers = 6,
                },
            },
            Diagnostics = new AzureNative.IoTOperations.Inputs.BrokerDiagnosticsArgs
            {
                Logs = new AzureNative.IoTOperations.Inputs.DiagnosticsLogsArgs
                {
                    Level = "rnmwokumdmebpmfxxxzvvjfdywotav",
                },
                Metrics = new AzureNative.IoTOperations.Inputs.MetricsArgs
                {
                    PrometheusPort = 7581,
                },
                SelfCheck = new AzureNative.IoTOperations.Inputs.SelfCheckArgs
                {
                    IntervalSeconds = 158,
                    Mode = AzureNative.IoTOperations.OperationalMode.Enabled,
                    TimeoutSeconds = 14,
                },
                Traces = new AzureNative.IoTOperations.Inputs.TracesArgs
                {
                    CacheSizeMegabytes = 28,
                    Mode = AzureNative.IoTOperations.OperationalMode.Enabled,
                    SelfTracing = new AzureNative.IoTOperations.Inputs.SelfTracingArgs
                    {
                        IntervalSeconds = 22,
                        Mode = AzureNative.IoTOperations.OperationalMode.Enabled,
                    },
                    SpanChannelCapacity = 1000,
                },
            },
            DiskBackedMessageBuffer = new AzureNative.IoTOperations.Inputs.DiskBackedMessageBufferArgs
            {
                EphemeralVolumeClaimSpec = new AzureNative.IoTOperations.Inputs.VolumeClaimSpecArgs
                {
                    AccessModes = new[]
                    {
                        "nuluhigrbb",
                    },
                    DataSource = new AzureNative.IoTOperations.Inputs.LocalKubernetesReferenceArgs
                    {
                        ApiGroup = "npqapyksvvpkohujx",
                        Kind = "wazgyb",
                        Name = "cwhsgxxcxsyppoefm",
                    },
                    DataSourceRef = new AzureNative.IoTOperations.Inputs.KubernetesReferenceArgs
                    {
                        ApiGroup = "mnfnykznjjsoqpfsgdqioupt",
                        Kind = "odynqzekfzsnawrctaxg",
                        Name = "envszivbbmixbyddzg",
                        Namespace = "etcfzvxqd",
                    },
                    Resources = new AzureNative.IoTOperations.Inputs.VolumeClaimResourceRequirementsArgs
                    {
                        Limits = 
                        {
                            { "key2719", "hmphcrgctu" },
                        },
                        Requests = 
                        {
                            { "key2909", "txocprnyrsgvhfrg" },
                        },
                    },
                    Selector = new AzureNative.IoTOperations.Inputs.VolumeClaimSpecSelectorArgs
                    {
                        MatchExpressions = new[]
                        {
                            new AzureNative.IoTOperations.Inputs.VolumeClaimSpecSelectorMatchExpressionsArgs
                            {
                                Key = "e",
                                Operator = AzureNative.IoTOperations.OperatorValues.In,
                                Values = new[]
                                {
                                    "slmpajlywqvuyknipgztsonqyybt",
                                },
                            },
                        },
                        MatchLabels = 
                        {
                            { "key6673", "wlngfalznwxnurzpgxomcxhbqefpr" },
                        },
                    },
                    StorageClassName = "sseyhrjptkhrqvpdpjmornkqvon",
                    VolumeMode = "rxvpksjuuugqnqzeiprocknbn",
                    VolumeName = "c",
                },
                MaxSize = "500M",
                PersistentVolumeClaimSpec = new AzureNative.IoTOperations.Inputs.VolumeClaimSpecArgs
                {
                    AccessModes = new[]
                    {
                        "nuluhigrbb",
                    },
                    DataSource = new AzureNative.IoTOperations.Inputs.LocalKubernetesReferenceArgs
                    {
                        ApiGroup = "npqapyksvvpkohujx",
                        Kind = "wazgyb",
                        Name = "cwhsgxxcxsyppoefm",
                    },
                    DataSourceRef = new AzureNative.IoTOperations.Inputs.KubernetesReferenceArgs
                    {
                        ApiGroup = "mnfnykznjjsoqpfsgdqioupt",
                        Kind = "odynqzekfzsnawrctaxg",
                        Name = "envszivbbmixbyddzg",
                        Namespace = "etcfzvxqd",
                    },
                    Resources = new AzureNative.IoTOperations.Inputs.VolumeClaimResourceRequirementsArgs
                    {
                        Limits = 
                        {
                            { "key2719", "hmphcrgctu" },
                        },
                        Requests = 
                        {
                            { "key2909", "txocprnyrsgvhfrg" },
                        },
                    },
                    Selector = new AzureNative.IoTOperations.Inputs.VolumeClaimSpecSelectorArgs
                    {
                        MatchExpressions = new[]
                        {
                            new AzureNative.IoTOperations.Inputs.VolumeClaimSpecSelectorMatchExpressionsArgs
                            {
                                Key = "e",
                                Operator = AzureNative.IoTOperations.OperatorValues.In,
                                Values = new[]
                                {
                                    "slmpajlywqvuyknipgztsonqyybt",
                                },
                            },
                        },
                        MatchLabels = 
                        {
                            { "key6673", "wlngfalznwxnurzpgxomcxhbqefpr" },
                        },
                    },
                    StorageClassName = "sseyhrjptkhrqvpdpjmornkqvon",
                    VolumeMode = "rxvpksjuuugqnqzeiprocknbn",
                    VolumeName = "c",
                },
            },
            GenerateResourceLimits = new AzureNative.IoTOperations.Inputs.GenerateResourceLimitsArgs
            {
                Cpu = AzureNative.IoTOperations.OperationalMode.Enabled,
            },
            MemoryProfile = AzureNative.IoTOperations.BrokerMemoryProfile.Tiny,
        },
        ResourceGroupName = "rgiotoperations",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.iotoperations.Broker;
import com.pulumi.azurenative.iotoperations.BrokerArgs;
import com.pulumi.azurenative.iotoperations.inputs.ExtendedLocationArgs;
import com.pulumi.azurenative.iotoperations.inputs.BrokerPropertiesArgs;
import com.pulumi.azurenative.iotoperations.inputs.AdvancedSettingsArgs;
import com.pulumi.azurenative.iotoperations.inputs.ClientConfigArgs;
import com.pulumi.azurenative.iotoperations.inputs.SubscriberQueueLimitArgs;
import com.pulumi.azurenative.iotoperations.inputs.CertManagerCertOptionsArgs;
import com.pulumi.azurenative.iotoperations.inputs.CertManagerPrivateKeyArgs;
import com.pulumi.azurenative.iotoperations.inputs.CardinalityArgs;
import com.pulumi.azurenative.iotoperations.inputs.BackendChainArgs;
import com.pulumi.azurenative.iotoperations.inputs.FrontendArgs;
import com.pulumi.azurenative.iotoperations.inputs.BrokerDiagnosticsArgs;
import com.pulumi.azurenative.iotoperations.inputs.DiagnosticsLogsArgs;
import com.pulumi.azurenative.iotoperations.inputs.MetricsArgs;
import com.pulumi.azurenative.iotoperations.inputs.SelfCheckArgs;
import com.pulumi.azurenative.iotoperations.inputs.TracesArgs;
import com.pulumi.azurenative.iotoperations.inputs.SelfTracingArgs;
import com.pulumi.azurenative.iotoperations.inputs.DiskBackedMessageBufferArgs;
import com.pulumi.azurenative.iotoperations.inputs.VolumeClaimSpecArgs;
import com.pulumi.azurenative.iotoperations.inputs.LocalKubernetesReferenceArgs;
import com.pulumi.azurenative.iotoperations.inputs.KubernetesReferenceArgs;
import com.pulumi.azurenative.iotoperations.inputs.VolumeClaimResourceRequirementsArgs;
import com.pulumi.azurenative.iotoperations.inputs.VolumeClaimSpecSelectorArgs;
import com.pulumi.azurenative.iotoperations.inputs.GenerateResourceLimitsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var broker = new Broker("broker", BrokerArgs.builder()
            .brokerName("resource-name123")
            .extendedLocation(ExtendedLocationArgs.builder()
                .name("qmbrfwcpwwhggszhrdjv")
                .type("CustomLocation")
                .build())
            .instanceName("resource-name123")
            .properties(BrokerPropertiesArgs.builder()
                .advanced(AdvancedSettingsArgs.builder()
                    .clients(ClientConfigArgs.builder()
                        .maxKeepAliveSeconds(3744)
                        .maxMessageExpirySeconds(3263)
                        .maxPacketSizeBytes(3029)
                        .maxReceiveMaximum(2365)
                        .maxSessionExpirySeconds(3859)
                        .subscriberQueueLimit(SubscriberQueueLimitArgs.builder()
                            .length(6.0)
                            .strategy("None")
                            .build())
                        .build())
                    .encryptInternalTraffic("Enabled")
                    .internalCerts(CertManagerCertOptionsArgs.builder()
                        .duration("bchrc")
                        .privateKey(CertManagerPrivateKeyArgs.builder()
                            .algorithm("Ec256")
                            .rotationPolicy("Always")
                            .build())
                        .renewBefore("xkafmpgjfifkwwrhkswtopdnne")
                        .build())
                    .build())
                .cardinality(CardinalityArgs.builder()
                    .backendChain(BackendChainArgs.builder()
                        .partitions(11)
                        .redundancyFactor(5)
                        .workers(15)
                        .build())
                    .frontend(FrontendArgs.builder()
                        .replicas(2)
                        .workers(6)
                        .build())
                    .build())
                .diagnostics(BrokerDiagnosticsArgs.builder()
                    .logs(DiagnosticsLogsArgs.builder()
                        .level("rnmwokumdmebpmfxxxzvvjfdywotav")
                        .build())
                    .metrics(MetricsArgs.builder()
                        .prometheusPort(7581)
                        .build())
                    .selfCheck(SelfCheckArgs.builder()
                        .intervalSeconds(158)
                        .mode("Enabled")
                        .timeoutSeconds(14)
                        .build())
                    .traces(TracesArgs.builder()
                        .cacheSizeMegabytes(28)
                        .mode("Enabled")
                        .selfTracing(SelfTracingArgs.builder()
                            .intervalSeconds(22)
                            .mode("Enabled")
                            .build())
                        .spanChannelCapacity(1000)
                        .build())
                    .build())
                .diskBackedMessageBuffer(DiskBackedMessageBufferArgs.builder()
                    .ephemeralVolumeClaimSpec(VolumeClaimSpecArgs.builder()
                        .accessModes("nuluhigrbb")
                        .dataSource(LocalKubernetesReferenceArgs.builder()
                            .apiGroup("npqapyksvvpkohujx")
                            .kind("wazgyb")
                            .name("cwhsgxxcxsyppoefm")
                            .build())
                        .dataSourceRef(KubernetesReferenceArgs.builder()
                            .apiGroup("mnfnykznjjsoqpfsgdqioupt")
                            .kind("odynqzekfzsnawrctaxg")
                            .name("envszivbbmixbyddzg")
                            .namespace("etcfzvxqd")
                            .build())
                        .resources(VolumeClaimResourceRequirementsArgs.builder()
                            .limits(Map.of("key2719", "hmphcrgctu"))
                            .requests(Map.of("key2909", "txocprnyrsgvhfrg"))
                            .build())
                        .selector(VolumeClaimSpecSelectorArgs.builder()
                            .matchExpressions(VolumeClaimSpecSelectorMatchExpressionsArgs.builder()
                                .key("e")
                                .operator("In")
                                .values("slmpajlywqvuyknipgztsonqyybt")
                                .build())
                            .matchLabels(Map.of("key6673", "wlngfalznwxnurzpgxomcxhbqefpr"))
                            .build())
                        .storageClassName("sseyhrjptkhrqvpdpjmornkqvon")
                        .volumeMode("rxvpksjuuugqnqzeiprocknbn")
                        .volumeName("c")
                        .build())
                    .maxSize("500M")
                    .persistentVolumeClaimSpec(VolumeClaimSpecArgs.builder()
                        .accessModes("nuluhigrbb")
                        .dataSource(LocalKubernetesReferenceArgs.builder()
                            .apiGroup("npqapyksvvpkohujx")
                            .kind("wazgyb")
                            .name("cwhsgxxcxsyppoefm")
                            .build())
                        .dataSourceRef(KubernetesReferenceArgs.builder()
                            .apiGroup("mnfnykznjjsoqpfsgdqioupt")
                            .kind("odynqzekfzsnawrctaxg")
                            .name("envszivbbmixbyddzg")
                            .namespace("etcfzvxqd")
                            .build())
                        .resources(VolumeClaimResourceRequirementsArgs.builder()
                            .limits(Map.of("key2719", "hmphcrgctu"))
                            .requests(Map.of("key2909", "txocprnyrsgvhfrg"))
                            .build())
                        .selector(VolumeClaimSpecSelectorArgs.builder()
                            .matchExpressions(VolumeClaimSpecSelectorMatchExpressionsArgs.builder()
                                .key("e")
                                .operator("In")
                                .values("slmpajlywqvuyknipgztsonqyybt")
                                .build())
                            .matchLabels(Map.of("key6673", "wlngfalznwxnurzpgxomcxhbqefpr"))
                            .build())
                        .storageClassName("sseyhrjptkhrqvpdpjmornkqvon")
                        .volumeMode("rxvpksjuuugqnqzeiprocknbn")
                        .volumeName("c")
                        .build())
                    .build())
                .generateResourceLimits(GenerateResourceLimitsArgs.builder()
                    .cpu("Enabled")
                    .build())
                .memoryProfile("Tiny")
                .build())
            .resourceGroupName("rgiotoperations")
            .build());

    }
}
resources:
  broker:
    type: azure-native:iotoperations:Broker
    properties:
      brokerName: resource-name123
      extendedLocation:
        name: qmbrfwcpwwhggszhrdjv
        type: CustomLocation
      instanceName: resource-name123
      properties:
        advanced:
          clients:
            maxKeepAliveSeconds: 3744
            maxMessageExpirySeconds: 3263
            maxPacketSizeBytes: 3029
            maxReceiveMaximum: 2365
            maxSessionExpirySeconds: 3859
            subscriberQueueLimit:
              length: 6
              strategy: None
          encryptInternalTraffic: Enabled
          internalCerts:
            duration: bchrc
            privateKey:
              algorithm: Ec256
              rotationPolicy: Always
            renewBefore: xkafmpgjfifkwwrhkswtopdnne
        cardinality:
          backendChain:
            partitions: 11
            redundancyFactor: 5
            workers: 15
          frontend:
            replicas: 2
            workers: 6
        diagnostics:
          logs:
            level: rnmwokumdmebpmfxxxzvvjfdywotav
          metrics:
            prometheusPort: 7581
          selfCheck:
            intervalSeconds: 158
            mode: Enabled
            timeoutSeconds: 14
          traces:
            cacheSizeMegabytes: 28
            mode: Enabled
            selfTracing:
              intervalSeconds: 22
              mode: Enabled
            spanChannelCapacity: 1000
        diskBackedMessageBuffer:
          ephemeralVolumeClaimSpec:
            accessModes:
              - nuluhigrbb
            dataSource:
              apiGroup: npqapyksvvpkohujx
              kind: wazgyb
              name: cwhsgxxcxsyppoefm
            dataSourceRef:
              apiGroup: mnfnykznjjsoqpfsgdqioupt
              kind: odynqzekfzsnawrctaxg
              name: envszivbbmixbyddzg
              namespace: etcfzvxqd
            resources:
              limits:
                key2719: hmphcrgctu
              requests:
                key2909: txocprnyrsgvhfrg
            selector:
              matchExpressions:
                - key: e
                  operator: In
                  values:
                    - slmpajlywqvuyknipgztsonqyybt
              matchLabels:
                key6673: wlngfalznwxnurzpgxomcxhbqefpr
            storageClassName: sseyhrjptkhrqvpdpjmornkqvon
            volumeMode: rxvpksjuuugqnqzeiprocknbn
            volumeName: c
          maxSize: 500M
          persistentVolumeClaimSpec:
            accessModes:
              - nuluhigrbb
            dataSource:
              apiGroup: npqapyksvvpkohujx
              kind: wazgyb
              name: cwhsgxxcxsyppoefm
            dataSourceRef:
              apiGroup: mnfnykznjjsoqpfsgdqioupt
              kind: odynqzekfzsnawrctaxg
              name: envszivbbmixbyddzg
              namespace: etcfzvxqd
            resources:
              limits:
                key2719: hmphcrgctu
              requests:
                key2909: txocprnyrsgvhfrg
            selector:
              matchExpressions:
                - key: e
                  operator: In
                  values:
                    - slmpajlywqvuyknipgztsonqyybt
              matchLabels:
                key6673: wlngfalznwxnurzpgxomcxhbqefpr
            storageClassName: sseyhrjptkhrqvpdpjmornkqvon
            volumeMode: rxvpksjuuugqnqzeiprocknbn
            volumeName: c
        generateResourceLimits:
          cpu: Enabled
        memoryProfile: Tiny
      resourceGroupName: rgiotoperations

The advanced block configures client limits (maxKeepAliveSeconds, maxPacketSizeBytes, maxSessionExpirySeconds) and internal encryption (encryptInternalTraffic). The diagnostics block enables logs, Prometheus metrics (prometheusPort), self-checks (intervalSeconds, timeoutSeconds), and distributed tracing (traces with cacheSizeMegabytes and spanChannelCapacity). These settings tune broker behavior for production workloads and provide visibility into runtime operations.

Beyond these examples

These snippets focus on specific broker-level features: memory profiles and resource limits, frontend/backend scaling (cardinality), disk-backed message buffering, and client limits, encryption, and diagnostics. They’re intentionally minimal rather than full IoT messaging deployments.

The examples may reference pre-existing infrastructure such as Azure IoT Operations instances, Azure Arc custom locations, and Kubernetes storage classes (for disk buffering). They focus on configuring the broker rather than provisioning the surrounding IoT Operations environment.

To keep things focused, common broker patterns are omitted, including:

  • Certificate manager configuration details (internalCerts)
  • Volume claim specifications (ephemeralVolumeClaimSpec, persistentVolumeClaimSpec)
  • Self-check and self-tracing intervals
  • Subscriber queue strategies and client session limits

These omissions are intentional: the goal is to illustrate how each broker feature is wired, not provide drop-in IoT messaging modules. See the Broker resource reference for all available configuration options.

Let's configure Azure IoT Operations Brokers

Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.

Try Pulumi Cloud for FREE

Frequently Asked Questions

Configuration & Scaling
What memory profiles are available for the broker?
The broker supports three memory profiles: Tiny, Low, and Medium. Choose based on your workload requirements.
How do I scale my broker's capacity?
Configure the cardinality property with backendChain (partitions, redundancyFactor, workers) for backend scaling and frontend (replicas, workers) for frontend scaling.
How do I enable automatic resource limit generation?
Set generateResourceLimits.cpu to Enabled to automatically generate CPU resource limits for the broker.
Storage & Buffering
How do I configure message buffering?
Use the diskBackedMessageBuffer property with maxSize (e.g., “500M” or “50M”) to configure disk-backed message buffering. You can also specify ephemeralVolumeClaimSpec or persistentVolumeClaimSpec for storage options.
Security & Encryption
How do I encrypt internal broker traffic?
Set advanced.encryptInternalTraffic to Enabled. Optionally configure advanced.internalCerts with certificate duration, private key algorithm (e.g., Ec256), and rotation policy (e.g., Always).
Diagnostics & Monitoring
What diagnostics options are available?

Configure diagnostics with:

  • logs (level)
  • metrics (prometheusPort)
  • selfCheck (intervalSeconds, mode, timeoutSeconds)
  • traces (cacheSizeMegabytes, mode, selfTracing, spanChannelCapacity)
Resource Management
What properties can't I change after creating the broker?
The following properties are immutable: extendedLocation, brokerName, instanceName, and resourceGroupName. You cannot modify these after creation.
What's the minimal configuration needed to create a broker?
You need brokerName, instanceName, resourceGroupName, extendedLocation (with name and type set to CustomLocation), and properties.memoryProfile.

Using a different cloud?

Explore messaging guides for other cloud providers: