EventSources { # Event Sources n1: rectangle label:"S3 Bucket Upload" n2: rectangle label:"DynamoDB Stream" n3: rectangle label:"API Gateway Webhook" n4: rectangle label:"CloudWatch Scheduled Rule" n24: rectangle label:"Receive Processing Acks" n1.handle(bottom) -> Triggers.n5.handle(top) [label="ObjectCreated"] n2.handle(bottom) -> Triggers.n6.handle(top) [label="StreamRecord"] n3.handle(bottom) -> Triggers.n7.handle(top) [label="POST Event"] n4.handle(bottom) -> Triggers.n8.handle(top) [label="Cron"] } Triggers { # Lambda Triggers n5: rectangle label:"Image Processing Lambda" n6: rectangle label:"Data Sync Lambda" n7: rectangle label:"Webhook Handler Lambda" n8: rectangle label:"Batch Job Lambda" n20: rectangle label:"Receive Processing Ack" n21: rectangle label:"Aggregate Trigger Results" n22: rectangle label:"Prepare Source Ack" n23: rectangle label:"Send Source Ack" n5.handle(bottom) -> Processing.n9.handle(top) [label="Process Image"] n6.handle(bottom) -> Processing.n11.handle(top) [label="Sync Data"] n7.handle(bottom) -> Processing.n9.handle(top) [label="Handle Event"] n8.handle(bottom) -> Processing.n12.handle(top) [label="Run Batch"] n20.handle(right) -> n21.handle(left) n21.handle(right) -> n22.handle(left) n22.handle(right) -> n23.handle(left) n23.handle(top) -> EventSources.n24.handle(bottom) [label="Triggers Ack"] } Processing { # Processing Pipeline n9: rectangle label:"Step Functions Orchestrator" n10: diamond label:"Processing Complete?" n11: rectangle label:"Fan-Out with SQS" n12: rectangle label:"Transform and Load" n13: rectangle label:"Error Handler Lambda" n18: rectangle label:"Receive Storage Ack" n19: rectangle label:"Send Processing Ack" n9.handle(right) -> n10.handle(left) n10.handle(right) -> n11.handle(left) [label="Success"] n10.handle(bottom) -> n13.handle(top) [label="Failure"] n11.handle(right) -> n12.handle(left) [label="Parallel"] n13.handle(bottom) -> Storage.n17.handle(top) [label="DLQ"] n12.handle(bottom) -> Storage.n14.handle(top) [label="Store"] n18.handle(right) -> n19.handle(left) n19.handle(top) -> Triggers.n20.handle(bottom) [label="Processing Ack"] } Storage { # Managed Storage n14: rectangle label:"DynamoDB Table" n15: rectangle label:"S3 Results Bucket" n16: rectangle label:"SNS Notification Topic" n17: rectangle label:"Return Storage Ack" n14.handle(right) -> n15.handle(left) [label="Archive"] n15.handle(right) -> n16.handle(left) [label="Notify"] n16.handle(right) -> n17.handle(left) n17.handle(top) -> Processing.n18.handle(bottom) [label="Storage Ack"] }