Configure Azure Dapr Component Resiliency Policies

The azure-native:app:DaprComponentResiliencyPolicy resource, part of the Pulumi Azure Native provider, defines resiliency policies for Dapr components: retry logic, circuit breakers, and timeout controls for inbound and outbound traffic. This guide focuses on three capabilities: inbound and outbound policy separation, circuit breaker configuration, and HTTP retry with exponential backoff.

Resiliency policies attach to existing Dapr components within Container Apps managed environments. The examples are intentionally small. Combine them with your own Dapr component definitions and environment configuration.

Configure inbound and outbound resiliency policies

Dapr components that handle both incoming requests and outgoing calls often need different resiliency characteristics for each direction. Inbound policies protect your service from cascading failures, while outbound policies prevent overwhelming downstream dependencies.

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

const daprComponentResiliencyPolicy = new azure_native.app.DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy", {
    componentName: "mydaprcomponent",
    environmentName: "myenvironment",
    inboundPolicy: {
        circuitBreakerPolicy: {
            consecutiveErrors: 5,
            intervalInSeconds: 4,
            timeoutInSeconds: 10,
        },
        httpRetryPolicy: {
            maxRetries: 15,
            retryBackOff: {
                initialDelayInMilliseconds: 2000,
                maxIntervalInMilliseconds: 5500,
            },
        },
        timeoutPolicy: {
            responseTimeoutInSeconds: 30,
        },
    },
    name: "myresiliencypolicy",
    outboundPolicy: {
        circuitBreakerPolicy: {
            consecutiveErrors: 3,
            intervalInSeconds: 60,
            timeoutInSeconds: 20,
        },
        httpRetryPolicy: {
            maxRetries: 5,
            retryBackOff: {
                initialDelayInMilliseconds: 100,
                maxIntervalInMilliseconds: 30000,
            },
        },
        timeoutPolicy: {
            responseTimeoutInSeconds: 12,
        },
    },
    resourceGroupName: "examplerg",
});
import pulumi
import pulumi_azure_native as azure_native

dapr_component_resiliency_policy = azure_native.app.DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy",
    component_name="mydaprcomponent",
    environment_name="myenvironment",
    inbound_policy={
        "circuit_breaker_policy": {
            "consecutive_errors": 5,
            "interval_in_seconds": 4,
            "timeout_in_seconds": 10,
        },
        "http_retry_policy": {
            "max_retries": 15,
            "retry_back_off": {
                "initial_delay_in_milliseconds": 2000,
                "max_interval_in_milliseconds": 5500,
            },
        },
        "timeout_policy": {
            "response_timeout_in_seconds": 30,
        },
    },
    name="myresiliencypolicy",
    outbound_policy={
        "circuit_breaker_policy": {
            "consecutive_errors": 3,
            "interval_in_seconds": 60,
            "timeout_in_seconds": 20,
        },
        "http_retry_policy": {
            "max_retries": 5,
            "retry_back_off": {
                "initial_delay_in_milliseconds": 100,
                "max_interval_in_milliseconds": 30000,
            },
        },
        "timeout_policy": {
            "response_timeout_in_seconds": 12,
        },
    },
    resource_group_name="examplerg")
package main

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

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := app.NewDaprComponentResiliencyPolicy(ctx, "daprComponentResiliencyPolicy", &app.DaprComponentResiliencyPolicyArgs{
			ComponentName:   pulumi.String("mydaprcomponent"),
			EnvironmentName: pulumi.String("myenvironment"),
			InboundPolicy: &app.DaprComponentResiliencyPolicyConfigurationArgs{
				CircuitBreakerPolicy: &app.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs{
					ConsecutiveErrors: pulumi.Int(5),
					IntervalInSeconds: pulumi.Int(4),
					TimeoutInSeconds:  pulumi.Int(10),
				},
				HttpRetryPolicy: &app.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs{
					MaxRetries: pulumi.Int(15),
					RetryBackOff: &app.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs{
						InitialDelayInMilliseconds: pulumi.Int(2000),
						MaxIntervalInMilliseconds:  pulumi.Int(5500),
					},
				},
				TimeoutPolicy: &app.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs{
					ResponseTimeoutInSeconds: pulumi.Int(30),
				},
			},
			Name: pulumi.String("myresiliencypolicy"),
			OutboundPolicy: &app.DaprComponentResiliencyPolicyConfigurationArgs{
				CircuitBreakerPolicy: &app.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs{
					ConsecutiveErrors: pulumi.Int(3),
					IntervalInSeconds: pulumi.Int(60),
					TimeoutInSeconds:  pulumi.Int(20),
				},
				HttpRetryPolicy: &app.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs{
					MaxRetries: pulumi.Int(5),
					RetryBackOff: &app.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs{
						InitialDelayInMilliseconds: pulumi.Int(100),
						MaxIntervalInMilliseconds:  pulumi.Int(30000),
					},
				},
				TimeoutPolicy: &app.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs{
					ResponseTimeoutInSeconds: pulumi.Int(12),
				},
			},
			ResourceGroupName: pulumi.String("examplerg"),
		})
		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 daprComponentResiliencyPolicy = new AzureNative.App.DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy", new()
    {
        ComponentName = "mydaprcomponent",
        EnvironmentName = "myenvironment",
        InboundPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyConfigurationArgs
        {
            CircuitBreakerPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs
            {
                ConsecutiveErrors = 5,
                IntervalInSeconds = 4,
                TimeoutInSeconds = 10,
            },
            HttpRetryPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs
            {
                MaxRetries = 15,
                RetryBackOff = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs
                {
                    InitialDelayInMilliseconds = 2000,
                    MaxIntervalInMilliseconds = 5500,
                },
            },
            TimeoutPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs
            {
                ResponseTimeoutInSeconds = 30,
            },
        },
        Name = "myresiliencypolicy",
        OutboundPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyConfigurationArgs
        {
            CircuitBreakerPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs
            {
                ConsecutiveErrors = 3,
                IntervalInSeconds = 60,
                TimeoutInSeconds = 20,
            },
            HttpRetryPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs
            {
                MaxRetries = 5,
                RetryBackOff = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs
                {
                    InitialDelayInMilliseconds = 100,
                    MaxIntervalInMilliseconds = 30000,
                },
            },
            TimeoutPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs
            {
                ResponseTimeoutInSeconds = 12,
            },
        },
        ResourceGroupName = "examplerg",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.app.DaprComponentResiliencyPolicy;
import com.pulumi.azurenative.app.DaprComponentResiliencyPolicyArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs;
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 daprComponentResiliencyPolicy = new DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy", DaprComponentResiliencyPolicyArgs.builder()
            .componentName("mydaprcomponent")
            .environmentName("myenvironment")
            .inboundPolicy(DaprComponentResiliencyPolicyConfigurationArgs.builder()
                .circuitBreakerPolicy(DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs.builder()
                    .consecutiveErrors(5)
                    .intervalInSeconds(4)
                    .timeoutInSeconds(10)
                    .build())
                .httpRetryPolicy(DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs.builder()
                    .maxRetries(15)
                    .retryBackOff(DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs.builder()
                        .initialDelayInMilliseconds(2000)
                        .maxIntervalInMilliseconds(5500)
                        .build())
                    .build())
                .timeoutPolicy(DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs.builder()
                    .responseTimeoutInSeconds(30)
                    .build())
                .build())
            .name("myresiliencypolicy")
            .outboundPolicy(DaprComponentResiliencyPolicyConfigurationArgs.builder()
                .circuitBreakerPolicy(DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs.builder()
                    .consecutiveErrors(3)
                    .intervalInSeconds(60)
                    .timeoutInSeconds(20)
                    .build())
                .httpRetryPolicy(DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs.builder()
                    .maxRetries(5)
                    .retryBackOff(DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs.builder()
                        .initialDelayInMilliseconds(100)
                        .maxIntervalInMilliseconds(30000)
                        .build())
                    .build())
                .timeoutPolicy(DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs.builder()
                    .responseTimeoutInSeconds(12)
                    .build())
                .build())
            .resourceGroupName("examplerg")
            .build());

    }
}
resources:
  daprComponentResiliencyPolicy:
    type: azure-native:app:DaprComponentResiliencyPolicy
    properties:
      componentName: mydaprcomponent
      environmentName: myenvironment
      inboundPolicy:
        circuitBreakerPolicy:
          consecutiveErrors: 5
          intervalInSeconds: 4
          timeoutInSeconds: 10
        httpRetryPolicy:
          maxRetries: 15
          retryBackOff:
            initialDelayInMilliseconds: 2000
            maxIntervalInMilliseconds: 5500
        timeoutPolicy:
          responseTimeoutInSeconds: 30
      name: myresiliencypolicy
      outboundPolicy:
        circuitBreakerPolicy:
          consecutiveErrors: 3
          intervalInSeconds: 60
          timeoutInSeconds: 20
        httpRetryPolicy:
          maxRetries: 5
          retryBackOff:
            initialDelayInMilliseconds: 100
            maxIntervalInMilliseconds: 30000
        timeoutPolicy:
          responseTimeoutInSeconds: 12
      resourceGroupName: examplerg

The inboundPolicy and outboundPolicy properties define separate resiliency rules for each traffic direction. Each policy can combine circuitBreakerPolicy (opens after consecutiveErrors failures), httpRetryPolicy (retries with exponential backoff via retryBackOff), and timeoutPolicy (enforces response deadlines). The circuit breaker’s intervalInSeconds controls how long it stays open before attempting recovery.

Apply resiliency to outbound calls only

Some components only make outbound calls to external services or state stores, without receiving inbound requests that need protection.

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

const daprComponentResiliencyPolicy = new azure_native.app.DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy", {
    componentName: "mydaprcomponent",
    environmentName: "myenvironment",
    name: "myresiliencypolicy",
    outboundPolicy: {
        circuitBreakerPolicy: {
            consecutiveErrors: 3,
            intervalInSeconds: 60,
            timeoutInSeconds: 20,
        },
        httpRetryPolicy: {
            maxRetries: 5,
            retryBackOff: {
                initialDelayInMilliseconds: 100,
                maxIntervalInMilliseconds: 30000,
            },
        },
        timeoutPolicy: {
            responseTimeoutInSeconds: 12,
        },
    },
    resourceGroupName: "examplerg",
});
import pulumi
import pulumi_azure_native as azure_native

dapr_component_resiliency_policy = azure_native.app.DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy",
    component_name="mydaprcomponent",
    environment_name="myenvironment",
    name="myresiliencypolicy",
    outbound_policy={
        "circuit_breaker_policy": {
            "consecutive_errors": 3,
            "interval_in_seconds": 60,
            "timeout_in_seconds": 20,
        },
        "http_retry_policy": {
            "max_retries": 5,
            "retry_back_off": {
                "initial_delay_in_milliseconds": 100,
                "max_interval_in_milliseconds": 30000,
            },
        },
        "timeout_policy": {
            "response_timeout_in_seconds": 12,
        },
    },
    resource_group_name="examplerg")
package main

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

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := app.NewDaprComponentResiliencyPolicy(ctx, "daprComponentResiliencyPolicy", &app.DaprComponentResiliencyPolicyArgs{
			ComponentName:   pulumi.String("mydaprcomponent"),
			EnvironmentName: pulumi.String("myenvironment"),
			Name:            pulumi.String("myresiliencypolicy"),
			OutboundPolicy: &app.DaprComponentResiliencyPolicyConfigurationArgs{
				CircuitBreakerPolicy: &app.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs{
					ConsecutiveErrors: pulumi.Int(3),
					IntervalInSeconds: pulumi.Int(60),
					TimeoutInSeconds:  pulumi.Int(20),
				},
				HttpRetryPolicy: &app.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs{
					MaxRetries: pulumi.Int(5),
					RetryBackOff: &app.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs{
						InitialDelayInMilliseconds: pulumi.Int(100),
						MaxIntervalInMilliseconds:  pulumi.Int(30000),
					},
				},
				TimeoutPolicy: &app.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs{
					ResponseTimeoutInSeconds: pulumi.Int(12),
				},
			},
			ResourceGroupName: pulumi.String("examplerg"),
		})
		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 daprComponentResiliencyPolicy = new AzureNative.App.DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy", new()
    {
        ComponentName = "mydaprcomponent",
        EnvironmentName = "myenvironment",
        Name = "myresiliencypolicy",
        OutboundPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyConfigurationArgs
        {
            CircuitBreakerPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs
            {
                ConsecutiveErrors = 3,
                IntervalInSeconds = 60,
                TimeoutInSeconds = 20,
            },
            HttpRetryPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs
            {
                MaxRetries = 5,
                RetryBackOff = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs
                {
                    InitialDelayInMilliseconds = 100,
                    MaxIntervalInMilliseconds = 30000,
                },
            },
            TimeoutPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs
            {
                ResponseTimeoutInSeconds = 12,
            },
        },
        ResourceGroupName = "examplerg",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.app.DaprComponentResiliencyPolicy;
import com.pulumi.azurenative.app.DaprComponentResiliencyPolicyArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs;
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 daprComponentResiliencyPolicy = new DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy", DaprComponentResiliencyPolicyArgs.builder()
            .componentName("mydaprcomponent")
            .environmentName("myenvironment")
            .name("myresiliencypolicy")
            .outboundPolicy(DaprComponentResiliencyPolicyConfigurationArgs.builder()
                .circuitBreakerPolicy(DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs.builder()
                    .consecutiveErrors(3)
                    .intervalInSeconds(60)
                    .timeoutInSeconds(20)
                    .build())
                .httpRetryPolicy(DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs.builder()
                    .maxRetries(5)
                    .retryBackOff(DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs.builder()
                        .initialDelayInMilliseconds(100)
                        .maxIntervalInMilliseconds(30000)
                        .build())
                    .build())
                .timeoutPolicy(DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs.builder()
                    .responseTimeoutInSeconds(12)
                    .build())
                .build())
            .resourceGroupName("examplerg")
            .build());

    }
}
resources:
  daprComponentResiliencyPolicy:
    type: azure-native:app:DaprComponentResiliencyPolicy
    properties:
      componentName: mydaprcomponent
      environmentName: myenvironment
      name: myresiliencypolicy
      outboundPolicy:
        circuitBreakerPolicy:
          consecutiveErrors: 3
          intervalInSeconds: 60
          timeoutInSeconds: 20
        httpRetryPolicy:
          maxRetries: 5
          retryBackOff:
            initialDelayInMilliseconds: 100
            maxIntervalInMilliseconds: 30000
        timeoutPolicy:
          responseTimeoutInSeconds: 12
      resourceGroupName: examplerg

This configuration omits inboundPolicy entirely, applying resiliency only to outbound traffic. The outboundPolicy uses the same structure as the full example but focuses protection on downstream dependencies. This is common for Dapr state stores or output bindings that don’t receive direct requests.

Mix policy types across traffic directions

Different failure modes require different protection strategies. You might need circuit breaking for inbound traffic but only timeouts for outbound calls.

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

const daprComponentResiliencyPolicy = new azure_native.app.DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy", {
    componentName: "mydaprcomponent",
    environmentName: "myenvironment",
    inboundPolicy: {
        circuitBreakerPolicy: {
            consecutiveErrors: 3,
            timeoutInSeconds: 20,
        },
        httpRetryPolicy: {
            maxRetries: 5,
            retryBackOff: {
                initialDelayInMilliseconds: 2000,
                maxIntervalInMilliseconds: 5500,
            },
        },
    },
    name: "myresiliencypolicy",
    outboundPolicy: {
        timeoutPolicy: {
            responseTimeoutInSeconds: 12,
        },
    },
    resourceGroupName: "examplerg",
});
import pulumi
import pulumi_azure_native as azure_native

dapr_component_resiliency_policy = azure_native.app.DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy",
    component_name="mydaprcomponent",
    environment_name="myenvironment",
    inbound_policy={
        "circuit_breaker_policy": {
            "consecutive_errors": 3,
            "timeout_in_seconds": 20,
        },
        "http_retry_policy": {
            "max_retries": 5,
            "retry_back_off": {
                "initial_delay_in_milliseconds": 2000,
                "max_interval_in_milliseconds": 5500,
            },
        },
    },
    name="myresiliencypolicy",
    outbound_policy={
        "timeout_policy": {
            "response_timeout_in_seconds": 12,
        },
    },
    resource_group_name="examplerg")
package main

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

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := app.NewDaprComponentResiliencyPolicy(ctx, "daprComponentResiliencyPolicy", &app.DaprComponentResiliencyPolicyArgs{
			ComponentName:   pulumi.String("mydaprcomponent"),
			EnvironmentName: pulumi.String("myenvironment"),
			InboundPolicy: &app.DaprComponentResiliencyPolicyConfigurationArgs{
				CircuitBreakerPolicy: &app.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs{
					ConsecutiveErrors: pulumi.Int(3),
					TimeoutInSeconds:  pulumi.Int(20),
				},
				HttpRetryPolicy: &app.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs{
					MaxRetries: pulumi.Int(5),
					RetryBackOff: &app.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs{
						InitialDelayInMilliseconds: pulumi.Int(2000),
						MaxIntervalInMilliseconds:  pulumi.Int(5500),
					},
				},
			},
			Name: pulumi.String("myresiliencypolicy"),
			OutboundPolicy: &app.DaprComponentResiliencyPolicyConfigurationArgs{
				TimeoutPolicy: &app.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs{
					ResponseTimeoutInSeconds: pulumi.Int(12),
				},
			},
			ResourceGroupName: pulumi.String("examplerg"),
		})
		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 daprComponentResiliencyPolicy = new AzureNative.App.DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy", new()
    {
        ComponentName = "mydaprcomponent",
        EnvironmentName = "myenvironment",
        InboundPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyConfigurationArgs
        {
            CircuitBreakerPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs
            {
                ConsecutiveErrors = 3,
                TimeoutInSeconds = 20,
            },
            HttpRetryPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs
            {
                MaxRetries = 5,
                RetryBackOff = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs
                {
                    InitialDelayInMilliseconds = 2000,
                    MaxIntervalInMilliseconds = 5500,
                },
            },
        },
        Name = "myresiliencypolicy",
        OutboundPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyConfigurationArgs
        {
            TimeoutPolicy = new AzureNative.App.Inputs.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs
            {
                ResponseTimeoutInSeconds = 12,
            },
        },
        ResourceGroupName = "examplerg",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.app.DaprComponentResiliencyPolicy;
import com.pulumi.azurenative.app.DaprComponentResiliencyPolicyArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs;
import com.pulumi.azurenative.app.inputs.DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs;
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 daprComponentResiliencyPolicy = new DaprComponentResiliencyPolicy("daprComponentResiliencyPolicy", DaprComponentResiliencyPolicyArgs.builder()
            .componentName("mydaprcomponent")
            .environmentName("myenvironment")
            .inboundPolicy(DaprComponentResiliencyPolicyConfigurationArgs.builder()
                .circuitBreakerPolicy(DaprComponentResiliencyPolicyCircuitBreakerPolicyConfigurationArgs.builder()
                    .consecutiveErrors(3)
                    .timeoutInSeconds(20)
                    .build())
                .httpRetryPolicy(DaprComponentResiliencyPolicyHttpRetryPolicyConfigurationArgs.builder()
                    .maxRetries(5)
                    .retryBackOff(DaprComponentResiliencyPolicyHttpRetryBackOffConfigurationArgs.builder()
                        .initialDelayInMilliseconds(2000)
                        .maxIntervalInMilliseconds(5500)
                        .build())
                    .build())
                .build())
            .name("myresiliencypolicy")
            .outboundPolicy(DaprComponentResiliencyPolicyConfigurationArgs.builder()
                .timeoutPolicy(DaprComponentResiliencyPolicyTimeoutPolicyConfigurationArgs.builder()
                    .responseTimeoutInSeconds(12)
                    .build())
                .build())
            .resourceGroupName("examplerg")
            .build());

    }
}
resources:
  daprComponentResiliencyPolicy:
    type: azure-native:app:DaprComponentResiliencyPolicy
    properties:
      componentName: mydaprcomponent
      environmentName: myenvironment
      inboundPolicy:
        circuitBreakerPolicy:
          consecutiveErrors: 3
          timeoutInSeconds: 20
        httpRetryPolicy:
          maxRetries: 5
          retryBackOff:
            initialDelayInMilliseconds: 2000
            maxIntervalInMilliseconds: 5500
      name: myresiliencypolicy
      outboundPolicy:
        timeoutPolicy:
          responseTimeoutInSeconds: 12
      resourceGroupName: examplerg

Here, inboundPolicy combines circuit breaking and retries, while outboundPolicy uses only timeout controls. This demonstrates that each direction can use a different subset of available policies. The retryBackOff configuration uses initialDelayInMilliseconds and maxIntervalInMilliseconds to control exponential backoff behavior.

Beyond these examples

These snippets focus on specific resiliency policy features: inbound and outbound policy separation, circuit breaker and retry and timeout configuration, and exponential backoff tuning. They’re intentionally minimal rather than full Dapr component deployments.

The examples reference pre-existing infrastructure such as Dapr components in Container Apps environments, and Azure resource groups and managed environments. They focus on configuring resiliency policies rather than provisioning the underlying Dapr components.

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

  • Policy attachment to specific Dapr component types (state stores, pub/sub, bindings)
  • Monitoring and observability integration
  • Policy versioning and rollback strategies
  • Performance impact of retry and timeout values

These omissions are intentional: the goal is to illustrate how each resiliency feature is wired, not provide drop-in Dapr modules. See the Dapr Component Resiliency Policy resource reference for all available configuration options.

Let's configure Azure Dapr Component Resiliency Policies

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

Try Pulumi Cloud for FREE

Frequently Asked Questions

Policy Configuration Basics
What's the difference between inbound and outbound policies?
Inbound policies apply to requests coming into your Dapr component, while outbound policies apply to requests going out from your component. You can configure different resiliency settings for each direction.
Do I need to configure both inbound and outbound policies?
No, both inboundPolicy and outboundPolicy are optional. You can configure only the direction you need.
What resiliency policies can I configure?
You can configure three types of policies within inbound or outbound: circuitBreakerPolicy for failure detection, httpRetryPolicy for automatic retries with backoff, and timeoutPolicy for response timeouts.
Do I need to configure all three policy types?
No, each policy type is optional. You can configure only the policies you need for your resiliency requirements.
Circuit Breaker & Retry Configuration
How do I configure circuit breaker settings?
Configure circuitBreakerPolicy with three parameters: consecutiveErrors (failures before opening circuit), intervalInSeconds (evaluation window), and timeoutInSeconds (how long circuit stays open).
What are typical circuit breaker values?
Example configurations show inbound with 5 consecutive errors, 4-second interval, and 10-second timeout; outbound with 3 consecutive errors, 60-second interval, and 20-second timeout.
How do I configure retry with exponential backoff?
Configure httpRetryPolicy with maxRetries and a retryBackOff object containing initialDelayInMilliseconds and maxIntervalInMilliseconds.
What are typical retry backoff values?
Example configurations show inbound with 15 max retries, 2000ms initial delay, and 5500ms max interval; outbound with 5 max retries, 100ms initial delay, and 30000ms max interval.
Resource Management
Which properties can't be changed after creation?
The properties name, componentName, environmentName, and resourceGroupName are immutable and require resource replacement if changed.

Using a different cloud?

Explore containers guides for other cloud providers: