Event-Driven Serverless Pipeline
API Gateway to Lambda to EventBridge, fanned out over SQS queues with dead-letter handling, a Step Functions saga, and DynamoDB / S3 sinks — the shape most serverless backends converge on.
Rendering…
Make it your own.
{
"nodes": [
{ "id": "fan", "type": "container", "label": "Asynchronous fan-out", "x": 780, "y": 20, "width": 360, "height": 460, "fill": "rgba(219,234,254,0.22)", "stroke": "#1d4ed8" },
{ "id": "mob", "type": "mobile-device", "label": "Mobile clients", "x": 40, "y": 60, "width": 130, "height": 104, "fill": "#e0f2fe", "stroke": "#0369a1" },
{ "id": "web", "type": "browser-window", "label": "Web storefront", "x": 40, "y": 200, "width": 130, "height": 104, "fill": "#e0f2fe", "stroke": "#0369a1" },
{ "id": "iot", "type": "iot-sensor", "label": "Store terminals", "x": 40, "y": 340, "width": 130, "height": 104, "fill": "#e0f2fe", "stroke": "#0369a1" },
{ "id": "apigw", "type": "aws-apigw", "label": "API Gateway", "x": 230, "y": 190, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "ing", "type": "aws-lambda", "label": "Lambda — validate", "x": 420, "y": 190, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "bus", "type": "event-bus", "label": "EventBridge — orders bus", "x": 610, "y": 193, "width": 130, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9", "bold": true },
{ "id": "sfn", "type": "gear", "label": "Step Functions — refund saga", "x": 610, "y": 340, "width": 130, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "q1", "type": "aws-sqs", "label": "SQS — fulfilment", "x": 800, "y": 60, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "q2", "type": "aws-sqs", "label": "SQS — analytics", "x": 800, "y": 190, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "dlq", "type": "aws-sqs", "label": "SQS — dead letter","x": 800, "y": 330, "width": 130, "height": 110, "fill": "#fee2e2", "stroke": "#b91c1c" },
{ "id": "w1", "type": "aws-lambda", "label": "Lambda — fulfil", "x": 990, "y": 60, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "w2", "type": "aws-lambda", "label": "Lambda — enrich", "x": 990, "y": 190, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "alm", "type": "bell", "label": "CloudWatch alarm", "x": 990, "y": 333, "width": 130, "height": 104, "fill": "#fee2e2", "stroke": "#b91c1c" },
{ "id": "ddb", "type": "aws-dynamo", "label": "DynamoDB — orders", "x": 1180, "y": 60, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "s3", "type": "aws-s3", "label": "S3 — raw events", "x": 1180, "y": 190, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "sns", "type": "aws-sns", "label": "SNS — alerts", "x": 1180, "y": 330, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "oc", "type": "user-group", "label": "On-call engineer", "x": 1180, "y": 470, "width": 130, "height": 104, "fill": "#f1f5f9", "stroke": "#475569" }
],
"edges": [
{ "id": "s1", "source": "mob", "target": "apigw" },
{ "id": "s2", "source": "web", "target": "apigw" },
{ "id": "s3e", "source": "iot", "target": "apigw" },
{ "id": "s4", "source": "apigw", "target": "ing", "label": "POST /events", "thickness": 3 },
{ "id": "s5", "source": "ing", "target": "bus", "label": "PutEvents", "thickness": 3 },
{ "id": "s6", "source": "bus", "target": "q1", "label": "orderPlaced" },
{ "id": "s7", "source": "bus", "target": "q2", "label": "all events" },
{ "id": "s8", "source": "bus", "target": "sfn", "label": "refundRequested" },
{ "id": "s9", "source": "q1", "target": "w1" },
{ "id": "s10", "source": "q2", "target": "w2" },
{ "id": "s11", "source": "q1", "target": "dlq", "label": "after 3 attempts", "style": "dashed" },
{ "id": "s12", "source": "q2", "target": "dlq", "style": "dashed" },
{ "id": "s13", "source": "w1", "target": "ddb", "label": "order state" },
{ "id": "s14", "source": "w2", "target": "s3", "label": "parquet, hourly" },
{ "id": "s15", "source": "sfn", "target": "ddb", "label": "refund state" },
{ "id": "s16", "source": "dlq", "target": "alm", "label": "depth > 0" },
{ "id": "s17", "source": "alm", "target": "sns" },
{ "id": "s18", "source": "sns", "target": "oc", "label": "page" }
]
}