DR Runbook Templates (L3)¶
Disaster-recovery runbook templates for SnowOps client engagements. These are blanks you copy per client/workload and fill in — they are not a live DR plan on their own. They turn the existing DR machinery into something an on-call engineer can execute under pressure.
Code → name lookup:
docs/context/00-asset-glossary.md. Full catalog:docs/context/03-asset-catalog.md. Bring-up/teardown order:SEQUENCING.md(Phase 5 DR operations, Phase 8 teardown).
What this covers (and what builds it)¶
DR in SnowOps is three real capabilities plus this template layer:
| Code | Capability | Role in DR | Where |
|---|---|---|---|
L1 |
Azure Backup Policy Module | Recoverability half — GeoRedundant Recovery Services vault (VM / Azure Files / SQL-in-VM) + Data Protection vault (AKS), per-env retention, soft-delete + immutability. | modules/azure/backup-policy/ |
L2 |
Cross-Region Replication Module | Active-replication half — blob object replication (source→DR account) + geo-redundant SQL failover group, per-env failover posture. | modules/azure/cross-region-replication/ |
L4 |
Automated Restore Drill | The proof — monthly restore/failover into an ephemeral sandbox RG, validates, tears down, emits a RestoreDrillReport; feeds the Compliance Dashboard (S2) DR panel. |
apps/restore-drill/ |
L3 |
DR Runbook Templates (this dir) | The human procedures — declare, fail over, restore, fail back. | docs/runbooks/dr/ |
L1 makes recovery possible, L2 keeps a warm copy ready, L4 rehearses
the procedures below every month, and these templates are what a human follows
during a real event. When a DR event overlaps a security incident (ransomware,
data leak), pair these with the Incident Response Runbooks (K1) under
docs/runbooks/incident/.
The templates¶
| File | Use it for |
|---|---|
dr-plan-template.md |
The master DR plan for a client/workload — scope, contacts, objectives, declaration, comms, links to the scenarios below. Start here. |
scenario-region-failover.md |
Failing the whole workload over to the secondary region (storage + SQL + DNS/Front Door cutover) and back. |
scenario-data-restore.md |
Point-in-time restore of VM / Azure Files / AKS / blob data from the Azure Backup Policy Module (L1) into a recovery RG. |
scenario-sql-failover.md |
SQL failover-group-specific procedure — planned vs forced failover, grace period, listener, reseed. |
scenario-full-region-loss.md |
Worst case: total loss of the primary region, combining the above plus a rebuild-from-IaC path. |
How to use the templates¶
- Copy, don't edit in place. For a client/workload, copy the relevant files
into the client repo (e.g.
docs/dr/<workload>/). Keep the originals here as the canonical blanks. - Fill every
<PLACEHOLDER>. Anything in<ANGLE_BRACKETS>is a value you must supply (resource IDs, regions, contacts). A template with unfilled placeholders is not an approved plan. - Pin the real resource IDs. Pull them from
terraform outputon theL1(recovery_services_vault_id,*_policy_id) andL2(sql_failover_group_id,object_replication_id) modules, or the Terragrunt Live-Infra Reference (F7)live/units. Don't hand-type ARM IDs. - Rehearse with
L4. The Automated Restore Drill exercises the data restore and SQL failover scenarios monthly into an ephemeral sandbox RG and records aRestoreDrillReport. A scenario you have never seen pass inL4is a hope, not a plan. The drill outcome surfaces on the Compliance Dashboard (S2) DR panel. - Sign off after every real or rehearsed run. Fill the sign-off block at the bottom of each runbook so there is an auditable record.
RTO / RPO summary by environment¶
These targets are defaults consistent with what L1 retention and L2
failover posture actually deliver. Override per client SLA in the plan template,
but keep them coherent with the underlying module config — a 15-minute RTO is not
credible against a Manual failover policy.
| Env | RPO (data loss budget) | RTO (time to recover) | Backup retention (L1) |
SQL failover posture (L2) |
|---|---|---|---|---|
| dev | Best-effort (≤ 24h) | Best-effort (next business day) | daily 7d | Manual failover (no auto grace) |
| staging | ≤ 1h (object replication is async; SQL geo-replica is near-sync) | ≤ 4h | daily 14d + weekly 5w | Automatic, 60-min grace |
| prod | ≤ 15 min for SQL (geo-replica) / ≤ 1h for blob (async object replication) | ≤ 2h for failover · ≤ 4h for full restore | daily 30d + weekly 12w + monthly 12m + yearly 7y | Automatic, 120-min grace |
Notes:
- RPO is bounded by replication lag, not backup frequency. SQL failover groups
replicate continuously (small RPO); blob object replication is async, so its
RPO is the replication lag (typically minutes, budget ≤ 1h). Point-in-time
restore RPO is bounded by the daily backup schedule (L1 runs daily at the
configured backup_time, default 23:00 UTC).
- RTO for a failover (warm secondary already replicating) is far shorter
than a restore (rehydrating from a vault). Region failover leans on L2;
data restore leans on L1. Pick the path that meets the env's RTO.
- The prod failover grace of 120 min means an Automatic failover only fires
after the primary has been unreachable that long — for a faster planned cutover,
use the forced/planned path in scenario-sql-failover.md.
Cross-references¶
- Recoverability / restore → Azure Backup Policy Module (
L1),modules/azure/backup-policy/README.md. - Replication / failover → Cross-Region Replication Module (
L2),modules/azure/cross-region-replication/README.md. - Rehearsal / proof → Automated Restore Drill (
L4),apps/restore-drill/, runbookdocs/runbooks/test/L4.md; outcomes on the Compliance Dashboard (S2) DR panel. - Rebuild from IaC → Terragrunt Live-Infra Reference (
F7),live/. - Security overlap → Incident Response Runbooks (
K1),docs/runbooks/incident/(ransomware, data-leak in particular). - Ordering →
SEQUENCING.mdPhase 5 (DR ops) and Phase 8 (teardown).