Skip to content
Weave templates

Disaster Recovery Topology (Pilot Light)

A primary site, an immutable backup vault with cross-region copy, and a pilot-light DR site whose network is pre-provisioned and whose app tier scales from zero on failover — with the RTO/RPO stated on the page.

Template previewWeave
Rendering…

Make it your own.

{
  "nodes": [
    { "id": "prim", "type": "container", "label": "Primary — eu-west-1",              "x": 20,  "y": 60,  "width": 460, "height": 440, "fill": "rgba(220,252,231,0.26)", "stroke": "#15803d" },
    { "id": "vlt",  "type": "container", "label": "Immutable backup vault",           "x": 540, "y": 200, "width": 260, "height": 280, "fill": "rgba(254,226,226,0.26)", "stroke": "#b91c1c" },
    { "id": "dr",   "type": "container", "label": "DR — eu-central-1 (pilot light)",  "x": 860, "y": 60,  "width": 460, "height": 440, "fill": "rgba(254,243,199,0.26)", "stroke": "#b45309" },

    { "id": "dns", "type": "cloud", "label": "Route 53 — failover record", "x": 560, "y": 20, "width": 200, "height": 80, "fill": "#e0f2fe", "stroke": "#0369a1", "bold": true },

    { "id": "papp", "type": "docker-container", "label": "App tier — ECS ×8",  "x": 50,  "y": 110, "width": 180, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8", "bold": true },
    { "id": "pdb",  "type": "aws-rds",          "label": "Aurora writer",      "x": 270, "y": 108, "width": 140, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "pobj", "type": "aws-s3",           "label": "S3 — documents",     "x": 50,  "y": 255, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "pvol", "type": "backup-disk",      "label": "EBS volumes",        "x": 240, "y": 258, "width": 170, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
    { "id": "pfs",  "type": "bucket",           "label": "EFS — shared files", "x": 50,  "y": 380, "width": 170, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
    { "id": "psnp", "type": "clock",            "label": "Nightly snapshots",  "x": 250, "y": 380, "width": 170, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },

    { "id": "lock", "type": "lock",        "label": "Vault lock — 35-day WORM", "x": 570, "y": 250, "width": 200, "height": 104, "fill": "#fee2e2", "stroke": "#b91c1c" },
    { "id": "copy", "type": "backup-disk", "label": "Cross-region copy",        "x": 570, "y": 360, "width": 200, "height": 104, "fill": "#fee2e2", "stroke": "#b91c1c" },

    { "id": "dapp", "type": "docker-container", "label": "App tier — 0 tasks, AMI ready", "x": 890,  "y": 110, "width": 200, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },
    { "id": "ddb",  "type": "aws-rds",          "label": "Aurora replica",      "x": 1130, "y": 108, "width": 140, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "dobj", "type": "aws-s3",           "label": "S3 — replica bucket", "x": 890,  "y": 255, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "dvol", "type": "backup-disk",      "label": "Restored EBS",        "x": 1080, "y": 258, "width": 170, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },
    { "id": "dnet", "type": "aws-vpc",          "label": "VPC pre-provisioned", "x": 890,  "y": 378, "width": 140, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "dscl", "type": "gauge-chart",      "label": "Scale to 8 on failover","x": 1080, "y": 380, "width": 190, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },

    { "id": "rto", "type": "note",      "label": "RTO 30 min · RPO 5 min · restore tested every quarter", "x": 300, "y": 560, "width": 320, "height": 90, "fill": "#fef9c3", "stroke": "#ca8a04" },
    { "id": "run", "type": "clipboard", "label": "DR runbook + game-day", "x": 700, "y": 548, "width": 190, "height": 104, "fill": "#f1f5f9", "stroke": "#475569" }
  ],
  "edges": [
    { "id": "r1",  "source": "papp", "target": "pdb",  "thickness": 2 },
    { "id": "r2",  "source": "papp", "target": "pobj" },
    { "id": "r3",  "source": "papp", "target": "pfs" },
    { "id": "r4",  "source": "pvol", "target": "psnp", "label": "daily 02:00" },
    { "id": "r5",  "source": "psnp", "target": "lock" },
    { "id": "r6",  "source": "pdb",  "target": "lock", "label": "automated backups" },
    { "id": "r7",  "source": "lock", "target": "copy" },
    { "id": "r8",  "source": "copy", "target": "dvol", "label": "restore on declare" },
    { "id": "r9",  "source": "pobj", "target": "dobj", "label": "cross-region replication", "style": "dashed", "thickness": 2 },
    { "id": "r10", "source": "pdb",  "target": "ddb",  "label": "Aurora Global — RPO 5 min", "thickness": 3 },
    { "id": "r11", "source": "dapp", "target": "ddb",  "label": "promoted writer on failover", "style": "dashed" },
    { "id": "r12", "source": "dnet", "target": "dapp", "label": "subnets + SGs ready", "style": "dashed" },
    { "id": "r13", "source": "dscl", "target": "dapp", "label": "failover trigger", "thickness": 2 },
    { "id": "r14", "source": "dns",  "target": "papp", "label": "100 %", "thickness": 3 },
    { "id": "r15", "source": "dns",  "target": "dapp", "label": "0 % until health check fails", "style": "dashed" },
    { "id": "r16", "source": "run",  "target": "dscl", "style": "dashed" }
  ]
}