Skip to content
Back to skills

Azure Dr Multiregion

ASecurity

Turns the WAF Reliability pillar's checklist items into concrete Bicep disaster-recovery patterns. Flags a production workload with no paired-region secondary deployment, no Traffic Manager/Front Door failover routing configured, no documented RPO/RTO targets, and a database with no cross-region replication or geo-redundant backup matching those targets. Outputs findings with pilot-azure dr-multiregion standard IDs.

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 6, 2026
developmentgosqlazuretestingdatabase

Security analysis

A100/100

Scanned September 6, 2026

npx -y skills add AgenticPawan/FullStack-Pilot --skill azure-dr-multiregion --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Azure Dr Multiregion?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Azure Dr Multiregion
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/agenticpawan-azure-dr-multiregion/badge)](https://www.skillsdirectory.com/skills/agenticpawan-azure-dr-multiregion)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: azure-dr-multiregion
description: Turns the WAF Reliability pillar's checklist items into concrete Bicep disaster-recovery patterns. Flags a production workload with no paired-region secondary deployment, no Traffic Manager/Front Door failover routing configured, no documented RPO/RTO targets, and a database with no cross-region replication or geo-redundant backup matching those targets. Outputs findings with pilot-azure dr-multiregion standard IDs.
when_to_use: disaster recovery, multi-region, paired regions, Traffic Manager failover, Front Door failover routing, RPO, RTO, geo-redundant backup, cross-region replication, failover testing, active-passive, active-active
---

## Standard IDs

| ID | Severity | What it checks |
|----|----------|-----------------|
| ADR-001 | P1 | Production workload has no paired-region secondary deployment |
| ADR-002 | P1 | No Traffic Manager/Front Door failover routing configured |
| ADR-003 | P2 | No documented RPO/RTO targets for the workload |
| ADR-004 | P1 | Database has no cross-region replication/geo-redundant backup matching the RPO/RTO |

---

## Check A — No paired-region secondary deployment (ADR-001)

### Detection

Check whether the Bicep templates deploy only a single region for a production workload
with no secondary-region module using an Azure paired region (e.g., East US paired with
West US). A single-region deployment means a regional Azure outage takes the whole
workload down with no failover target — this is `azure-waf-review`'s WAF-REL-004
("single-region deployment with no geo-redundancy note") made concrete with an actual
pattern to fix it.

### BAD — one region, no secondary

```bicep
// main.bicep — deploys only to East US
param location string = 'eastus'

resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
  location: location
  // No secondary-region module; an East US outage takes the whole app down.
}
```

### GOOD — primary + paired-region secondary via a shared module

```bicep
// main.bicep
module primary 'modules/region.bicep' = {
  name: 'primary'
  params: { location: 'eastus', isPrimary: true }
}

module secondary 'modules/region.bicep' = {
  name: 'secondary'
  params: { location: 'westus', isPrimary: false } // Azure paired region for East US
}
```

---

## Check B — No Traffic Manager/Front Door failover routing (ADR-002)

### Detection

With two regional deployments (Check A) in place, confirm a Traffic Manager profile
(`Microsoft.Network/trafficManagerProfiles`) or Front Door (`Microsoft.Cdn/profiles`) with
`Priority` routing is configured to actually fail over — two independent regional
deployments with no shared front door still requires a manual DNS change during an
outage.

### BAD — two regions deployed, but nothing routes between them

```bicep
module primary 'modules/region.bicep' = { params: { location: 'eastus' } }
module secondary 'modules/region.bicep' = { params: { location: 'westus' } }
// No Traffic Manager/Front Door — a failover today means someone manually repointing DNS.
```

### GOOD — Traffic Manager with priority routing automates the failover

```bicep
resource trafficManager 'Microsoft.Network/trafficManagerProfiles@2022-04-01' = {
  name: 'tm-orders-prod'
  properties: {
    trafficRoutingMethod: 'Priority'
    endpoints: [
      { name: 'primary', properties: { target: primary.outputs.appHostname, priority: 1 } }
      { name: 'secondary', properties: { target: secondary.outputs.appHostname, priority: 2 } }
    ]
    monitorConfig: { protocol: 'HTTPS', port: 443, path: '/health/live' } // ties to dotnet-observability OBS-001
  }
}
```

---

## Check C — No documented RPO/RTO targets (ADR-003)

### Detection

Check for a documented Recovery Point Objective (how much data loss is acceptable) and
Recovery Time Objective (how long until the workload is back up) for the workload —
without stated targets, every downstream decision (geo-redundant backup frequency,
active-active vs. active-passive, failover automation) has no measurable bar to meet.

### BAD — DR patterns exist with no stated target driving their configuration

```markdown
<!-- No RPO/RTO documented anywhere — geo-replication frequency was picked arbitrarily -->
```

### GOOD — explicit targets driving the configuration choices in Checks A/B/D

```markdown
<!-- docs/DR-PLAN.md -->
Orders service: RPO 5 minutes, RTO 15 minutes.
- SQL geo-replication: continuous (async), meets 5-minute RPO.
- Traffic Manager failover: 30-second health-check interval, 3 consecutive failures
  before failover — well within the 15-minute RTO budget.
```

---

## Check D — Database has no cross-region replication matching RPO/RTO (ADR-004)

### Detection

Check the SQL Database Bicep resource for `Microsoft.Sql/servers/databases/geoReplicas`
(Active Geo-Replication) or an Auto-Failover Group, and confirm its replication lag/failover
time is actually consistent with the RPO/RTO documented in Check C. A geo-redundant
*backup* alone (point-in-time restore from another region) has a much longer RTO than an
active geo-replica and may not meet an aggressive target.

### BAD — only standard geo-redundant backup, RTO target requires much faster recovery

```bicep
resource sqlDb 'Microsoft.Sql/servers/databases@2023-08-01' = {
  properties: {
    requestedBackupStorageRedundancy: 'Geo' // backup-only — restoring from it can take hours, not minutes
  }
}
```

### GOOD — auto-failover group meeting a 15-minute RTO target

```bicep
resource failoverGroup 'Microsoft.Sql/servers/failoverGroups@2023-08-01' = {
  name: 'fog-orders-prod'
  properties: {
    partnerServers: [{ id: secondaryServer.id }]
    readWriteEndpoint: { failoverPolicy: 'Automatic', failoverWithDataLossGracePeriodMinutes: 60 }
    databases: [sqlDb.id]
  }
}
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.