The azure-native:app:HttpRouteConfig resource, part of the Pulumi Azure Native provider, defines advanced ingress routing rules for Container App Environments: path matching, URL rewriting, and traffic distribution to container app revisions or labels. This guide focuses on three capabilities: path-based routing with prefix rewriting, custom domain configuration with TLS, and targeting specific revisions or traffic labels.
Route configs belong to a Container App Environment and reference existing container apps, revisions, traffic labels, and TLS certificates. The examples are intentionally small. Combine them with your own container apps and environment infrastructure.
Route traffic with path matching and prefix rewriting
Microservices architectures often route incoming requests to specific container app revisions based on URL paths, rewriting those paths before they reach the backend.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const httpRouteConfig = new azure_native.app.HttpRouteConfig("httpRouteConfig", {
environmentName: "testcontainerenv",
httpRouteName: "httproutefriendlyname",
properties: {
customDomains: [{
bindingType: azure_native.app.BindingType.SniEnabled,
certificateId: "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1",
name: "example.com",
}],
rules: [{
description: "random-description",
routes: [{
action: {
prefixRewrite: "/v1/api",
},
match: {
caseSensitive: true,
path: "/v1",
},
}],
targets: [{
containerApp: "capp-1",
revision: "rev-1",
weight: 100,
}],
}],
},
resourceGroupName: "examplerg",
});
import pulumi
import pulumi_azure_native as azure_native
http_route_config = azure_native.app.HttpRouteConfig("httpRouteConfig",
environment_name="testcontainerenv",
http_route_name="httproutefriendlyname",
properties={
"custom_domains": [{
"binding_type": azure_native.app.BindingType.SNI_ENABLED,
"certificate_id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1",
"name": "example.com",
}],
"rules": [{
"description": "random-description",
"routes": [{
"action": {
"prefix_rewrite": "/v1/api",
},
"match": {
"case_sensitive": True,
"path": "/v1",
},
}],
"targets": [{
"container_app": "capp-1",
"revision": "rev-1",
"weight": 100,
}],
}],
},
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.NewHttpRouteConfig(ctx, "httpRouteConfig", &app.HttpRouteConfigArgs{
EnvironmentName: pulumi.String("testcontainerenv"),
HttpRouteName: pulumi.String("httproutefriendlyname"),
Properties: &app.HttpRouteConfigPropertiesArgs{
CustomDomains: app.CustomDomainArray{
&app.CustomDomainArgs{
BindingType: pulumi.String(app.BindingTypeSniEnabled),
CertificateId: pulumi.String("/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1"),
Name: pulumi.String("example.com"),
},
},
Rules: app.HttpRouteRuleArray{
&app.HttpRouteRuleArgs{
Description: pulumi.String("random-description"),
Routes: app.HttpRouteArray{
&app.HttpRouteArgs{
Action: &app.HttpRouteActionArgs{
PrefixRewrite: pulumi.String("/v1/api"),
},
Match: &app.HttpRouteMatchArgs{
CaseSensitive: pulumi.Bool(true),
Path: pulumi.String("/v1"),
},
},
},
Targets: app.HttpRouteTargetArray{
&app.HttpRouteTargetArgs{
ContainerApp: pulumi.String("capp-1"),
Revision: pulumi.String("rev-1"),
Weight: pulumi.Int(100),
},
},
},
},
},
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 httpRouteConfig = new AzureNative.App.HttpRouteConfig("httpRouteConfig", new()
{
EnvironmentName = "testcontainerenv",
HttpRouteName = "httproutefriendlyname",
Properties = new AzureNative.App.Inputs.HttpRouteConfigPropertiesArgs
{
CustomDomains = new[]
{
new AzureNative.App.Inputs.CustomDomainArgs
{
BindingType = AzureNative.App.BindingType.SniEnabled,
CertificateId = "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1",
Name = "example.com",
},
},
Rules = new[]
{
new AzureNative.App.Inputs.HttpRouteRuleArgs
{
Description = "random-description",
Routes = new[]
{
new AzureNative.App.Inputs.HttpRouteArgs
{
Action = new AzureNative.App.Inputs.HttpRouteActionArgs
{
PrefixRewrite = "/v1/api",
},
Match = new AzureNative.App.Inputs.HttpRouteMatchArgs
{
CaseSensitive = true,
Path = "/v1",
},
},
},
Targets = new[]
{
new AzureNative.App.Inputs.HttpRouteTargetArgs
{
ContainerApp = "capp-1",
Revision = "rev-1",
Weight = 100,
},
},
},
},
},
ResourceGroupName = "examplerg",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.app.HttpRouteConfig;
import com.pulumi.azurenative.app.HttpRouteConfigArgs;
import com.pulumi.azurenative.app.inputs.HttpRouteConfigPropertiesArgs;
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 httpRouteConfig = new HttpRouteConfig("httpRouteConfig", HttpRouteConfigArgs.builder()
.environmentName("testcontainerenv")
.httpRouteName("httproutefriendlyname")
.properties(HttpRouteConfigPropertiesArgs.builder()
.customDomains(CustomDomainArgs.builder()
.bindingType("SniEnabled")
.certificateId("/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1")
.name("example.com")
.build())
.rules(HttpRouteRuleArgs.builder()
.description("random-description")
.routes(HttpRouteArgs.builder()
.action(HttpRouteActionArgs.builder()
.prefixRewrite("/v1/api")
.build())
.match(HttpRouteMatchArgs.builder()
.caseSensitive(true)
.path("/v1")
.build())
.build())
.targets(HttpRouteTargetArgs.builder()
.containerApp("capp-1")
.revision("rev-1")
.weight(100)
.build())
.build())
.build())
.resourceGroupName("examplerg")
.build());
}
}
resources:
httpRouteConfig:
type: azure-native:app:HttpRouteConfig
properties:
environmentName: testcontainerenv
httpRouteName: httproutefriendlyname
properties:
customDomains:
- bindingType: SniEnabled
certificateId: /subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1
name: example.com
rules:
- description: random-description
routes:
- action:
prefixRewrite: /v1/api
match:
caseSensitive: true
path: /v1
targets:
- containerApp: capp-1
revision: rev-1
weight: 100
resourceGroupName: examplerg
When a request arrives, the match block evaluates the incoming path. If it matches /v1 (case-sensitive), the action block rewrites it to /v1/api before forwarding to the target. The targets array specifies which container app and revision receive the traffic, with weight controlling traffic distribution. The customDomains block binds a TLS certificate to example.com, enabling HTTPS with SNI.
Route with path-separated prefix matching
Path-separated prefix matching treats path segments as distinct units, ensuring /v1 matches /v1/users but not /v1users.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const httpRouteConfig = new azure_native.app.HttpRouteConfig("httpRouteConfig", {
environmentName: "testcontainerenv",
httpRouteName: "httproutefriendlyname",
properties: {
customDomains: [{
bindingType: azure_native.app.BindingType.Disabled,
certificateId: "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1",
name: "example.com",
}],
rules: [{
description: "random-description",
routes: [{
action: {
prefixRewrite: "/v1/api",
},
match: {
caseSensitive: true,
pathSeparatedPrefix: "/v1",
},
}],
targets: [{
containerApp: "capp-1",
label: "label-1",
}],
}],
},
resourceGroupName: "examplerg",
});
import pulumi
import pulumi_azure_native as azure_native
http_route_config = azure_native.app.HttpRouteConfig("httpRouteConfig",
environment_name="testcontainerenv",
http_route_name="httproutefriendlyname",
properties={
"custom_domains": [{
"binding_type": azure_native.app.BindingType.DISABLED,
"certificate_id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1",
"name": "example.com",
}],
"rules": [{
"description": "random-description",
"routes": [{
"action": {
"prefix_rewrite": "/v1/api",
},
"match": {
"case_sensitive": True,
"path_separated_prefix": "/v1",
},
}],
"targets": [{
"container_app": "capp-1",
"label": "label-1",
}],
}],
},
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.NewHttpRouteConfig(ctx, "httpRouteConfig", &app.HttpRouteConfigArgs{
EnvironmentName: pulumi.String("testcontainerenv"),
HttpRouteName: pulumi.String("httproutefriendlyname"),
Properties: &app.HttpRouteConfigPropertiesArgs{
CustomDomains: app.CustomDomainArray{
&app.CustomDomainArgs{
BindingType: pulumi.String(app.BindingTypeDisabled),
CertificateId: pulumi.String("/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1"),
Name: pulumi.String("example.com"),
},
},
Rules: app.HttpRouteRuleArray{
&app.HttpRouteRuleArgs{
Description: pulumi.String("random-description"),
Routes: app.HttpRouteArray{
&app.HttpRouteArgs{
Action: &app.HttpRouteActionArgs{
PrefixRewrite: pulumi.String("/v1/api"),
},
Match: &app.HttpRouteMatchArgs{
CaseSensitive: pulumi.Bool(true),
PathSeparatedPrefix: pulumi.String("/v1"),
},
},
},
Targets: app.HttpRouteTargetArray{
&app.HttpRouteTargetArgs{
ContainerApp: pulumi.String("capp-1"),
Label: pulumi.String("label-1"),
},
},
},
},
},
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 httpRouteConfig = new AzureNative.App.HttpRouteConfig("httpRouteConfig", new()
{
EnvironmentName = "testcontainerenv",
HttpRouteName = "httproutefriendlyname",
Properties = new AzureNative.App.Inputs.HttpRouteConfigPropertiesArgs
{
CustomDomains = new[]
{
new AzureNative.App.Inputs.CustomDomainArgs
{
BindingType = AzureNative.App.BindingType.Disabled,
CertificateId = "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1",
Name = "example.com",
},
},
Rules = new[]
{
new AzureNative.App.Inputs.HttpRouteRuleArgs
{
Description = "random-description",
Routes = new[]
{
new AzureNative.App.Inputs.HttpRouteArgs
{
Action = new AzureNative.App.Inputs.HttpRouteActionArgs
{
PrefixRewrite = "/v1/api",
},
Match = new AzureNative.App.Inputs.HttpRouteMatchArgs
{
CaseSensitive = true,
PathSeparatedPrefix = "/v1",
},
},
},
Targets = new[]
{
new AzureNative.App.Inputs.HttpRouteTargetArgs
{
ContainerApp = "capp-1",
Label = "label-1",
},
},
},
},
},
ResourceGroupName = "examplerg",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.app.HttpRouteConfig;
import com.pulumi.azurenative.app.HttpRouteConfigArgs;
import com.pulumi.azurenative.app.inputs.HttpRouteConfigPropertiesArgs;
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 httpRouteConfig = new HttpRouteConfig("httpRouteConfig", HttpRouteConfigArgs.builder()
.environmentName("testcontainerenv")
.httpRouteName("httproutefriendlyname")
.properties(HttpRouteConfigPropertiesArgs.builder()
.customDomains(CustomDomainArgs.builder()
.bindingType("Disabled")
.certificateId("/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1")
.name("example.com")
.build())
.rules(HttpRouteRuleArgs.builder()
.description("random-description")
.routes(HttpRouteArgs.builder()
.action(HttpRouteActionArgs.builder()
.prefixRewrite("/v1/api")
.build())
.match(HttpRouteMatchArgs.builder()
.caseSensitive(true)
.pathSeparatedPrefix("/v1")
.build())
.build())
.targets(HttpRouteTargetArgs.builder()
.containerApp("capp-1")
.label("label-1")
.build())
.build())
.build())
.resourceGroupName("examplerg")
.build());
}
}
resources:
httpRouteConfig:
type: azure-native:app:HttpRouteConfig
properties:
environmentName: testcontainerenv
httpRouteName: httproutefriendlyname
properties:
customDomains:
- bindingType: Disabled
certificateId: /subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1
name: example.com
rules:
- description: random-description
routes:
- action:
prefixRewrite: /v1/api
match:
caseSensitive: true
pathSeparatedPrefix: /v1
targets:
- containerApp: capp-1
label: label-1
resourceGroupName: examplerg
The pathSeparatedPrefix property evaluates paths segment-by-segment rather than as raw strings. This example routes to a traffic label instead of a specific revision, allowing you to shift traffic between revisions without updating the route config. The bindingType is set to Disabled, meaning the custom domain accepts HTTP traffic without enforcing TLS.
Route with simple prefix matching
Simple prefix matching evaluates paths as raw strings, providing straightforward routing without segment-aware logic.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const httpRouteConfig = new azure_native.app.HttpRouteConfig("httpRouteConfig", {
environmentName: "testcontainerenv",
httpRouteName: "httproutefriendlyname",
properties: {
customDomains: [{
bindingType: azure_native.app.BindingType.Disabled,
certificateId: "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1",
name: "example.com",
}],
rules: [{
description: "random-description",
routes: [{
action: {
prefixRewrite: "/v1/api",
},
match: {
caseSensitive: true,
prefix: "/v1",
},
}],
targets: [{
containerApp: "capp-1",
label: "label-1",
}],
}],
},
resourceGroupName: "examplerg",
});
import pulumi
import pulumi_azure_native as azure_native
http_route_config = azure_native.app.HttpRouteConfig("httpRouteConfig",
environment_name="testcontainerenv",
http_route_name="httproutefriendlyname",
properties={
"custom_domains": [{
"binding_type": azure_native.app.BindingType.DISABLED,
"certificate_id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1",
"name": "example.com",
}],
"rules": [{
"description": "random-description",
"routes": [{
"action": {
"prefix_rewrite": "/v1/api",
},
"match": {
"case_sensitive": True,
"prefix": "/v1",
},
}],
"targets": [{
"container_app": "capp-1",
"label": "label-1",
}],
}],
},
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.NewHttpRouteConfig(ctx, "httpRouteConfig", &app.HttpRouteConfigArgs{
EnvironmentName: pulumi.String("testcontainerenv"),
HttpRouteName: pulumi.String("httproutefriendlyname"),
Properties: &app.HttpRouteConfigPropertiesArgs{
CustomDomains: app.CustomDomainArray{
&app.CustomDomainArgs{
BindingType: pulumi.String(app.BindingTypeDisabled),
CertificateId: pulumi.String("/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1"),
Name: pulumi.String("example.com"),
},
},
Rules: app.HttpRouteRuleArray{
&app.HttpRouteRuleArgs{
Description: pulumi.String("random-description"),
Routes: app.HttpRouteArray{
&app.HttpRouteArgs{
Action: &app.HttpRouteActionArgs{
PrefixRewrite: pulumi.String("/v1/api"),
},
Match: &app.HttpRouteMatchArgs{
CaseSensitive: pulumi.Bool(true),
Prefix: pulumi.String("/v1"),
},
},
},
Targets: app.HttpRouteTargetArray{
&app.HttpRouteTargetArgs{
ContainerApp: pulumi.String("capp-1"),
Label: pulumi.String("label-1"),
},
},
},
},
},
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 httpRouteConfig = new AzureNative.App.HttpRouteConfig("httpRouteConfig", new()
{
EnvironmentName = "testcontainerenv",
HttpRouteName = "httproutefriendlyname",
Properties = new AzureNative.App.Inputs.HttpRouteConfigPropertiesArgs
{
CustomDomains = new[]
{
new AzureNative.App.Inputs.CustomDomainArgs
{
BindingType = AzureNative.App.BindingType.Disabled,
CertificateId = "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1",
Name = "example.com",
},
},
Rules = new[]
{
new AzureNative.App.Inputs.HttpRouteRuleArgs
{
Description = "random-description",
Routes = new[]
{
new AzureNative.App.Inputs.HttpRouteArgs
{
Action = new AzureNative.App.Inputs.HttpRouteActionArgs
{
PrefixRewrite = "/v1/api",
},
Match = new AzureNative.App.Inputs.HttpRouteMatchArgs
{
CaseSensitive = true,
Prefix = "/v1",
},
},
},
Targets = new[]
{
new AzureNative.App.Inputs.HttpRouteTargetArgs
{
ContainerApp = "capp-1",
Label = "label-1",
},
},
},
},
},
ResourceGroupName = "examplerg",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.app.HttpRouteConfig;
import com.pulumi.azurenative.app.HttpRouteConfigArgs;
import com.pulumi.azurenative.app.inputs.HttpRouteConfigPropertiesArgs;
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 httpRouteConfig = new HttpRouteConfig("httpRouteConfig", HttpRouteConfigArgs.builder()
.environmentName("testcontainerenv")
.httpRouteName("httproutefriendlyname")
.properties(HttpRouteConfigPropertiesArgs.builder()
.customDomains(CustomDomainArgs.builder()
.bindingType("Disabled")
.certificateId("/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1")
.name("example.com")
.build())
.rules(HttpRouteRuleArgs.builder()
.description("random-description")
.routes(HttpRouteArgs.builder()
.action(HttpRouteActionArgs.builder()
.prefixRewrite("/v1/api")
.build())
.match(HttpRouteMatchArgs.builder()
.caseSensitive(true)
.prefix("/v1")
.build())
.build())
.targets(HttpRouteTargetArgs.builder()
.containerApp("capp-1")
.label("label-1")
.build())
.build())
.build())
.resourceGroupName("examplerg")
.build());
}
}
resources:
httpRouteConfig:
type: azure-native:app:HttpRouteConfig
properties:
environmentName: testcontainerenv
httpRouteName: httproutefriendlyname
properties:
customDomains:
- bindingType: Disabled
certificateId: /subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/examplerg/providers/Microsoft.App/managedEnvironments/testcontainerenv/certificates/certificate-1
name: example.com
rules:
- description: random-description
routes:
- action:
prefixRewrite: /v1/api
match:
caseSensitive: true
prefix: /v1
targets:
- containerApp: capp-1
label: label-1
resourceGroupName: examplerg
The prefix property performs string-based matching. Unlike pathSeparatedPrefix, this matches any path starting with /v1, including /v1users. This example also uses label-based targeting, demonstrating an alternative to revision-specific routing.
Beyond these examples
These snippets focus on specific route config features: path-based routing with rewriting, custom domain and TLS binding, and revision and label-based traffic targeting. They’re intentionally minimal rather than full ingress configurations.
The examples reference pre-existing infrastructure such as Container App Environments, container apps with revisions or traffic labels, and TLS certificates in the managed environment. They focus on configuring the route rather than provisioning the surrounding infrastructure.
To keep things focused, common routing patterns are omitted, including:
- Header-based routing (match.headers)
- Query parameter matching (match.queryParameters)
- Multiple route rules per configuration
- Traffic splitting across multiple targets (weight distribution)
These omissions are intentional: the goal is to illustrate how each routing feature is wired, not provide drop-in ingress modules. See the HttpRouteConfig resource reference for all available configuration options.
Let's configure Azure Container App HTTP Route Rules
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Resource Configuration & Immutability
environmentName, httpRouteName, and resourceGroupName properties are immutable. Changing any of these requires replacing the resource.Path Matching & Routing
match object: path for exact path matching, prefix for prefix-based matching, and pathSeparatedPrefix for path-separated prefix matching. All support the caseSensitive option.prefixRewrite in the action object to transform incoming paths. For example, you can rewrite requests from /v1 to /v1/api.Custom Domains & SSL
customDomains with bindingType set to SniEnabled for SSL/TLS or Disabled for HTTP only. Include the certificateId (path to your managed certificate) and domain name.Traffic Distribution
targets with either revision and weight for traffic splitting across revisions, or use label to route to a specific labeled revision.