Skip to content
Weave templates

Multi-Region Active / Warm-Standby Failover

Route 53 health checks and Global Accelerator in front of two regions: a full active stack in eu-west-1 and a scaled-down warm standby in us-east-1, joined by Aurora Global, S3 CRR and DynamoDB global tables.

Template previewWeave
Rendering…

Make it your own.

{
  "nodes": [
    { "id": "ra", "type": "container", "label": "eu-west-1 — ACTIVE",       "x": 20,  "y": 300, "width": 620, "height": 420, "fill": "rgba(220,252,231,0.26)", "stroke": "#15803d" },
    { "id": "rb", "type": "container", "label": "us-east-1 — WARM STANDBY", "x": 680, "y": 300, "width": 620, "height": 420, "fill": "rgba(254,243,199,0.26)", "stroke": "#b45309" },

    { "id": "usr",  "type": "user-group",     "label": "Global customers", "x": 560, "y": 20,  "width": 140, "height": 104, "fill": "#e0f2fe", "stroke": "#0369a1" },
    { "id": "dns",  "type": "cloud",          "label": "Route 53 — failover routing", "x": 520, "y": 160, "width": 220, "height": 80, "fill": "#e0f2fe", "stroke": "#0369a1", "bold": true },
    { "id": "hc",   "type": "heart-pulse",    "label": "Health check /healthz", "x": 780, "y": 150, "width": 150, "height": 104, "fill": "#fee2e2", "stroke": "#b91c1c" },
    { "id": "acc",  "type": "network-globe",  "label": "Global Accelerator", "x": 320, "y": 150, "width": 150, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" },

    { "id": "alba",  "type": "aws-elb",          "label": "ALB",              "x": 60,  "y": 345, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "ecsa",  "type": "docker-container", "label": "ECS — 6 tasks",    "x": 230, "y": 348, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8", "bold": true },
    { "id": "rdsa",  "type": "aws-rds",          "label": "Aurora writer",    "x": 420, "y": 345, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "caca",  "type": "cache",            "label": "ElastiCache",      "x": 60,  "y": 500, "width": 140, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" },
    { "id": "s3a",   "type": "aws-s3",           "label": "S3 — eu bucket",   "x": 240, "y": 498, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "ddba",  "type": "aws-dynamo",       "label": "DynamoDB",         "x": 420, "y": 498, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },

    { "id": "albb",  "type": "aws-elb",          "label": "ALB",               "x": 720,  "y": 345, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "ecsb",  "type": "docker-container", "label": "ECS — 2 tasks",     "x": 890,  "y": 348, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
    { "id": "rdsb",  "type": "aws-rds",          "label": "Aurora replica",    "x": 1080, "y": 345, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "cacb",  "type": "cache",            "label": "ElastiCache",       "x": 720,  "y": 500, "width": 140, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" },
    { "id": "s3b",   "type": "aws-s3",           "label": "S3 — us bucket",    "x": 900,  "y": 498, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
    { "id": "ddbb",  "type": "aws-dynamo",       "label": "DynamoDB",          "x": 1080, "y": 498, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },

    { "id": "rto", "type": "note", "label": "RTO 15 min · RPO 1 min · failover drill every quarter", "x": 500, "y": 770, "width": 320, "height": 90, "fill": "#fef9c3", "stroke": "#ca8a04" }
  ],
  "edges": [
    { "id": "f1",  "source": "usr",  "target": "dns",  "label": "app.example.com", "thickness": 3 },
    { "id": "f2",  "source": "dns",  "target": "acc",  "thickness": 3 },
    { "id": "f3",  "source": "dns",  "target": "hc",   "label": "evaluates", "style": "dashed" },
    { "id": "f4",  "source": "hc",   "target": "alba", "label": "probe 30 s", "style": "dashed" },
    { "id": "f5",  "source": "hc",   "target": "albb", "label": "probe 30 s", "style": "dashed" },
    { "id": "f6",  "source": "acc",  "target": "alba", "label": "100 % traffic", "thickness": 3 },
    { "id": "f7",  "source": "acc",  "target": "albb", "label": "0 % until failover", "style": "dashed" },
    { "id": "f8",  "source": "alba", "target": "ecsa" },
    { "id": "f9",  "source": "ecsa", "target": "rdsa" },
    { "id": "f10", "source": "ecsa", "target": "caca" },
    { "id": "f11", "source": "ecsa", "target": "s3a" },
    { "id": "f12", "source": "ecsa", "target": "ddba" },
    { "id": "f13", "source": "albb", "target": "ecsb" },
    { "id": "f14", "source": "ecsb", "target": "rdsb" },
    { "id": "f15", "source": "ecsb", "target": "cacb" },
    { "id": "f16", "source": "ecsb", "target": "s3b" },
    { "id": "f17", "source": "ecsb", "target": "ddbb" },
    { "id": "f18", "source": "rdsa", "target": "rdsb", "label": "Aurora Global — < 1 s lag", "thickness": 3 },
    { "id": "f19", "source": "s3a",  "target": "s3b",  "label": "cross-region replication", "style": "dashed", "thickness": 2 },
    { "id": "f20", "source": "ddba", "target": "ddbb", "label": "global table", "style": "dashed", "thickness": 2 }
  ]
}