From 77b5faa69347157c1db4c29b77dcae8886233db6 Mon Sep 17 00:00:00 2001 From: Buffden Date: Fri, 24 Apr 2026 23:13:36 -0500 Subject: [PATCH] night scheduler documentation and diagram --- .../01-scheduler/v1/night-scheduler.md | 120 + .../v1/scheduler-diagram.excalidraw | 2232 +++++++++++++++++ 2 files changed, 2352 insertions(+) create mode 100644 docs/architecture/01-scheduler/v1/night-scheduler.md create mode 100644 docs/architecture/01-scheduler/v1/scheduler-diagram.excalidraw diff --git a/docs/architecture/01-scheduler/v1/night-scheduler.md b/docs/architecture/01-scheduler/v1/night-scheduler.md new file mode 100644 index 0000000..e3f6944 --- /dev/null +++ b/docs/architecture/01-scheduler/v1/night-scheduler.md @@ -0,0 +1,120 @@ +# Night Scheduler — v1 + +> Stop EC2 and RDS every night. Start them back on weekdays. Zero idle compute cost overnight and all weekend. + +--- + +## Overview + +Both projects are portfolio and demo workloads. No real users visit at 2 AM on a Sunday. Running full production infrastructure around the clock for that audience is waste, not reliability. + +A Lambda function triggered by EventBridge Scheduler stops all EC2 instances and RDS every night, and starts them back on weekday mornings. Weekends stay fully off. + +**Result:** 60 hours of zero compute cost per week. ~22% reduction on the monthly AWS bill. The scheduler itself costs nothing — all five supporting services stay within the AWS free tier at this invocation rate. + +--- + +## Schedule + +| Event | Time | Days | +| --- | --- | --- | +| Stop all | 11:00 PM | Every day | +| Start all | 8:00 AM | Monday–Friday only | + +Weekend behavior: instances stop Friday at 11 PM and do not start again until Monday at 8 AM. + +--- + +## Architecture + +See `scheduler-diagram.excalidraw` in this folder for the visual. + +``` +IAM Role IAM Role +(EventBridge → (Lambda execution: + invoke Lambda only) EC2 + RDS stop/start only) + │ │ + ▼ │ +EventBridge Scheduler EventBridge Scheduler │ + (Stop — nightly) (Start — weekdays) │ + │ │ │ + └──────────────┬───────────┘ │ + ▼ │ + Lambda Function ◄───────────────────┘ + (Stop / start logic) + │ + ┌─────────────┼─────────────┐ + ▼ ▼ ▼ + EC2 (EMS) EC2 (TinyURL) RDS (TinyURL) + + │ + On any result + ┌──────────┴──────────┐ + ▼ ▼ + CloudWatch Logs On Lambda error (two independent paths) + (every invocation) │ │ + failed event Lambda error metric + payload │ + │ CloudWatch Alarm + SQS Dead Letter │ + Queue (replay) SNS Topic + │ + Email Alert +``` + +--- + +## Why Each Component Exists + +### EventBridge Scheduler + +The scheduling layer. Fires the Lambda on a cron expression with timezone awareness — no UTC offset arithmetic, no drift. Two separate schedules: one for stop, one for start. Each passes an action payload to Lambda so the same function handles both paths. + +Used over the older EventBridge Rules because Scheduler has a persistent schedule store, supports named groups, and is the current AWS standard for this pattern. + +### Lambda + +Runs the stop/start logic. No servers, no idle cost. Receives the action from EventBridge, calls the EC2 and RDS APIs, logs the result, and exits. Execution takes a few seconds per invocation. + +The function is stateless and has no side effects beyond stopping or starting the three resources it is scoped to. + +### IAM Role + +Least-privilege. The role attached to Lambda can stop and start only the specific EC2 instances and RDS instance it manages — nothing else in the account. A bug or misconfiguration in the function cannot affect any other resource. + +A separate role is attached to EventBridge Scheduler, scoped to invoking only this Lambda function. + +### SQS Dead Letter Queue + +If Lambda throws an unhandled exception, the failed event payload is routed to the DLQ instead of disappearing. Without it, a failed stop invocation produces no record — the instances stay on, the bill accumulates, and there is nothing to investigate. The DLQ ensures every failure is captured and can be replayed once the root cause is fixed. + +### CloudWatch Logs + +Every invocation writes structured logs. Full execution history — which instances were targeted, what state transitions occurred, any warnings — without needing SSH access to anything. + +### CloudWatch Alarm + SNS + +The alarm watches the Lambda error metric. If Lambda errors, the alarm fires and publishes to an SNS topic which sends an email alert. + +This matters because a missed stop that goes unnoticed is just a delayed line item on the next bill. The alert closes that gap — failure is visible immediately, not at the end of the month. + +--- + +## Cost + +All five services stay within the AWS free tier at this invocation rate. The scheduler itself adds nothing to the bill while saving ~$18/month in EC2 and RDS compute hours. + +Note: the ALB charges 24/7 regardless of whether the EC2 is running. Scheduler savings apply only to EC2 and RDS instance hours. + +--- + +## Design Decisions + +**Why not GitHub Actions scheduled workflows?** +Simpler to implement, but depends on GitHub availability. If GitHub has an incident during the nightly stop window, instances stay on. An AWS-native scheduler is more reliable for a billing-sensitive job. + +**Why Lambda over EventBridge direct SDK targets?** +EventBridge Scheduler can invoke EC2 and RDS APIs directly without Lambda. The Lambda approach was chosen because it adds observability (structured logs, DLQ, error metrics) that direct targets do not provide. For an unattended nightly job, knowing what happened matters more than removing one service from the stack. + +**Why not always-on infrastructure?** +These are portfolio projects. The scheduler is a deliberate trade-off: lower availability in exchange for lower cost. Recruiters and interviewers are not visiting at 2 AM on a Sunday. If the service is needed outside the window, it can be started manually in under a minute. diff --git a/docs/architecture/01-scheduler/v1/scheduler-diagram.excalidraw b/docs/architecture/01-scheduler/v1/scheduler-diagram.excalidraw new file mode 100644 index 0000000..76630e7 --- /dev/null +++ b/docs/architecture/01-scheduler/v1/scheduler-diagram.excalidraw @@ -0,0 +1,2232 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", + "elements": [ + { + "id": "eb-stop", + "type": "rectangle", + "x": 77.76972395042748, + "y": 33.34090049880999, + "width": 240, + "height": 80, + "angle": 0, + "strokeColor": "#7c3aed", + "backgroundColor": "#e9d5ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 101, + "version": 302, + "versionNonce": 187535069, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "eb-stop-t" + }, + { + "id": "arrow-eb-stop-lambda", + "type": "arrow" + } + ], + "updated": 1777090156747, + "link": null, + "locked": false, + "index": "a0" + }, + { + "id": "eb-stop-t", + "type": "text", + "x": 122.19081312279076, + "y": 47.09090049880999, + "width": 151.15782165527344, + "height": 52.5, + "angle": 0, + "strokeColor": "#4c1d95", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 102, + "version": 303, + "versionNonce": 1040151315, + "isDeleted": false, + "boundElements": [], + "containerId": "eb-stop", + "updated": 1777090156748, + "link": null, + "locked": false, + "text": "EventBridge Scheduler\nStop — 11 PM daily\ncron(0 4 * * ? *)", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "EventBridge Scheduler\nStop — 11 PM daily\ncron(0 4 * * ? *)", + "lineHeight": 1.25, + "index": "a1", + "autoResize": true + }, + { + "id": "eb-start", + "type": "rectangle", + "x": 333.39924038506246, + "y": 32.0351198327821, + "width": 240, + "height": 80, + "angle": 0, + "strokeColor": "#7c3aed", + "backgroundColor": "#e9d5ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 103, + "version": 144, + "versionNonce": 976436125, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "eb-start-t" + }, + { + "id": "arrow-eb-start-lambda", + "type": "arrow" + } + ], + "updated": 1777090156748, + "link": null, + "locked": false, + "index": "a2" + }, + { + "id": "eb-start-t", + "type": "text", + "x": 364.36630428887105, + "y": 45.7851198327821, + "width": 178.0658721923828, + "height": 52.5, + "angle": 0, + "strokeColor": "#4c1d95", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 104, + "version": 145, + "versionNonce": 238422611, + "isDeleted": false, + "boundElements": [], + "containerId": "eb-start", + "updated": 1777090156748, + "link": null, + "locked": false, + "text": "EventBridge Scheduler\nStart — 7 AM Mon–Fri\ncron(0 12 ? * MON-FRI *)", + "fontSize": 14, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "EventBridge Scheduler\nStart — 7 AM Mon–Fri\ncron(0 12 ? * MON-FRI *)", + "lineHeight": 1.25, + "index": "a3", + "autoResize": true + }, + { + "id": "lambda", + "type": "rectangle", + "x": 205.00710635565156, + "y": 179.77970297480005, + "width": 240, + "height": 100, + "angle": 0, + "strokeColor": "#ea580c", + "backgroundColor": "#fed7aa", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 105, + "version": 29, + "versionNonce": 532985949, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "lambda-t" + }, + { + "id": "arrow-eb-stop-lambda", + "type": "arrow" + }, + { + "id": "arrow-lambda-ec2ems", + "type": "arrow" + }, + { + "id": "arrow-eb-start-lambda", + "type": "arrow" + }, + { + "id": "arrow-lambda-ec2tinyurl", + "type": "arrow" + }, + { + "id": "arrow-lambda-iam", + "type": "arrow" + }, + { + "id": "arrow-lambda-rds", + "type": "arrow" + } + ], + "updated": 1777090156748, + "link": null, + "locked": false, + "index": "a4" + }, + { + "id": "lambda-t", + "type": "text", + "x": 213.7467380084836, + "y": 189.15470297480005, + "width": 222.52073669433594, + "height": 81.25, + "angle": 0, + "strokeColor": "#7c2d12", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 106, + "version": 12, + "versionNonce": 1217099187, + "isDeleted": false, + "boundElements": [], + "containerId": "lambda", + "updated": 1777090156751, + "link": null, + "locked": false, + "text": "Lambda Function\nPython / boto3\nstop_instances / start_instances\nstop_db_instance /\nstart_db_instance", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "Lambda Function\nPython / boto3\nstop_instances / start_instances\nstop_db_instance / start_db_instance", + "lineHeight": 1.25, + "index": "a5", + "autoResize": true + }, + { + "id": "iam", + "type": "rectangle", + "x": 498.0789992507705, + "y": 171.71647894007057, + "width": 240, + "height": 100.23918180687508, + "angle": 0, + "strokeColor": "#dc2626", + "backgroundColor": "#fecaca", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 107, + "version": 126, + "versionNonce": 1884697341, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "iam-t" + }, + { + "id": "arrow-lambda-iam", + "type": "arrow" + } + ], + "updated": 1777090156751, + "link": null, + "locked": false, + "index": "a6" + }, + { + "id": "iam-t", + "type": "text", + "x": 560.2095763381728, + "y": 189.3360698435081, + "width": 115.73884582519531, + "height": 65, + "angle": 0, + "strokeColor": "#7f1d1d", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 108, + "version": 127, + "versionNonce": 1750721779, + "isDeleted": false, + "boundElements": [], + "containerId": "iam", + "updated": 1777090156752, + "link": null, + "locked": false, + "text": "IAM Role\nLeast-privilege\nScoped to specific\ninstance ARNs", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "IAM Role\nLeast-privilege\nScoped to specific\ninstance ARNs", + "lineHeight": 1.25, + "index": "a7", + "autoResize": true + }, + { + "id": "ec2-ems", + "type": "rectangle", + "x": 95.6015954260049, + "y": 322.30010428837204, + "width": 126.80416244779144, + "height": 80, + "angle": 0, + "strokeColor": "#16a34a", + "backgroundColor": "#bbf7d0", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 109, + "version": 610, + "versionNonce": 1314478013, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "ec2-ems-t" + }, + { + "id": "arrow-lambda-ec2ems", + "type": "arrow" + } + ], + "updated": 1777090156752, + "link": null, + "locked": false, + "index": "a8" + }, + { + "id": "ec2-ems-t", + "type": "text", + "x": 114.589217421385, + "y": 337.92510428837204, + "width": 88.82891845703125, + "height": 48.75, + "angle": 0, + "strokeColor": "#14532d", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 110, + "version": 601, + "versionNonce": 1212515379, + "isDeleted": false, + "boundElements": [], + "containerId": "ec2-ems", + "updated": 1777090156752, + "link": null, + "locked": false, + "text": "EC2 Instance\nems-prod-app\nt2.micro", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "EC2 Instance\nems-prod-app\nt2.micro", + "lineHeight": 1.25, + "index": "a9", + "autoResize": true + }, + { + "id": "ec2-tinyurl", + "type": "rectangle", + "x": 268.14508011751025, + "y": 321.93606882590683, + "width": 114.33911648841922, + "height": 80, + "angle": 0, + "strokeColor": "#16a34a", + "backgroundColor": "#bbf7d0", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 111, + "version": 654, + "versionNonce": 1810517117, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "ec2-tinyurl-t" + }, + { + "id": "arrow-lambda-ec2tinyurl", + "type": "arrow" + } + ], + "updated": 1777090156752, + "link": null, + "locked": false, + "index": "aA" + }, + { + "id": "ec2-tinyurl-t", + "type": "text", + "x": 280.90017913320423, + "y": 337.56106882590683, + "width": 88.82891845703125, + "height": 48.75, + "angle": 0, + "strokeColor": "#14532d", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 112, + "version": 649, + "versionNonce": 113398643, + "isDeleted": false, + "boundElements": [], + "containerId": "ec2-tinyurl", + "updated": 1777090156753, + "link": null, + "locked": false, + "text": "EC2 Instance\ntinyurl-prod\nt3.micro", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "EC2 Instance\ntinyurl-prod\nt3.micro", + "lineHeight": 1.25, + "index": "aB", + "autoResize": true + }, + { + "id": "rds", + "type": "rectangle", + "x": 432.8104644374662, + "y": 320.66159109468305, + "width": 128.6567497576932, + "height": 80, + "angle": 0, + "strokeColor": "#0284c7", + "backgroundColor": "#bae6fd", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 113, + "version": 571, + "versionNonce": 2077561149, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "rds-t" + }, + { + "id": "arrow-lambda-rds", + "type": "arrow" + } + ], + "updated": 1777090156753, + "link": null, + "locked": false, + "index": "aC" + }, + { + "id": "rds-t", + "type": "text", + "x": 443.3253932713909, + "y": 336.28659109468305, + "width": 107.62689208984375, + "height": 48.75, + "angle": 0, + "strokeColor": "#0c4a6e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 114, + "version": 568, + "versionNonce": 893670067, + "isDeleted": false, + "boundElements": [], + "containerId": "rds", + "updated": 1777090156753, + "link": null, + "locked": false, + "text": "RDS PostgreSQL\ntinyurl-prod\ndb.t4g.micro", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "RDS PostgreSQL\ntinyurl-prod\ndb.t4g.micro", + "lineHeight": 1.25, + "index": "aD", + "autoResize": true + }, + { + "id": "cw-logs", + "type": "rectangle", + "x": 786.9700048940803, + "y": 223.34318203526698, + "width": 134.87677588279962, + "height": 80.09384475974616, + "angle": 0, + "strokeColor": "#2563eb", + "backgroundColor": "#bfdbfe", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 115, + "version": 1078, + "versionNonce": 1004266579, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "cw-logs-t" + }, + { + "id": "gISw8QyTtviZvSXZnXi_U", + "type": "arrow" + } + ], + "updated": 1777090092412, + "link": null, + "locked": false, + "index": "aE" + }, + { + "id": "cw-logs-t", + "type": "text", + "x": 800.1594456919253, + "y": 230.89010441514006, + "width": 108.49789428710938, + "height": 65, + "angle": 0, + "strokeColor": "#1e3a8a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 116, + "version": 1069, + "versionNonce": 639754739, + "isDeleted": false, + "boundElements": [], + "containerId": "cw-logs", + "updated": 1777090092412, + "link": null, + "locked": false, + "text": "CloudWatch Logs\nFull execution\nhistory\n30-day retention", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "CloudWatch Logs\nFull execution history\n30-day retention", + "lineHeight": 1.25, + "index": "aF", + "autoResize": true + }, + { + "id": "cw-alarm", + "type": "rectangle", + "x": 951.0631712777617, + "y": 238.42462258218802, + "width": 200.3190560721608, + "height": 80, + "angle": 0, + "strokeColor": "#059669", + "backgroundColor": "#a7f3d0", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 119, + "version": 1427, + "versionNonce": 1035625277, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "cw-alarm-t" + }, + { + "id": "B3P9vgExjEeGVuApy8QZj", + "type": "arrow" + }, + { + "id": "arrow-dlq-alarm", + "type": "arrow" + } + ], + "updated": 1777090166962, + "link": null, + "locked": false, + "index": "aI" + }, + { + "id": "cw-alarm-t", + "type": "text", + "x": 991.0977527196039, + "y": 254.04962258218802, + "width": 120.24989318847656, + "height": 48.75, + "angle": 0, + "strokeColor": "#064e3b", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 120, + "version": 1418, + "versionNonce": 375714717, + "isDeleted": false, + "boundElements": [], + "containerId": "cw-alarm", + "updated": 1777090166962, + "link": null, + "locked": false, + "text": "CloudWatch Alarm\nLambda errors > 0\n5-minute window", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "CloudWatch Alarm\nLambda errors > 0\n5-minute window", + "lineHeight": 1.25, + "index": "aJ", + "autoResize": true + }, + { + "id": "sns", + "type": "rectangle", + "x": 952.429381211985, + "y": 363.9233979880932, + "width": 199.12811251012567, + "height": 80, + "angle": 0, + "strokeColor": "#db2777", + "backgroundColor": "#fbcfe8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 121, + "version": 1566, + "versionNonce": 311712957, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "sns-t" + }, + { + "id": "B3P9vgExjEeGVuApy8QZj", + "type": "arrow" + }, + { + "id": "arrow-sns-email", + "type": "arrow" + } + ], + "updated": 1777090166963, + "link": null, + "locked": false, + "index": "aK" + }, + { + "id": "sns-t", + "type": "text", + "x": 982.2095095495672, + "y": 379.5483979880932, + "width": 139.56785583496094, + "height": 48.75, + "angle": 0, + "strokeColor": "#831843", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 122, + "version": 1559, + "versionNonce": 12827933, + "isDeleted": false, + "boundElements": [], + "containerId": "sns", + "updated": 1777090166963, + "link": null, + "locked": false, + "text": "SNS Topic\nAlert channel\nEmail / Slack webhook", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "SNS Topic\nAlert channel\nEmail / Slack webhook", + "lineHeight": 1.25, + "index": "aL", + "autoResize": true + }, + { + "id": "email", + "type": "rectangle", + "x": 947.0692079768228, + "y": 495.0473088804778, + "width": 204.79791564112764, + "height": 70, + "angle": 0, + "strokeColor": "#4b5563", + "backgroundColor": "#e5e7eb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": { + "type": 3 + }, + "groupIds": [], + "frameId": null, + "seed": 123, + "version": 1511, + "versionNonce": 736466493, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "email-t" + }, + { + "id": "arrow-sns-email", + "type": "arrow" + } + ], + "updated": 1777090166963, + "link": null, + "locked": false, + "index": "aM" + }, + { + "id": "email-t", + "type": "text", + "x": 957.2202943984607, + "y": 513.7973088804778, + "width": 184.49574279785156, + "height": 32.5, + "angle": 0, + "strokeColor": "#111827", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 124, + "version": 1510, + "versionNonce": 514967197, + "isDeleted": false, + "boundElements": [], + "containerId": "email", + "updated": 1777090166963, + "link": null, + "locked": false, + "text": "Email Alert\nScheduler failure notification", + "fontSize": 13, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "originalText": "Email Alert\nScheduler failure notification", + "lineHeight": 1.25, + "index": "aN", + "autoResize": true + }, + { + "id": "arrow-eb-stop-lambda", + "type": "arrow", + "x": 223.4609186681424, + "y": 117.66681160825834, + "width": 56.44333239715675, + "height": 58.18662119296411, + "angle": 0, + "strokeColor": "#7c3aed", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 201, + "version": 685, + "versionNonce": 1843766781, + "isDeleted": false, + "boundElements": [], + "updated": 1777090156753, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 28.89349012854666 + ], + [ + 56.44333239715675, + 28.89349012854666 + ], + [ + 56.44333239715675, + 58.18662119296411 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "eb-stop", + "fixedPoint": [ + 0.6070466446571455, + 1.0540738888681045 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "lambda", + "fixedPoint": [ + 0.3120714362901983, + -0.03926270173577592 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "index": "aO", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "arrow-eb-start-lambda", + "type": "arrow", + "x": 436.5851044893495, + "y": 116.7147211194524, + "width": 72.1531195842, + "height": 59.025699977247854, + "angle": 0, + "strokeColor": "#7c3aed", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 202, + "version": 403, + "versionNonce": 153977939, + "isDeleted": false, + "boundElements": [], + "updated": 1777090156753, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 29.192690284338653 + ], + [ + -72.1531195842, + 29.192690284338653 + ], + [ + -72.1531195842, + 59.025699977247854 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "eb-start", + "fixedPoint": [ + 0.42994110043452927, + 1.0584950160833784 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "lambda", + "fixedPoint": [ + 0.6642703272895747, + -0.040392818780997854 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "index": "aP", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "arrow-lambda-ec2ems", + "type": "arrow", + "x": 259.4690417343513, + "y": 282.9290849507515, + "width": 127.05558912727855, + "height": 35.08433261696791, + "angle": 0, + "strokeColor": "#16a34a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 203, + "version": 885, + "versionNonce": 228187741, + "isDeleted": false, + "boundElements": [], + "updated": 1777090156753, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 11.287930251280102 + ], + [ + -127.05558912727855, + 11.287930251280102 + ], + [ + -127.05558912727855, + 35.08433261696791 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "lambda", + "fixedPoint": [ + 0.22692473074458236, + 1.0314938197595143 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "ec2-ems", + "fixedPoint": [ + 0.2903048012814584, + -0.05358358400815817 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "index": "aQ", + "elbowed": true, + "fixedSegments": [ + { + "index": 2, + "start": [ + 0, + 11.287930251280102 + ], + "end": [ + -127.05558912727855, + 11.287930251280102 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": false + }, + { + "id": "arrow-lambda-ec2tinyurl", + "type": "arrow", + "x": 324.90710635565154, + "y": 284.77970297480005, + "width": 0.3075320060682998, + "height": 32.156365851106784, + "angle": 0, + "strokeColor": "#16a34a", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 204, + "version": 1037, + "versionNonce": 406815219, + "isDeleted": false, + "boundElements": [], + "updated": 1777090156753, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0.3075320060682998, + 32.156365851106784 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "lambda", + "fixedPoint": [ + 0.4995833333333332, + 1.05 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "ec2-tinyurl", + "fixedPoint": [ + 0.4991254086696557, + -0.0625 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "index": "aR", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "arrow-lambda-rds", + "type": "arrow", + "x": 389.0391566445468, + "y": 282.97477349263994, + "width": 116.07282155163557, + "height": 32.763756291454285, + "angle": 0, + "strokeColor": "#0284c7", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 205, + "version": 744, + "versionNonce": 786959037, + "isDeleted": false, + "boundElements": [], + "updated": 1777090156753, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 15.158019856357953 + ], + [ + 116.07282155163557, + 15.158019856357953 + ], + [ + 116.07282155163557, + 32.763756291454285 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "lambda", + "focus": 0.171903875150052, + "gap": 1, + "fixedPoint": [ + 0.766800209537063, + 1.0319507051783985 + ] + }, + "endBinding": { + "elementId": "rds", + "fixedPoint": [ + 0.5619721770904819, + -0.06153826638236026 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "index": "aS", + "elbowed": true, + "fixedSegments": [ + { + "index": 2, + "start": [ + 0, + 15.158019856357953 + ], + "end": [ + 116.07282155163557, + 15.158019856357953 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": false + }, + { + "id": "arrow-dlq-alarm", + "type": "arrow", + "x": 1134.5639491452682, + "y": 151.08669521218727, + "width": 150.87963997272823, + "height": 83.39824799943906, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 208, + "version": 3806, + "versionNonce": 1961390173, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "XohlLLkCprrVSNZlolUaN" + } + ], + "updated": 1777090166963, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -81.5198748794337, + 0 + ], + [ + -81.5198748794337, + 53.30910079344258 + ], + [ + -150.87963997272823, + 53.30910079344258 + ], + [ + -150.87963997272823, + 83.39824799943906 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "-egso4hRYhx2q8JXxgDIv", + "fixedPoint": [ + -0.029859386566317828, + 0.4989478844065027 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "cw-alarm", + "fixedPoint": [ + 0.16284590460044485, + -0.049245992132021146 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "index": "aV", + "elbowed": true, + "fixedSegments": [ + { + "index": 2, + "start": [ + -81.5198748794337, + 0 + ], + "end": [ + -81.5198748794337, + 53.30910079344258 + ] + }, + { + "index": 3, + "start": [ + -81.5198748794337, + 53.30910079344258 + ], + "end": [ + -150.87963997272823, + 53.30910079344258 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": false + }, + { + "id": "XohlLLkCprrVSNZlolUaN", + "type": "text", + "x": 658.1502765512571, + "y": 665.5734038418145, + "width": 107.05589294433594, + "height": 40, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aVO", + "roundness": null, + "seed": 1418495507, + "version": 31, + "versionNonce": 2049525309, + "isDeleted": false, + "boundElements": null, + "updated": 1777089626738, + "link": null, + "locked": false, + "text": "Lambda error \nmetric", + "fontSize": 16, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "arrow-dlq-alarm", + "originalText": "Lambda error \nmetric", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "B3P9vgExjEeGVuApy8QZj", + "type": "arrow", + "x": 1129.3854803168672, + "y": 321.55582969282483, + "width": 142.7131893216697, + "height": 38.64828087524643, + "angle": 0, + "strokeColor": "#c2255c", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 421514276, + "version": 4969, + "versionNonce": 244256797, + "isDeleted": false, + "boundElements": [], + "updated": 1777090167401, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 17.999552639362264 + ], + [ + -142.7131893216697, + 17.999552639362264 + ], + [ + -142.7131893216697, + 38.64828087524643 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "cw-alarm", + "fixedPoint": [ + 0.890191440273503, + 1.0391400888829607 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "sns", + "fixedPoint": [ + 0.17196421615994226, + -0.04649109275027428 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "index": "aVl", + "elbowed": true, + "fixedSegments": [ + { + "index": 2, + "start": [ + 0, + 17.999552639362264 + ], + "end": [ + -142.7131893216697, + 17.999552639362264 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": false + }, + { + "id": "arrow-sns-email", + "type": "arrow", + "x": 1117.9807843399715, + "y": 446.6405255890901, + "width": 134.1567003240034, + "height": 45.61549195771727, + "angle": 0, + "strokeColor": "#4b5563", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 210, + "version": 4736, + "versionNonce": 1171326077, + "isDeleted": false, + "boundElements": [], + "updated": 1777090167402, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 20.14179376467996 + ], + [ + -134.1567003240034, + 20.14179376467996 + ], + [ + -134.1567003240034, + 45.61549195771727 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "sns", + "fixedPoint": [ + 0.8313813707221688, + 1.0339640950124618 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "email", + "fixedPoint": [ + 0.17946899471160518, + -0.03987559048100593 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "index": "aX", + "elbowed": true, + "fixedSegments": [ + { + "index": 2, + "start": [ + 0, + 20.14179376467996 + ], + "end": [ + -134.1567003240034, + 20.14179376467996 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": false + }, + { + "id": "arrow-lambda-iam", + "type": "arrow", + "x": 449.9560217085917, + "y": 247.77899948666914, + "width": 43.22087344086026, + "height": 51.02903359193152, + "angle": 0, + "strokeColor": "#dc2626", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 0, + "opacity": 100, + "roundness": null, + "groupIds": [], + "frameId": null, + "seed": 211, + "version": 222, + "versionNonce": 461425555, + "isDeleted": false, + "boundElements": [], + "updated": 1777090156753, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 21.587031094619306, + 0 + ], + [ + 21.587031094619306, + -51.02903359193152 + ], + [ + 43.22087344086026, + -51.02903359193152 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "lambda", + "fixedPoint": [ + 1.0206204806372507, + 0.6799929651186909 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "iam", + "fixedPoint": [ + -0.02042543375549381, + 0.24973754277940519 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "index": "aY", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "h1m_RV498yMoqOf4Ff5O7", + "type": "rectangle", + "x": 923.2398154270375, + "y": 27.82758507560237, + "width": 194.39323724617003, + "height": 65.50335463683223, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ai", + "roundness": { + "type": 3 + }, + "seed": 2145051165, + "version": 632, + "versionNonce": 80809437, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "xc_N7Hc9mAD4It6adMwtU" + }, + { + "id": "5wHYcPQUcNs3ZKkcJPLgL", + "type": "arrow" + }, + { + "id": "gISw8QyTtviZvSXZnXi_U", + "type": "arrow" + } + ], + "updated": 1777090146029, + "link": null, + "locked": false + }, + { + "id": "xc_N7Hc9mAD4It6adMwtU", + "type": "text", + "x": 955.2064764695563, + "y": 48.079262394018485, + "width": 130.4599151611328, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aj", + "roundness": null, + "seed": 346877373, + "version": 579, + "versionNonce": 646793789, + "isDeleted": false, + "boundElements": null, + "updated": 1777090146029, + "link": null, + "locked": false, + "text": "On any result", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "h1m_RV498yMoqOf4Ff5O7", + "originalText": "On any result", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "gISw8QyTtviZvSXZnXi_U", + "type": "arrow", + "x": 918.2398154270375, + "y": 60.47926239401849, + "width": 63.93142259155741, + "height": 157.85805434376434, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ak", + "roundness": null, + "seed": 1970273939, + "version": 2307, + "versionNonce": 1889771261, + "isDeleted": false, + "boundElements": null, + "updated": 1777090146029, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -63.93142259155741, + 0 + ], + [ + -63.93142259155741, + 157.85805434376434 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "h1m_RV498yMoqOf4Ff5O7", + "fixedPoint": [ + -0.02572105938885233, + 0.4984733606308498 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "cw-logs", + "fixedPoint": [ + 0.499258582514703, + -0.0625 + ], + "focus": 0, + "gap": 1 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "5wHYcPQUcNs3ZKkcJPLgL", + "type": "arrow", + "x": 1122.6330526732074, + "y": 60.47926239401849, + "width": 100.55666205158764, + "height": 38.18413755572382, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "al", + "roundness": null, + "seed": 1987311635, + "version": 1868, + "versionNonce": 1380121245, + "isDeleted": false, + "boundElements": [], + "updated": 1777090146029, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 100.55666205158764, + 0 + ], + [ + 100.55666205158764, + 38.18413755572382 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "h1m_RV498yMoqOf4Ff5O7", + "fixedPoint": [ + 1.025721059388852, + 0.4984733606308498 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "-egso4hRYhx2q8JXxgDIv", + "fixedPoint": [ + 0.4994028122686735, + -0.05260577967487059 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "-egso4hRYhx2q8JXxgDIv", + "type": "rectangle", + "x": 1139.5639491452682, + "y": 103.66339994974231, + "width": 167.45153115905373, + "height": 95.0465905248899, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "an", + "roundness": { + "type": 3 + }, + "seed": 1174123357, + "version": 812, + "versionNonce": 1708074643, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "jZuPfI77pN44VjlvBTQr8" + }, + { + "id": "arrow-dlq-alarm", + "type": "arrow" + }, + { + "id": "5wHYcPQUcNs3ZKkcJPLgL", + "type": "arrow" + }, + { + "id": "CVHj9v8VtWANiyBHn_Urk", + "type": "arrow" + } + ], + "updated": 1777090242283, + "link": null, + "locked": false + }, + { + "id": "jZuPfI77pN44VjlvBTQr8", + "type": "text", + "x": 1155.9297522614163, + "y": 121.18669521218726, + "width": 134.7199249267578, + "height": 60, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "anV", + "roundness": null, + "seed": 561141213, + "version": 756, + "versionNonce": 1630408061, + "isDeleted": false, + "boundElements": null, + "updated": 1777090123022, + "link": null, + "locked": false, + "text": "On Lambda error\n(two independent\npaths)", + "fontSize": 16, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "-egso4hRYhx2q8JXxgDIv", + "originalText": "On Lambda error (two independent paths)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "1-mzzbWdMRAwwRU9upZjc", + "type": "rectangle", + "x": 1219.7906702073822, + "y": 339.7224791650915, + "width": 229.6361732567325, + "height": 70, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "au", + "roundness": { + "type": 3 + }, + "seed": 996090045, + "version": 1319, + "versionNonce": 1833885139, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "a1zbBBZcAg7O71nef8hXN" + }, + { + "id": "CVHj9v8VtWANiyBHn_Urk", + "type": "arrow" + } + ], + "updated": 1777090242284, + "link": null, + "locked": false + }, + { + "id": "a1zbBBZcAg7O71nef8hXN", + "type": "text", + "x": 1228.688857848932, + "y": 344.7224791650915, + "width": 211.8397979736328, + "height": 60, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "auV", + "roundness": null, + "seed": 902951741, + "version": 1188, + "versionNonce": 694679261, + "isDeleted": false, + "boundElements": null, + "updated": 1777090205529, + "link": null, + "locked": false, + "text": "SQS Dead Letter Queue\nCaptures failed invocations\n4-day retention", + "fontSize": 16, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "1-mzzbWdMRAwwRU9upZjc", + "originalText": "SQS Dead Letter Queue\nCaptures failed invocations\n4-day retention", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "qgzkIVtCI_ajbAcSZIc18", + "type": "line", + "x": 762.528234871007, + "y": -11.936061159278069, + "width": 1.139061588750792, + "height": 551.8120585503532, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aw", + "roundness": { + "type": 2 + }, + "seed": 1528161341, + "version": 74, + "versionNonce": 360731603, + "isDeleted": false, + "boundElements": null, + "updated": 1777090108412, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 1.139061588750792, + 551.8120585503532 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "CVHj9v8VtWANiyBHn_Urk", + "type": "arrow", + "x": 1223.189714724795, + "y": 203.7099904746322, + "width": 130.69131831753475, + "height": 131.51896678145312, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ax", + "roundness": null, + "seed": 1282873245, + "version": 89, + "versionNonce": 1221642355, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "cF04TXT3Nu2KUoYmnp7c0" + } + ], + "updated": 1777090248172, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 65.50624434522962 + ], + [ + 130.69131831753475, + 65.50624434522962 + ], + [ + 130.69131831753475, + 131.51896678145312 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "-egso4hRYhx2q8JXxgDIv", + "fixedPoint": [ + 0.4994028122686735, + 1.0526057796748707 + ], + "focus": 0, + "gap": 0 + }, + "endBinding": { + "elementId": "1-mzzbWdMRAwwRU9upZjc", + "fixedPoint": [ + 0.5839252628767466, + -0.06419317012865966 + ], + "focus": 0, + "gap": 0 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "cF04TXT3Nu2KUoYmnp7c0", + "type": "text", + "x": 1256.143406110125, + "y": 239.21623481986182, + "width": 64.783935546875, + "height": 60, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ay", + "roundness": null, + "seed": 671469053, + "version": 4, + "versionNonce": 494167933, + "isDeleted": false, + "boundElements": null, + "updated": 1777090247805, + "link": null, + "locked": false, + "text": "Failed \nevent \npayload ", + "fontSize": 16, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "CVHj9v8VtWANiyBHn_Urk", + "originalText": "Failed \nevent \npayload ", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "YGFWGHs2y0sQCbwRQ16-F", + "type": "text", + "x": 218.93419755641747, + "y": -65.03040179334891, + "width": 275.51983642578125, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "az", + "roundness": null, + "seed": 1970542931, + "version": 83, + "versionNonce": 1543869523, + "isDeleted": false, + "boundElements": null, + "updated": 1777090376834, + "link": null, + "locked": false, + "text": "Trigger & Execution", + "fontSize": 28, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Trigger & Execution", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "gvqriNEpFUpTAVOVdKsGp", + "type": "text", + "x": 896.4125639346967, + "y": -63.140863082546076, + "width": 322.3358154296875, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b00", + "roundness": null, + "seed": 1385743827, + "version": 80, + "versionNonce": 2095863421, + "isDeleted": false, + "boundElements": null, + "updated": 1777090373591, + "link": null, + "locked": false, + "text": "Observability & Alerting", + "fontSize": 28, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Observability & Alerting", + "autoResize": true, + "lineHeight": 1.25 + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#f8fafc" + }, + "files": {} +} \ No newline at end of file