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 FREEFrequently Asked Questions
Policy Configuration Basics
inboundPolicy and outboundPolicy are optional. You can configure only the direction you need.circuitBreakerPolicy for failure detection, httpRetryPolicy for automatic retries with backoff, and timeoutPolicy for response timeouts.Circuit Breaker & Retry Configuration
circuitBreakerPolicy with three parameters: consecutiveErrors (failures before opening circuit), intervalInSeconds (evaluation window), and timeoutInSeconds (how long circuit stays open).httpRetryPolicy with maxRetries and a retryBackOff object containing initialDelayInMilliseconds and maxIntervalInMilliseconds.Resource Management
name, componentName, environmentName, and resourceGroupName are immutable and require resource replacement if changed.