File size: 2,547 Bytes
cbd4d19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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"]
}