The azure-native:app:DaprComponentResiliencyPolicy resource, part of the Pulumi Azure Native provider, defines resiliency policies for Dapr components: circuit breakers, retry logic, and timeout controls for both inbound and outbound traffic. This guide focuses on three capabilities: bidirectional policy configuration, circuit breaker and retry settings, and selective policy application.
Resiliency policies attach to existing Dapr components within a Container Apps managed environment. The examples are intentionally small. Combine them with your own Dapr components, monitoring, and environment configuration.
Configure bidirectional resiliency with all policy types
Applications using Dapr components often need comprehensive fault tolerance for both incoming requests and outgoing calls to external services.
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 include a circuitBreakerPolicy (opens after consecutiveErrors within intervalInSeconds, stays open for timeoutInSeconds), an httpRetryPolicy (attempts maxRetries with exponential backoff between initialDelayInMilliseconds and maxIntervalInMilliseconds), and a timeoutPolicy (fails requests exceeding responseTimeoutInSeconds). Circuit breakers prevent cascading failures by stopping requests to unhealthy dependencies. Retries handle transient errors automatically. Timeouts ensure requests don’t hang indefinitely.
Apply resiliency to outbound calls only
Some components only need protection for outgoing calls to external dependencies, leaving inbound traffic unprotected or handled by other layers.
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 bidirectional policies but affects only calls your component makes to external services. This approach works when inbound requests are already protected by API Gateway policies or when you want different teams to manage inbound and outbound resiliency separately.
Mix policy types across traffic directions
Different traffic directions often need different resiliency strategies based on their failure characteristics.
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 breakers and retries (omitting intervalInSeconds to use defaults), while outboundPolicy applies only timeouts. This selective approach lets you tune each direction independently. For example, you might retry inbound requests aggressively to handle client network issues but use strict timeouts on outbound calls to prevent slow dependencies from blocking your component.
Beyond these examples
These snippets focus on specific resiliency policy features: bidirectional resiliency (inbound and outbound policies), circuit breakers, HTTP retries, and timeout controls, and exponential backoff configuration. They’re intentionally minimal rather than full Dapr component deployments.
The examples reference pre-existing infrastructure such as Azure Container Apps managed environments, Dapr components (state stores, pub/sub, bindings), and resource groups. They focus on configuring resiliency policies rather than provisioning the underlying Dapr infrastructure.
To keep things focused, common resiliency patterns are omitted, including:
- Policy attachment to specific Dapr component types
- Monitoring and observability integration
- Policy versioning and rollback strategies
- Performance tuning for high-throughput scenarios
These omissions are intentional: the goal is to illustrate how each resiliency feature is wired, not provide drop-in production 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
inboundPolicy and outboundPolicy are optional. You can configure only inbound, only outbound, or both depending on your traffic patterns.Resiliency Mechanisms
circuitBreakerPolicy with consecutiveErrors (failure threshold), intervalInSeconds (evaluation window), and timeoutInSeconds (how long the circuit stays open).httpRetryPolicy with maxRetries and a retryBackOff object containing initialDelayInMilliseconds and maxIntervalInMilliseconds for exponential backoff.timeoutPolicy with responseTimeoutInSeconds to specify the maximum time to wait for a response.Resource Management
name, componentName, environmentName, and resourceGroupName properties are immutable and require resource replacement to change.