diagram-contracts 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -5
- package/assets/readme/components/aws.draw.tsx +133 -0
- package/assets/readme/showcase-tsx.draw.tsx +137 -0
- package/assets/readme/showcase-tsx.svg +20 -0
- package/assets/readme/system-architecture.draw.tsx +77 -0
- package/assets/readme/system-architecture.svg +33 -0
- package/assets/readme/system-parts.draw.tsx +125 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -10,19 +10,25 @@ AI can safely describe diagrams, layouts, and relationship structures; the engin
|
|
|
10
10
|
|
|
11
11
|
### AWS System Architecture (Draw TSX → SVG)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
[](assets/readme/system-architecture.draw.tsx)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Source:
|
|
16
|
+
|
|
17
|
+
- [`assets/readme/system-architecture.draw.tsx`](assets/readme/system-architecture.draw.tsx) — entry diagram
|
|
18
|
+
- [`assets/readme/system-parts.draw.tsx`](assets/readme/system-parts.draw.tsx) — VPC and service part components
|
|
19
|
+
- [`assets/readme/components/aws.draw.tsx`](assets/readme/components/aws.draw.tsx) — reusable AWS primitives (`AwsVpc`, `AwsService`, `AwsAccount`, …)
|
|
16
20
|
|
|
17
21
|
### ER Diagram (Draw TSX → SVG)
|
|
18
22
|
|
|
19
|
-
](assets/readme/showcase-tsx.draw.tsx)
|
|
24
|
+
|
|
25
|
+
Source: [`assets/readme/showcase-tsx.draw.tsx`](assets/readme/showcase-tsx.draw.tsx)
|
|
20
26
|
|
|
21
27
|
Regenerate:
|
|
22
28
|
|
|
23
29
|
```bash
|
|
24
|
-
diagram-contracts render
|
|
25
|
-
diagram-contracts render
|
|
30
|
+
diagram-contracts render assets/readme/system-architecture.draw.tsx -o assets/readme/system-architecture.svg
|
|
31
|
+
diagram-contracts render assets/readme/showcase-tsx.draw.tsx -o assets/readme/showcase-tsx.svg
|
|
26
32
|
```
|
|
27
33
|
|
|
28
34
|
## Input Formats
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
export function AwsService({ id, service, label }: { id: string; service: string; label: string }) {
|
|
2
|
+
return (
|
|
3
|
+
<VStack id={id} gap={4} align="center" geometry={{ align: `${id}-icon`, connect: `${id}-icon` }}>
|
|
4
|
+
<Icon id={`${id}-icon`} name={`aws:${service}`} width={48} height={48} />
|
|
5
|
+
<Text fontSize={11}>{label}</Text>
|
|
6
|
+
</VStack>
|
|
7
|
+
);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function AwsServiceH({ id, service, label }: { id: string; service: string; label: string }) {
|
|
11
|
+
return (
|
|
12
|
+
<HStack id={id} gap={8} align="center" geometry={{ align: `${id}-icon`, connect: `${id}-icon` }}>
|
|
13
|
+
<Icon id={`${id}-icon`} name={`aws:${service}`} width={40} height={40} />
|
|
14
|
+
<Text fontSize={11}>{label}</Text>
|
|
15
|
+
</HStack>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function AwsServiceSm({ id, service, label }: { id: string; service: string; label: string }) {
|
|
20
|
+
return (
|
|
21
|
+
<VStack id={id} gap={2} align="center" geometry={{ align: `${id}-icon`, connect: `${id}-icon` }}>
|
|
22
|
+
<Icon id={`${id}-icon`} name={`aws:${service}`} width={36} height={36} />
|
|
23
|
+
<Text fontSize={9}>{label}</Text>
|
|
24
|
+
</VStack>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function AwsVpc({ label, children }: { label: string }) {
|
|
29
|
+
return (
|
|
30
|
+
<Box shape="rect" padding={0} stroke="#8c4fff" strokeWidth={2} fill="white">
|
|
31
|
+
<VStack gap={0}>
|
|
32
|
+
<Box shape="rect" fill="#8c4fff" stroke="#8c4fff" strokeWidth={0} padding={8}>
|
|
33
|
+
<HStack gap={6} align="center">
|
|
34
|
+
<Icon name="aws:vpc-group" width={18} height={18} />
|
|
35
|
+
<Text fontWeight="bold" fontSize={12} foreground="white">{label}</Text>
|
|
36
|
+
</HStack>
|
|
37
|
+
</Box>
|
|
38
|
+
{children}
|
|
39
|
+
</VStack>
|
|
40
|
+
</Box>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function AwsPublicSubnet({ label, children }: { label: string }) {
|
|
45
|
+
return (
|
|
46
|
+
<Box shape="rect" padding={0} stroke="#7aa116" strokeWidth={1} strokeStyle="dashed" fill="white">
|
|
47
|
+
<VStack gap={0}>
|
|
48
|
+
<Box shape="rect" fill="#7aa116" stroke="#7aa116" strokeWidth={0} padding={6}>
|
|
49
|
+
<HStack gap={4} align="center">
|
|
50
|
+
<Icon name="aws:subnet-public" width={14} height={14} />
|
|
51
|
+
<Text fontSize={10} foreground="white" fontWeight="bold">{label}</Text>
|
|
52
|
+
</HStack>
|
|
53
|
+
</Box>
|
|
54
|
+
{children}
|
|
55
|
+
</VStack>
|
|
56
|
+
</Box>
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function AwsPrivateSubnet({ label, children }: { label: string }) {
|
|
61
|
+
return (
|
|
62
|
+
<Box shape="rect" padding={0} stroke="#00a4a6" strokeWidth={1} strokeStyle="dashed" fill="white">
|
|
63
|
+
<VStack gap={0}>
|
|
64
|
+
<Box shape="rect" fill="#00a4a6" stroke="#00a4a6" strokeWidth={0} padding={6}>
|
|
65
|
+
<HStack gap={4} align="center">
|
|
66
|
+
<Icon name="aws:subnet-private" width={14} height={14} />
|
|
67
|
+
<Text fontSize={10} foreground="white" fontWeight="bold">{label}</Text>
|
|
68
|
+
</HStack>
|
|
69
|
+
</Box>
|
|
70
|
+
{children}
|
|
71
|
+
</VStack>
|
|
72
|
+
</Box>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function AwsAutoScaling({ id, label, geometry, children }: { id: string; label: string; geometry?: Record<string, string> }) {
|
|
77
|
+
return (
|
|
78
|
+
<Box id={id} shape="rect" padding={0} stroke="#ed7100" strokeWidth={1} strokeStyle="dashed" fill="white" geometry={geometry}>
|
|
79
|
+
<VStack gap={0}>
|
|
80
|
+
<Box shape="rect" fill="#ed7100" stroke="#ed7100" strokeWidth={0} padding={6}>
|
|
81
|
+
<HStack gap={4} align="center">
|
|
82
|
+
<Icon name="aws:auto-scaling-group" width={14} height={14} />
|
|
83
|
+
<Text fontSize={10} foreground="white" fontWeight="bold">{label}</Text>
|
|
84
|
+
</HStack>
|
|
85
|
+
</Box>
|
|
86
|
+
{children}
|
|
87
|
+
</VStack>
|
|
88
|
+
</Box>
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function AwsAccount({ label, children }: { label: string }) {
|
|
93
|
+
return (
|
|
94
|
+
<Box shape="rect" padding={0} stroke="#e7157b" strokeWidth={2} fill="white">
|
|
95
|
+
<VStack gap={0}>
|
|
96
|
+
<Box shape="rect" fill="#e7157b" stroke="#e7157b" strokeWidth={0} padding={8}>
|
|
97
|
+
<HStack gap={6} align="center">
|
|
98
|
+
<Icon name="aws:aws-account" width={16} height={16} />
|
|
99
|
+
<Text fontWeight="bold" fontSize={12} foreground="white">{label}</Text>
|
|
100
|
+
</HStack>
|
|
101
|
+
</Box>
|
|
102
|
+
{children}
|
|
103
|
+
</VStack>
|
|
104
|
+
</Box>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function AwsRegion({ label, children }: { label: string }) {
|
|
109
|
+
return (
|
|
110
|
+
<Box shape="rect" padding={0} stroke="#00a4a6" strokeWidth={1} strokeStyle="dashed" fill="white">
|
|
111
|
+
<VStack gap={0}>
|
|
112
|
+
<Box shape="rect" fill="#00a4a6" stroke="#00a4a6" strokeWidth={0} padding={6}>
|
|
113
|
+
<HStack gap={4} align="center">
|
|
114
|
+
<Icon name="aws:region-group" width={14} height={14} />
|
|
115
|
+
<Text fontSize={11} foreground="white">{label}</Text>
|
|
116
|
+
</HStack>
|
|
117
|
+
</Box>
|
|
118
|
+
{children}
|
|
119
|
+
</VStack>
|
|
120
|
+
</Box>
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export function EcsFargateCluster({ id, label }: { id: string; label: string }) {
|
|
125
|
+
return (
|
|
126
|
+
<AwsAutoScaling id={id} label={label}>
|
|
127
|
+
<HStack padding={8} gap={8} align="start">
|
|
128
|
+
<AwsServiceSm id={`${id}-ecs`} service="ecs" label="ECS" />
|
|
129
|
+
<AwsServiceSm id={`${id}-fg`} service="fargate" label="Fargate" />
|
|
130
|
+
</HStack>
|
|
131
|
+
</AwsAutoScaling>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
<Document id="doc" padding={24} background="white" fontFamily="Inter, sans-serif">
|
|
2
|
+
<VStack id="root" gap={20}>
|
|
3
|
+
<Text id="title" fontSize={18} fontWeight="bold">ER Diagram — E-Commerce</Text>
|
|
4
|
+
|
|
5
|
+
<HStack id="cols" gap={40}>
|
|
6
|
+
<VStack id="col_left" gap={32}>
|
|
7
|
+
<Table id="users">
|
|
8
|
+
<Row id="u_h" fill="#dbeafe">
|
|
9
|
+
<Cell id="u_h1" padding={6} colAlign="left"><Text fontWeight="bold" fontSize={11} foreground="#1e40af">users</Text></Cell>
|
|
10
|
+
<Cell id="u_h2" padding={6} colAlign="center"><Text fontWeight="bold" fontSize={10} foreground="#1e40af">type</Text></Cell>
|
|
11
|
+
</Row>
|
|
12
|
+
<Row id="u1"><Cell id="u1a" padding={5} colAlign="left"><Text fontSize={10} fontWeight="bold">id</Text></Cell><Cell id="u1b" padding={5} colAlign="left"><Text fontSize={10}>PK</Text></Cell></Row>
|
|
13
|
+
<Row id="u2"><Cell id="u2a" padding={5} colAlign="left"><Text fontSize={10}>name</Text></Cell><Cell id="u2b" padding={5} colAlign="left"><Text fontSize={10}>varchar</Text></Cell></Row>
|
|
14
|
+
<Row id="u3"><Cell id="u3a" padding={5} colAlign="left"><Text fontSize={10}>email</Text></Cell><Cell id="u3b" padding={5} colAlign="left"><Text fontSize={10}>varchar</Text></Cell></Row>
|
|
15
|
+
<Row id="u4"><Cell id="u4a" padding={5} colAlign="left"><Text fontSize={10}>created_at</Text></Cell><Cell id="u4b" padding={5} colAlign="left"><Text fontSize={10}>timestamp</Text></Cell></Row>
|
|
16
|
+
</Table>
|
|
17
|
+
|
|
18
|
+
<Table id="addresses">
|
|
19
|
+
<Row id="ad_h" fill="#e0e7ff">
|
|
20
|
+
<Cell id="ad_h1" padding={6} colAlign="left"><Text fontWeight="bold" fontSize={11} foreground="#3730a3">addresses</Text></Cell>
|
|
21
|
+
<Cell id="ad_h2" padding={6} colAlign="center"><Text fontWeight="bold" fontSize={10} foreground="#3730a3">type</Text></Cell>
|
|
22
|
+
</Row>
|
|
23
|
+
<Row id="ad1"><Cell id="ad1a" padding={5} colAlign="left"><Text fontSize={10} fontWeight="bold">id</Text></Cell><Cell id="ad1b" padding={5} colAlign="left"><Text fontSize={10}>PK</Text></Cell></Row>
|
|
24
|
+
<Row id="ad2"><Cell id="ad2a" padding={5} colAlign="left"><Text fontSize={10}>user_id</Text></Cell><Cell id="ad2b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
25
|
+
<Row id="ad3"><Cell id="ad3a" padding={5} colAlign="left"><Text fontSize={10}>zip</Text></Cell><Cell id="ad3b" padding={5} colAlign="left"><Text fontSize={10}>varchar</Text></Cell></Row>
|
|
26
|
+
<Row id="ad4"><Cell id="ad4a" padding={5} colAlign="left"><Text fontSize={10}>city</Text></Cell><Cell id="ad4b" padding={5} colAlign="left"><Text fontSize={10}>varchar</Text></Cell></Row>
|
|
27
|
+
<Row id="ad5"><Cell id="ad5a" padding={5} colAlign="left"><Text fontSize={10}>line</Text></Cell><Cell id="ad5b" padding={5} colAlign="left"><Text fontSize={10}>varchar</Text></Cell></Row>
|
|
28
|
+
</Table>
|
|
29
|
+
</VStack>
|
|
30
|
+
|
|
31
|
+
<VStack id="col_center" gap={32} align="center">
|
|
32
|
+
<Table id="reviews">
|
|
33
|
+
<Row id="rv_h" fill="#fef9c3">
|
|
34
|
+
<Cell id="rv_h1" padding={6} colAlign="left"><Text fontWeight="bold" fontSize={11} foreground="#854d0e">reviews</Text></Cell>
|
|
35
|
+
<Cell id="rv_h2" padding={6} colAlign="center"><Text fontWeight="bold" fontSize={10} foreground="#854d0e">type</Text></Cell>
|
|
36
|
+
</Row>
|
|
37
|
+
<Row id="rv1"><Cell id="rv1a" padding={5} colAlign="left"><Text fontSize={10} fontWeight="bold">id</Text></Cell><Cell id="rv1b" padding={5} colAlign="left"><Text fontSize={10}>PK</Text></Cell></Row>
|
|
38
|
+
<Row id="rv2"><Cell id="rv2a" padding={5} colAlign="left"><Text fontSize={10}>user_id</Text></Cell><Cell id="rv2b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
39
|
+
<Row id="rv3"><Cell id="rv3a" padding={5} colAlign="left"><Text fontSize={10}>product_id</Text></Cell><Cell id="rv3b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
40
|
+
<Row id="rv4"><Cell id="rv4a" padding={5} colAlign="left"><Text fontSize={10}>rating</Text></Cell><Cell id="rv4b" padding={5} colAlign="left"><Text fontSize={10}>int</Text></Cell></Row>
|
|
41
|
+
<Row id="rv5"><Cell id="rv5a" padding={5} colAlign="left"><Text fontSize={10}>comment</Text></Cell><Cell id="rv5b" padding={5} colAlign="left"><Text fontSize={10}>text</Text></Cell></Row>
|
|
42
|
+
</Table>
|
|
43
|
+
|
|
44
|
+
<Table id="orders">
|
|
45
|
+
<Row id="o_h" fill="#fef3c7">
|
|
46
|
+
<Cell id="o_h1" padding={6} colAlign="left"><Text fontWeight="bold" fontSize={11} foreground="#92400e">orders</Text></Cell>
|
|
47
|
+
<Cell id="o_h2" padding={6} colAlign="center"><Text fontWeight="bold" fontSize={10} foreground="#92400e">type</Text></Cell>
|
|
48
|
+
</Row>
|
|
49
|
+
<Row id="o1"><Cell id="o1a" padding={5} colAlign="left"><Text fontSize={10} fontWeight="bold">id</Text></Cell><Cell id="o1b" padding={5} colAlign="left"><Text fontSize={10}>PK</Text></Cell></Row>
|
|
50
|
+
<Row id="o2"><Cell id="o2a" padding={5} colAlign="left"><Text fontSize={10}>user_id</Text></Cell><Cell id="o2b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
51
|
+
<Row id="o3"><Cell id="o3a" padding={5} colAlign="left"><Text fontSize={10}>status</Text></Cell><Cell id="o3b" padding={5} colAlign="left"><Text fontSize={10}>enum</Text></Cell></Row>
|
|
52
|
+
<Row id="o4"><Cell id="o4a" padding={5} colAlign="left"><Text fontSize={10}>total</Text></Cell><Cell id="o4b" padding={5} colAlign="left"><Text fontSize={10}>decimal</Text></Cell></Row>
|
|
53
|
+
<Row id="o5"><Cell id="o5a" padding={5} colAlign="left"><Text fontSize={10}>ordered_at</Text></Cell><Cell id="o5b" padding={5} colAlign="left"><Text fontSize={10}>timestamp</Text></Cell></Row>
|
|
54
|
+
</Table>
|
|
55
|
+
|
|
56
|
+
<HStack id="order_children" gap={24}>
|
|
57
|
+
<Table id="shipments">
|
|
58
|
+
<Row id="sh_h" fill="#fce7f3">
|
|
59
|
+
<Cell id="sh_h1" padding={6} colAlign="left"><Text fontWeight="bold" fontSize={11} foreground="#9d174d">shipments</Text></Cell>
|
|
60
|
+
<Cell id="sh_h2" padding={6} colAlign="center"><Text fontWeight="bold" fontSize={10} foreground="#9d174d">type</Text></Cell>
|
|
61
|
+
</Row>
|
|
62
|
+
<Row id="sh1"><Cell id="sh1a" padding={5} colAlign="left"><Text fontSize={10} fontWeight="bold">id</Text></Cell><Cell id="sh1b" padding={5} colAlign="left"><Text fontSize={10}>PK</Text></Cell></Row>
|
|
63
|
+
<Row id="sh2"><Cell id="sh2a" padding={5} colAlign="left"><Text fontSize={10}>order_id</Text></Cell><Cell id="sh2b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
64
|
+
<Row id="sh3"><Cell id="sh3a" padding={5} colAlign="left"><Text fontSize={10}>address_id</Text></Cell><Cell id="sh3b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
65
|
+
<Row id="sh4"><Cell id="sh4a" padding={5} colAlign="left"><Text fontSize={10}>carrier</Text></Cell><Cell id="sh4b" padding={5} colAlign="left"><Text fontSize={10}>varchar</Text></Cell></Row>
|
|
66
|
+
<Row id="sh5"><Cell id="sh5a" padding={5} colAlign="left"><Text fontSize={10}>shipped_at</Text></Cell><Cell id="sh5b" padding={5} colAlign="left"><Text fontSize={10}>timestamp</Text></Cell></Row>
|
|
67
|
+
</Table>
|
|
68
|
+
|
|
69
|
+
<Table id="payments">
|
|
70
|
+
<Row id="pm_h" fill="#fce7f3">
|
|
71
|
+
<Cell id="pm_h1" padding={6} colAlign="left"><Text fontWeight="bold" fontSize={11} foreground="#9d174d">payments</Text></Cell>
|
|
72
|
+
<Cell id="pm_h2" padding={6} colAlign="center"><Text fontWeight="bold" fontSize={10} foreground="#9d174d">type</Text></Cell>
|
|
73
|
+
</Row>
|
|
74
|
+
<Row id="pm1"><Cell id="pm1a" padding={5} colAlign="left"><Text fontSize={10} fontWeight="bold">id</Text></Cell><Cell id="pm1b" padding={5} colAlign="left"><Text fontSize={10}>PK</Text></Cell></Row>
|
|
75
|
+
<Row id="pm2"><Cell id="pm2a" padding={5} colAlign="left"><Text fontSize={10}>order_id</Text></Cell><Cell id="pm2b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
76
|
+
<Row id="pm3"><Cell id="pm3a" padding={5} colAlign="left"><Text fontSize={10}>method</Text></Cell><Cell id="pm3b" padding={5} colAlign="left"><Text fontSize={10}>enum</Text></Cell></Row>
|
|
77
|
+
<Row id="pm4"><Cell id="pm4a" padding={5} colAlign="left"><Text fontSize={10}>amount</Text></Cell><Cell id="pm4b" padding={5} colAlign="left"><Text fontSize={10}>decimal</Text></Cell></Row>
|
|
78
|
+
<Row id="pm5"><Cell id="pm5a" padding={5} colAlign="left"><Text fontSize={10}>paid_at</Text></Cell><Cell id="pm5b" padding={5} colAlign="left"><Text fontSize={10}>timestamp</Text></Cell></Row>
|
|
79
|
+
</Table>
|
|
80
|
+
|
|
81
|
+
<Table id="order_items">
|
|
82
|
+
<Row id="oi_h" fill="#fef3c7">
|
|
83
|
+
<Cell id="oi_h1" padding={6} colAlign="left"><Text fontWeight="bold" fontSize={11} foreground="#92400e">order_items</Text></Cell>
|
|
84
|
+
<Cell id="oi_h2" padding={6} colAlign="center"><Text fontWeight="bold" fontSize={10} foreground="#92400e">type</Text></Cell>
|
|
85
|
+
</Row>
|
|
86
|
+
<Row id="oi1"><Cell id="oi1a" padding={5} colAlign="left"><Text fontSize={10} fontWeight="bold">id</Text></Cell><Cell id="oi1b" padding={5} colAlign="left"><Text fontSize={10}>PK</Text></Cell></Row>
|
|
87
|
+
<Row id="oi2"><Cell id="oi2a" padding={5} colAlign="left"><Text fontSize={10}>order_id</Text></Cell><Cell id="oi2b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
88
|
+
<Row id="oi3"><Cell id="oi3a" padding={5} colAlign="left"><Text fontSize={10}>product_id</Text></Cell><Cell id="oi3b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
89
|
+
<Row id="oi4"><Cell id="oi4a" padding={5} colAlign="left"><Text fontSize={10}>qty</Text></Cell><Cell id="oi4b" padding={5} colAlign="left"><Text fontSize={10}>int</Text></Cell></Row>
|
|
90
|
+
<Row id="oi5"><Cell id="oi5a" padding={5} colAlign="left"><Text fontSize={10}>unit_price</Text></Cell><Cell id="oi5b" padding={5} colAlign="left"><Text fontSize={10}>decimal</Text></Cell></Row>
|
|
91
|
+
</Table>
|
|
92
|
+
</HStack>
|
|
93
|
+
</VStack>
|
|
94
|
+
|
|
95
|
+
<VStack id="col_right" gap={32}>
|
|
96
|
+
<Table id="categories">
|
|
97
|
+
<Row id="c_h" fill="#dcfce7">
|
|
98
|
+
<Cell id="c_h1" padding={6} colAlign="left"><Text fontWeight="bold" fontSize={11} foreground="#166534">categories</Text></Cell>
|
|
99
|
+
<Cell id="c_h2" padding={6} colAlign="center"><Text fontWeight="bold" fontSize={10} foreground="#166534">type</Text></Cell>
|
|
100
|
+
</Row>
|
|
101
|
+
<Row id="c1"><Cell id="c1a" padding={5} colAlign="left"><Text fontSize={10} fontWeight="bold">id</Text></Cell><Cell id="c1b" padding={5} colAlign="left"><Text fontSize={10}>PK</Text></Cell></Row>
|
|
102
|
+
<Row id="c2"><Cell id="c2a" padding={5} colAlign="left"><Text fontSize={10}>name</Text></Cell><Cell id="c2b" padding={5} colAlign="left"><Text fontSize={10}>varchar</Text></Cell></Row>
|
|
103
|
+
<Row id="c3"><Cell id="c3a" padding={5} colAlign="left"><Text fontSize={10}>parent_id</Text></Cell><Cell id="c3b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
104
|
+
</Table>
|
|
105
|
+
|
|
106
|
+
<Table id="products">
|
|
107
|
+
<Row id="p_h" fill="#dcfce7">
|
|
108
|
+
<Cell id="p_h1" padding={6} colAlign="left"><Text fontWeight="bold" fontSize={11} foreground="#166534">products</Text></Cell>
|
|
109
|
+
<Cell id="p_h2" padding={6} colAlign="center"><Text fontWeight="bold" fontSize={10} foreground="#166534">type</Text></Cell>
|
|
110
|
+
</Row>
|
|
111
|
+
<Row id="p1"><Cell id="p1a" padding={5} colAlign="left"><Text fontSize={10} fontWeight="bold">id</Text></Cell><Cell id="p1b" padding={5} colAlign="left"><Text fontSize={10}>PK</Text></Cell></Row>
|
|
112
|
+
<Row id="p2"><Cell id="p2a" padding={5} colAlign="left"><Text fontSize={10}>name</Text></Cell><Cell id="p2b" padding={5} colAlign="left"><Text fontSize={10}>varchar</Text></Cell></Row>
|
|
113
|
+
<Row id="p3"><Cell id="p3a" padding={5} colAlign="left"><Text fontSize={10}>category_id</Text></Cell><Cell id="p3b" padding={5} colAlign="left"><Text fontSize={10}>FK</Text></Cell></Row>
|
|
114
|
+
<Row id="p4"><Cell id="p4a" padding={5} colAlign="left"><Text fontSize={10}>price</Text></Cell><Cell id="p4b" padding={5} colAlign="left"><Text fontSize={10}>decimal</Text></Cell></Row>
|
|
115
|
+
<Row id="p5"><Cell id="p5a" padding={5} colAlign="left"><Text fontSize={10}>stock</Text></Cell><Cell id="p5b" padding={5} colAlign="left"><Text fontSize={10}>int</Text></Cell></Row>
|
|
116
|
+
</Table>
|
|
117
|
+
</VStack>
|
|
118
|
+
</HStack>
|
|
119
|
+
</VStack>
|
|
120
|
+
|
|
121
|
+
<EqualizeWidth targets={["users", "addresses"]} strategy="max" />
|
|
122
|
+
<EqualizeWidth targets={["products", "categories"]} strategy="max" />
|
|
123
|
+
<AlignConstraint targets={["addresses", "shipments"]} anchor="shipments" axis="horizontal" align="start" />
|
|
124
|
+
<AlignConstraint targets={["orders", "products"]} anchor="orders" axis="horizontal" align="start" />
|
|
125
|
+
|
|
126
|
+
<Connector from="users" to="addresses" fromAnchor="bottom" toAnchor="top" route="orthogonal" cornerRadius={6} endArrow="filledArrow" arrowSize={0.7}><Label>1:N</Label></Connector>
|
|
127
|
+
<Connector from="u1" to="rv2" fromAnchor="right" toAnchor="left" route="curved" endArrow="arrow" arrowSize={0.7}><Label>1:N</Label></Connector>
|
|
128
|
+
<Connector from="u1" to="o2" fromAnchor="right" toAnchor="left" route="curved" endArrow="arrow" arrowSize={0.7}><Label>1:N</Label></Connector>
|
|
129
|
+
<Connector from="orders" to="order_items" fromAnchor="bottom" toAnchor="top" route="orthogonal" cornerRadius={6} endArrow="arrow" arrowSize={0.7}><Label>1:N</Label></Connector>
|
|
130
|
+
<Connector from="orders" to="payments" fromAnchor="bottom" toAnchor="top" route="orthogonal" cornerRadius={6} endArrow="arrow" arrowSize={0.7}><Label>1:1</Label></Connector>
|
|
131
|
+
<Connector from="orders" to="shipments" fromAnchor="bottom" toAnchor="top" route="orthogonal" cornerRadius={6} endArrow="arrow" arrowSize={0.7}><Label>1:N</Label></Connector>
|
|
132
|
+
<Connector from="ad1" to="sh3" fromAnchor="right" toAnchor="left" route="orthogonal" cornerRadius={6} endArrow="arrow" arrowSize={0.7}><Label>1:N</Label></Connector>
|
|
133
|
+
<Connector from="p1" to="oi3" fromAnchor="left" toAnchor="right" route="orthogonal" cornerRadius={6} endArrow="arrow" arrowSize={0.7}><Label>1:N</Label></Connector>
|
|
134
|
+
<Connector from="p1" to="rv3" fromAnchor="left" toAnchor="right" route="curved" endArrow="arrow" arrowSize={0.7}><Label>1:N</Label></Connector>
|
|
135
|
+
<Connector from="categories" to="products" fromAnchor="bottom" toAnchor="top" route="orthogonal" cornerRadius={6} endArrow="filledArrow" arrowSize={0.7}><Label>1:N</Label></Connector>
|
|
136
|
+
<Connector from="c1" to="c3" fromAnchor="right" toAnchor="right" route="orthogonal" cornerRadius={6} stroke="#16a34a" strokeDasharray="4 2" endArrow="arrow" arrowSize={0.7}><Label>self</Label></Connector>
|
|
137
|
+
</Document>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 847.68447265625 599.4000000000001" width="847.68447265625" height="599.4000000000001" font-family="Inter, sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<marker id="marker-filledArrow-6b7280-s0.7" markerWidth="4.8999999999999995" markerHeight="4.8999999999999995" refX="4.8999999999999995" refY="2.4499999999999997" orient="auto-start-reverse"><path d="M 0,0 L 7,3.5 L 0,7 Z" fill="#6b7280" transform="scale(0.7)"/></marker>
|
|
4
|
+
<marker id="marker-arrow-6b7280-s0.7" markerWidth="4.8999999999999995" markerHeight="4.8999999999999995" refX="4.8999999999999995" refY="2.4499999999999997" orient="auto-start-reverse"><path d="M 0,0 L 7,3.5 L 0,7" fill="none" stroke="#6b7280" stroke-width="1" transform="scale(0.7)"/></marker>
|
|
5
|
+
<marker id="marker-arrow-16a34a-s0.7" markerWidth="4.8999999999999995" markerHeight="4.8999999999999995" refX="4.8999999999999995" refY="2.4499999999999997" orient="auto-start-reverse"><path d="M 0,0 L 7,3.5 L 0,7" fill="none" stroke="#16a34a" stroke-width="1" transform="scale(0.7)"/></marker>
|
|
6
|
+
</defs>
|
|
7
|
+
<rect x="0" y="0" width="847.68447265625" height="599.4000000000001" fill="white"/>
|
|
8
|
+
<g id="root"><g id="title"><text x="157.857861328125" y="42.9" text-anchor="middle" fill="#111827" font-size="18" font-weight="bold"><tspan x="157.857861328125" dy="0">ER Diagram — E-Commerce</tspan></text></g><g id="cols"><g id="col_left"><g id="users"><defs><clipPath id="table-clip-1"><rect x="24" y="69.2" width="128.818359375" height="123.4" rx="6" ry="6"/></clipPath></defs><rect x="24" y="69.2" width="128.818359375" height="123.4" rx="6" ry="6" fill="white"/><g clip-path="url(#table-clip-1)"><g id="u_h"><g id="u_h1"><rect x="24" y="69.2" width="64.55419921875" height="27.4" fill="#dbeafe" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_1"><text x="46.6109130859375" y="86.75" text-anchor="middle" fill="#1e40af" font-size="11" font-weight="bold"><tspan x="46.6109130859375" dy="0">users</tspan></text></g></g><g id="u_h2"><rect x="88.55419921875" y="69.2" width="64.26416015625" height="27.4" fill="#dbeafe" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_2"><text x="120.686279296875" y="85.7" text-anchor="middle" fill="#1e40af" font-size="10" font-weight="bold"><tspan x="120.686279296875" dy="0">type</tspan></text></g></g></g><g id="u1"><g id="u1a"><rect x="24" y="96.6" width="64.55419921875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_3"><text x="33.95751953125" y="112.1" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="33.95751953125" dy="0">id</tspan></text></g></g><g id="u1b"><rect x="88.55419921875" y="96.6" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_4"><text x="100.76220703125" y="112.1" text-anchor="middle" fill="#111827" font-size="10"><tspan x="100.76220703125" dy="0">PK</tspan></text></g></g></g><g id="u2"><g id="u2a"><rect x="24" y="120.6" width="64.55419921875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_5"><text x="43.3623046875" y="136.1" text-anchor="middle" fill="#111827" font-size="10"><tspan x="43.3623046875" dy="0">name</tspan></text></g></g><g id="u2b"><rect x="88.55419921875" y="120.6" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_6"><text x="113.357421875" y="136.1" text-anchor="middle" fill="#111827" font-size="10"><tspan x="113.357421875" dy="0">varchar</tspan></text></g></g></g><g id="u3"><g id="u3a"><rect x="24" y="144.60000000000002" width="64.55419921875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_7"><text x="42.77685546875" y="160.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="42.77685546875" dy="0">email</tspan></text></g></g><g id="u3b"><rect x="88.55419921875" y="144.60000000000002" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_8"><text x="113.357421875" y="160.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="113.357421875" dy="0">varchar</tspan></text></g></g></g><g id="u4"><g id="u4a"><rect x="24" y="168.60000000000002" width="64.55419921875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_9"><text x="56.277099609375" y="184.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="56.277099609375" dy="0">created_at</tspan></text></g></g><g id="u4b"><rect x="88.55419921875" y="168.60000000000002" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_10"><text x="120.686279296875" y="184.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="120.686279296875" dy="0">timestamp</tspan></text></g></g></g></g><rect x="24" y="69.2" width="128.818359375" height="123.4" rx="6" ry="6" fill="none" stroke="#d1d5db" stroke-width="1"/></g><g id="addresses"><defs><clipPath id="table-clip-2"><rect x="24" y="428" width="128.818359375" height="147.4" rx="6" ry="6"/></clipPath></defs><rect x="24" y="428" width="128.818359375" height="147.4" rx="6" ry="6" fill="white"/><g clip-path="url(#table-clip-2)"><g id="ad_h"><g id="ad_h1"><rect x="24" y="428" width="76.582666015625" height="27.4" fill="#e0e7ff" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_11"><text x="60.976708984375" y="445.55" text-anchor="middle" fill="#3730a3" font-size="11" font-weight="bold"><tspan x="60.976708984375" dy="0">addresses</tspan></text></g></g><g id="ad_h2"><rect x="100.582666015625" y="428" width="52.235693359375" height="27.4" fill="#e0e7ff" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_12"><text x="126.7005126953125" y="444.5" text-anchor="middle" fill="#3730a3" font-size="10" font-weight="bold"><tspan x="126.7005126953125" dy="0">type</tspan></text></g></g></g><g id="ad1"><g id="ad1a"><rect x="24" y="455.4" width="76.582666015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_13"><text x="33.95751953125" y="470.9" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="33.95751953125" dy="0">id</tspan></text></g></g><g id="ad1b"><rect x="100.582666015625" y="455.4" width="52.235693359375" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_14"><text x="112.790673828125" y="470.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="112.790673828125" dy="0">PK</tspan></text></g></g></g><g id="ad2"><g id="ad2a"><rect x="24" y="479.4" width="76.582666015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_15"><text x="47.640380859375" y="494.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="47.640380859375" dy="0">user_id</tspan></text></g></g><g id="ad2b"><rect x="100.582666015625" y="479.4" width="52.235693359375" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_16"><text x="112.5248046875" y="494.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="112.5248046875" dy="0">FK</tspan></text></g></g></g><g id="ad3"><g id="ad3a"><rect x="24" y="503.4" width="76.582666015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_17"><text x="36.737060546875" y="518.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="36.737060546875" dy="0">zip</tspan></text></g></g><g id="ad3b"><rect x="100.582666015625" y="503.4" width="52.235693359375" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_18"><text x="125.385888671875" y="518.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="125.385888671875" dy="0">varchar</tspan></text></g></g></g><g id="ad4"><g id="ad4a"><rect x="24" y="527.4" width="76.582666015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_19"><text x="38.364501953125" y="542.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="38.364501953125" dy="0">city</tspan></text></g></g><g id="ad4b"><rect x="100.582666015625" y="527.4" width="52.235693359375" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_20"><text x="125.385888671875" y="542.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="125.385888671875" dy="0">varchar</tspan></text></g></g></g><g id="ad5"><g id="ad5a"><rect x="24" y="551.4" width="76.582666015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_21"><text x="38.1201171875" y="566.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="38.1201171875" dy="0">line</tspan></text></g></g><g id="ad5b"><rect x="100.582666015625" y="551.4" width="52.235693359375" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_22"><text x="125.385888671875" y="566.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="125.385888671875" dy="0">varchar</tspan></text></g></g></g></g><rect x="24" y="428" width="128.818359375" height="147.4" rx="6" ry="6" fill="none" stroke="#d1d5db" stroke-width="1"/></g></g><g id="col_center"><g id="reviews"><defs><clipPath id="table-clip-3"><rect x="369.667333984375" y="69.2" width="101.1484375" height="147.4" rx="6" ry="6"/></clipPath></defs><rect x="369.667333984375" y="69.2" width="101.1484375" height="147.4" rx="6" ry="6" fill="white"/><g clip-path="url(#table-clip-3)"><g id="rv_h"><g id="rv_h1"><rect x="369.667333984375" y="69.2" width="65.0107421875" height="27.4" fill="#fef9c3" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_23"><text x="399.1376708984375" y="86.75" text-anchor="middle" fill="#854d0e" font-size="11" font-weight="bold"><tspan x="399.1376708984375" dy="0">reviews</tspan></text></g></g><g id="rv_h2"><rect x="434.678076171875" y="69.2" width="36.1376953125" height="27.4" fill="#fef9c3" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_24"><text x="452.746923828125" y="85.7" text-anchor="middle" fill="#854d0e" font-size="10" font-weight="bold"><tspan x="452.746923828125" dy="0">type</tspan></text></g></g></g><g id="rv1"><g id="rv1a"><rect x="369.667333984375" y="96.6" width="65.0107421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_25"><text x="379.624853515625" y="112.1" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="379.624853515625" dy="0">id</tspan></text></g></g><g id="rv1b"><rect x="434.678076171875" y="96.6" width="36.1376953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_26"><text x="446.886083984375" y="112.1" text-anchor="middle" fill="#111827" font-size="10"><tspan x="446.886083984375" dy="0">PK</tspan></text></g></g></g><g id="rv2"><g id="rv2a"><rect x="369.667333984375" y="120.6" width="65.0107421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_27"><text x="393.30771484375" y="136.1" text-anchor="middle" fill="#111827" font-size="10"><tspan x="393.30771484375" dy="0">user_id</tspan></text></g></g><g id="rv2b"><rect x="434.678076171875" y="120.6" width="36.1376953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_28"><text x="446.62021484375" y="136.1" text-anchor="middle" fill="#111827" font-size="10"><tspan x="446.62021484375" dy="0">FK</tspan></text></g></g></g><g id="rv3"><g id="rv3a"><rect x="369.667333984375" y="144.60000000000002" width="65.0107421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_29"><text x="402.172705078125" y="160.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="402.172705078125" dy="0">product_id</tspan></text></g></g><g id="rv3b"><rect x="434.678076171875" y="144.60000000000002" width="36.1376953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_30"><text x="446.62021484375" y="160.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="446.62021484375" dy="0">FK</tspan></text></g></g></g><g id="rv4"><g id="rv4a"><rect x="369.667333984375" y="168.60000000000002" width="65.0107421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_31"><text x="389.58017578125" y="184.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="389.58017578125" dy="0">rating</tspan></text></g></g><g id="rv4b"><rect x="434.678076171875" y="168.60000000000002" width="36.1376953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_32"><text x="446.058935546875" y="184.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="446.058935546875" dy="0">int</tspan></text></g></g></g><g id="rv5"><g id="rv5a"><rect x="369.667333984375" y="192.60000000000002" width="65.0107421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_33"><text x="398.998388671875" y="208.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="398.998388671875" dy="0">comment</tspan></text></g></g><g id="rv5b"><rect x="434.678076171875" y="192.60000000000002" width="36.1376953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_34"><text x="449.485693359375" y="208.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="449.485693359375" dy="0">text</tspan></text></g></g></g></g><rect x="369.667333984375" y="69.2" width="101.1484375" height="147.4" rx="6" ry="6" fill="none" stroke="#d1d5db" stroke-width="1"/></g><g id="orders"><defs><clipPath id="table-clip-4"><rect x="355.12607421875" y="248.60000000000002" width="130.23095703125" height="147.4" rx="6" ry="6"/></clipPath></defs><rect x="355.12607421875" y="248.60000000000002" width="130.23095703125" height="147.4" rx="6" ry="6" fill="white"/><g clip-path="url(#table-clip-4)"><g id="o_h"><g id="o_h1"><rect x="355.12607421875" y="248.60000000000002" width="65.966796875" height="27.4" fill="#fef3c7" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_35"><text x="380.56997070312497" y="266.15000000000003" text-anchor="middle" fill="#92400e" font-size="11" font-weight="bold"><tspan x="380.56997070312497" dy="0">orders</tspan></text></g></g><g id="o_h2"><rect x="421.09287109375" y="248.60000000000002" width="64.26416015625" height="27.4" fill="#fef3c7" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_36"><text x="453.224951171875" y="265.1" text-anchor="middle" fill="#92400e" font-size="10" font-weight="bold"><tspan x="453.224951171875" dy="0">type</tspan></text></g></g></g><g id="o1"><g id="o1a"><rect x="355.12607421875" y="276" width="65.966796875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_37"><text x="365.08359375" y="291.5" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="365.08359375" dy="0">id</tspan></text></g></g><g id="o1b"><rect x="421.09287109375" y="276" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_38"><text x="433.30087890625" y="291.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="433.30087890625" dy="0">PK</tspan></text></g></g></g><g id="o2"><g id="o2a"><rect x="355.12607421875" y="300" width="65.966796875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_39"><text x="378.766455078125" y="315.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="378.766455078125" dy="0">user_id</tspan></text></g></g><g id="o2b"><rect x="421.09287109375" y="300" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_40"><text x="433.035009765625" y="315.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="433.035009765625" dy="0">FK</tspan></text></g></g></g><g id="o3"><g id="o3a"><rect x="355.12607421875" y="324" width="65.966796875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_41"><text x="375.871435546875" y="339.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="375.871435546875" dy="0">status</tspan></text></g></g><g id="o3b"><rect x="421.09287109375" y="324" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_42"><text x="440.618994140625" y="339.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="440.618994140625" dy="0">enum</tspan></text></g></g></g><g id="o4"><g id="o4a"><rect x="355.12607421875" y="348" width="65.966796875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_43"><text x="371.44296875" y="363.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="371.44296875" dy="0">total</tspan></text></g></g><g id="o4b"><rect x="421.09287109375" y="348" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_44"><text x="446.3794921875" y="363.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="446.3794921875" dy="0">decimal</tspan></text></g></g></g><g id="o5"><g id="o5a"><rect x="355.12607421875" y="372" width="65.966796875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_45"><text x="388.10947265625" y="387.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="388.10947265625" dy="0">ordered_at</tspan></text></g></g><g id="o5b"><rect x="421.09287109375" y="372" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_46"><text x="453.224951171875" y="387.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="453.224951171875" dy="0">timestamp</tspan></text></g></g></g></g><rect x="355.12607421875" y="248.60000000000002" width="130.23095703125" height="147.4" rx="6" ry="6" fill="none" stroke="#d1d5db" stroke-width="1"/></g><g id="order_children"><g id="shipments"><defs><clipPath id="table-clip-5"><rect x="192.818359375" y="428" width="138.471630859375" height="147.4" rx="6" ry="6"/></clipPath></defs><rect x="192.818359375" y="428" width="138.471630859375" height="147.4" rx="6" ry="6" fill="white"/><g clip-path="url(#table-clip-5)"><g id="sh_h"><g id="sh_h1"><rect x="192.818359375" y="428" width="74.20747070312501" height="27.4" fill="#fce7f3" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_47"><text x="229.9220947265625" y="445.55" text-anchor="middle" fill="#9d174d" font-size="11" font-weight="bold"><tspan x="229.9220947265625" dy="0">shipments</tspan></text></g></g><g id="sh_h2"><rect x="267.025830078125" y="428" width="64.26416015625" height="27.4" fill="#fce7f3" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_48"><text x="299.15791015625" y="444.5" text-anchor="middle" fill="#9d174d" font-size="10" font-weight="bold"><tspan x="299.15791015625" dy="0">type</tspan></text></g></g></g><g id="sh1"><g id="sh1a"><rect x="192.818359375" y="455.4" width="74.20747070312501" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_49"><text x="202.77587890625" y="470.9" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="202.77587890625" dy="0">id</tspan></text></g></g><g id="sh1b"><rect x="267.025830078125" y="455.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_50"><text x="279.233837890625" y="470.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="279.233837890625" dy="0">PK</tspan></text></g></g></g><g id="sh2"><g id="sh2a"><rect x="192.818359375" y="479.4" width="74.20747070312501" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_51"><text x="219.03955078125" y="494.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="219.03955078125" dy="0">order_id</tspan></text></g></g><g id="sh2b"><rect x="267.025830078125" y="479.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_52"><text x="278.96796875" y="494.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="278.96796875" dy="0">FK</tspan></text></g></g></g><g id="sh3"><g id="sh3a"><rect x="192.818359375" y="503.4" width="74.20747070312501" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_53"><text x="225.933349609375" y="518.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="225.933349609375" dy="0">address_id</tspan></text></g></g><g id="sh3b"><rect x="267.025830078125" y="503.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_54"><text x="278.96796875" y="518.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="278.96796875" dy="0">FK</tspan></text></g></g></g><g id="sh4"><g id="sh4a"><rect x="192.818359375" y="527.4" width="74.20747070312501" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_55"><text x="214.799072265625" y="542.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="214.799072265625" dy="0">carrier</tspan></text></g></g><g id="sh4b"><rect x="267.025830078125" y="527.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_56"><text x="291.829052734375" y="542.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="291.829052734375" dy="0">varchar</tspan></text></g></g></g><g id="sh5"><g id="sh5a"><rect x="192.818359375" y="551.4" width="74.20747070312501" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_57"><text x="226.01123046875" y="566.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="226.01123046875" dy="0">shipped_at</tspan></text></g></g><g id="sh5b"><rect x="267.025830078125" y="551.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_58"><text x="299.15791015625" y="566.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="299.15791015625" dy="0">timestamp</tspan></text></g></g></g></g><rect x="192.818359375" y="428" width="138.471630859375" height="147.4" rx="6" ry="6" fill="none" stroke="#d1d5db" stroke-width="1"/></g><g id="payments"><defs><clipPath id="table-clip-6"><rect x="355.289990234375" y="428" width="135.192578125" height="147.4" rx="6" ry="6"/></clipPath></defs><rect x="355.289990234375" y="428" width="135.192578125" height="147.4" rx="6" ry="6" fill="white"/><g clip-path="url(#table-clip-6)"><g id="pm_h"><g id="pm_h1"><rect x="355.289990234375" y="428" width="70.92841796875001" height="27.4" fill="#fce7f3" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_59"><text x="390.75419921875" y="445.55" text-anchor="middle" fill="#9d174d" font-size="11" font-weight="bold"><tspan x="390.75419921875" dy="0">payments</tspan></text></g></g><g id="pm_h2"><rect x="426.218408203125" y="428" width="64.26416015625" height="27.4" fill="#fce7f3" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_60"><text x="458.35048828125" y="444.5" text-anchor="middle" fill="#9d174d" font-size="10" font-weight="bold"><tspan x="458.35048828125" dy="0">type</tspan></text></g></g></g><g id="pm1"><g id="pm1a"><rect x="355.289990234375" y="455.4" width="70.92841796875001" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_61"><text x="365.247509765625" y="470.9" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="365.247509765625" dy="0">id</tspan></text></g></g><g id="pm1b"><rect x="426.218408203125" y="455.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_62"><text x="438.426416015625" y="470.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="438.426416015625" dy="0">PK</tspan></text></g></g></g><g id="pm2"><g id="pm2a"><rect x="355.289990234375" y="479.4" width="70.92841796875001" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_63"><text x="381.511181640625" y="494.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="381.511181640625" dy="0">order_id</tspan></text></g></g><g id="pm2b"><rect x="426.218408203125" y="479.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_64"><text x="438.160546875" y="494.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="438.160546875" dy="0">FK</tspan></text></g></g></g><g id="pm3"><g id="pm3a"><rect x="355.289990234375" y="503.4" width="70.92841796875001" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_65"><text x="380.0314453125" y="518.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="380.0314453125" dy="0">method</tspan></text></g></g><g id="pm3b"><rect x="426.218408203125" y="503.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_66"><text x="445.74453125" y="518.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="445.74453125" dy="0">enum</tspan></text></g></g></g><g id="pm4"><g id="pm4a"><rect x="355.289990234375" y="527.4" width="70.92841796875001" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_67"><text x="379.7951171875" y="542.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="379.7951171875" dy="0">amount</tspan></text></g></g><g id="pm4b"><rect x="426.218408203125" y="527.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_68"><text x="451.505029296875" y="542.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="451.505029296875" dy="0">decimal</tspan></text></g></g></g><g id="pm5"><g id="pm5a"><rect x="355.289990234375" y="551.4" width="70.92841796875001" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_69"><text x="378.841748046875" y="566.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="378.841748046875" dy="0">paid_at</tspan></text></g></g><g id="pm5b"><rect x="426.218408203125" y="551.4" width="64.26416015625" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_70"><text x="458.35048828125" y="566.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="458.35048828125" dy="0">timestamp</tspan></text></g></g></g></g><rect x="355.289990234375" y="428" width="135.192578125" height="147.4" rx="6" ry="6" fill="none" stroke="#d1d5db" stroke-width="1"/></g><g id="order_items"><defs><clipPath id="table-clip-7"><rect x="514.482568359375" y="428" width="133.182177734375" height="147.4" rx="6" ry="6"/></clipPath></defs><rect x="514.482568359375" y="428" width="133.182177734375" height="147.4" rx="6" ry="6" fill="white"/><g clip-path="url(#table-clip-7)"><g id="oi_h"><g id="oi_h1"><rect x="514.482568359375" y="428" width="82.608935546875" height="27.4" fill="#fef3c7" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_71"><text x="555.7870361328125" y="445.55" text-anchor="middle" fill="#92400e" font-size="11" font-weight="bold"><tspan x="555.7870361328125" dy="0">order_items</tspan></text></g></g><g id="oi_h2"><rect x="597.0915039062501" y="428" width="50.5732421875" height="27.4" fill="#fef3c7" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_72"><text x="622.3781250000001" y="444.5" text-anchor="middle" fill="#92400e" font-size="10" font-weight="bold"><tspan x="622.3781250000001" dy="0">type</tspan></text></g></g></g><g id="oi1"><g id="oi1a"><rect x="514.482568359375" y="455.4" width="82.608935546875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_73"><text x="524.440087890625" y="470.9" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="524.440087890625" dy="0">id</tspan></text></g></g><g id="oi1b"><rect x="597.0915039062501" y="455.4" width="50.5732421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_74"><text x="609.2995117187501" y="470.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="609.2995117187501" dy="0">PK</tspan></text></g></g></g><g id="oi2"><g id="oi2a"><rect x="514.482568359375" y="479.4" width="82.608935546875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_75"><text x="540.703759765625" y="494.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="540.703759765625" dy="0">order_id</tspan></text></g></g><g id="oi2b"><rect x="597.0915039062501" y="479.4" width="50.5732421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_76"><text x="609.0336425781251" y="494.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="609.0336425781251" dy="0">FK</tspan></text></g></g></g><g id="oi3"><g id="oi3a"><rect x="514.482568359375" y="503.4" width="82.608935546875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_77"><text x="546.987939453125" y="518.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="546.987939453125" dy="0">product_id</tspan></text></g></g><g id="oi3b"><rect x="597.0915039062501" y="503.4" width="50.5732421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_78"><text x="609.0336425781251" y="518.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="609.0336425781251" dy="0">FK</tspan></text></g></g></g><g id="oi4"><g id="oi4a"><rect x="514.482568359375" y="527.4" width="82.608935546875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_79"><text x="527.740625" y="542.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="527.740625" dy="0">qty</tspan></text></g></g><g id="oi4b"><rect x="597.0915039062501" y="527.4" width="50.5732421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_80"><text x="608.4723632812501" y="542.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="608.4723632812501" dy="0">int</tspan></text></g></g></g><g id="oi5"><g id="oi5a"><rect x="514.482568359375" y="551.4" width="82.608935546875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_81"><text x="544.742822265625" y="566.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="544.742822265625" dy="0">unit_price</tspan></text></g></g><g id="oi5b"><rect x="597.0915039062501" y="551.4" width="50.5732421875" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_82"><text x="622.3781250000001" y="566.9" text-anchor="middle" fill="#111827" font-size="10"><tspan x="622.3781250000001" dy="0">decimal</tspan></text></g></g></g></g><rect x="514.482568359375" y="428" width="133.182177734375" height="147.4" rx="6" ry="6" fill="none" stroke="#d1d5db" stroke-width="1"/></g></g></g><g id="col_right"><g id="categories"><defs><clipPath id="table-clip-8"><rect x="687.66474609375" y="69.2" width="124.64697265625" height="99.4" rx="6" ry="6"/></clipPath></defs><rect x="687.66474609375" y="69.2" width="124.64697265625" height="99.4" rx="6" ry="6" fill="white"/><g clip-path="url(#table-clip-8)"><g id="c_h"><g id="c_h1"><rect x="687.66474609375" y="69.2" width="75.04052734375" height="27.4" fill="#dcfce7" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_83"><text x="725.185009765625" y="86.75" text-anchor="middle" fill="#166534" font-size="11" font-weight="bold"><tspan x="725.185009765625" dy="0">categories</tspan></text></g></g><g id="c_h2"><rect x="762.7052734375" y="69.2" width="49.6064453125" height="27.4" fill="#dcfce7" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_84"><text x="787.50849609375" y="85.7" text-anchor="middle" fill="#166534" font-size="10" font-weight="bold"><tspan x="787.50849609375" dy="0">type</tspan></text></g></g></g><g id="c1"><g id="c1a"><rect x="687.66474609375" y="96.6" width="75.04052734375" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_85"><text x="697.622265625" y="112.1" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="697.622265625" dy="0">id</tspan></text></g></g><g id="c1b"><rect x="762.7052734375" y="96.6" width="49.6064453125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_86"><text x="774.91328125" y="112.1" text-anchor="middle" fill="#111827" font-size="10"><tspan x="774.91328125" dy="0">PK</tspan></text></g></g></g><g id="c2"><g id="c2a"><rect x="687.66474609375" y="120.6" width="75.04052734375" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_87"><text x="707.02705078125" y="136.1" text-anchor="middle" fill="#111827" font-size="10"><tspan x="707.02705078125" dy="0">name</tspan></text></g></g><g id="c2b"><rect x="762.7052734375" y="120.6" width="49.6064453125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_88"><text x="787.50849609375" y="136.1" text-anchor="middle" fill="#111827" font-size="10"><tspan x="787.50849609375" dy="0">varchar</tspan></text></g></g></g><g id="c3"><g id="c3a"><rect x="687.66474609375" y="144.60000000000002" width="75.04052734375" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_89"><text x="716.654736328125" y="160.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="716.654736328125" dy="0">parent_id</tspan></text></g></g><g id="c3b"><rect x="762.7052734375" y="144.60000000000002" width="49.6064453125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_90"><text x="774.647412109375" y="160.10000000000002" text-anchor="middle" fill="#111827" font-size="10"><tspan x="774.647412109375" dy="0">FK</tspan></text></g></g></g></g><rect x="687.66474609375" y="69.2" width="124.64697265625" height="99.4" rx="6" ry="6" fill="none" stroke="#d1d5db" stroke-width="1"/></g><g id="products"><defs><clipPath id="table-clip-9"><rect x="687.66474609375" y="248.60000000000002" width="124.64697265625" height="147.4" rx="6" ry="6"/></clipPath></defs><rect x="687.66474609375" y="248.60000000000002" width="124.64697265625" height="147.4" rx="6" ry="6" fill="white"/><g clip-path="url(#table-clip-9)"><g id="p_h"><g id="p_h1"><rect x="687.66474609375" y="248.60000000000002" width="72.313720703125" height="27.4" fill="#dcfce7" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_91"><text x="720.3964111328124" y="266.15000000000003" text-anchor="middle" fill="#166534" font-size="11" font-weight="bold"><tspan x="720.3964111328124" dy="0">products</tspan></text></g></g><g id="p_h2"><rect x="759.978466796875" y="248.60000000000002" width="52.333251953125" height="27.4" fill="#dcfce7" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_92"><text x="786.1450927734375" y="265.1" text-anchor="middle" fill="#166534" font-size="10" font-weight="bold"><tspan x="786.1450927734375" dy="0">type</tspan></text></g></g></g><g id="p1"><g id="p1a"><rect x="687.66474609375" y="276" width="72.313720703125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_93"><text x="697.622265625" y="291.5" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="697.622265625" dy="0">id</tspan></text></g></g><g id="p1b"><rect x="759.978466796875" y="276" width="52.333251953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_94"><text x="772.186474609375" y="291.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="772.186474609375" dy="0">PK</tspan></text></g></g></g><g id="p2"><g id="p2a"><rect x="687.66474609375" y="300" width="72.313720703125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_95"><text x="707.02705078125" y="315.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="707.02705078125" dy="0">name</tspan></text></g></g><g id="p2b"><rect x="759.978466796875" y="300" width="52.333251953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_96"><text x="784.781689453125" y="315.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="784.781689453125" dy="0">varchar</tspan></text></g></g></g><g id="p3"><g id="p3a"><rect x="687.66474609375" y="324" width="72.313720703125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_97"><text x="722.9416015625" y="339.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="722.9416015625" dy="0">category_id</tspan></text></g></g><g id="p3b"><rect x="759.978466796875" y="324" width="52.333251953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_98"><text x="771.92060546875" y="339.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="771.92060546875" dy="0">FK</tspan></text></g></g></g><g id="p4"><g id="p4a"><rect x="687.66474609375" y="348" width="72.313720703125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_99"><text x="705.783642578125" y="363.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="705.783642578125" dy="0">price</tspan></text></g></g><g id="p4b"><rect x="759.978466796875" y="348" width="52.333251953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_100"><text x="785.265087890625" y="363.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="785.265087890625" dy="0">decimal</tspan></text></g></g></g><g id="p5"><g id="p5a"><rect x="687.66474609375" y="372" width="72.313720703125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_101"><text x="706.825634765625" y="387.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="706.825634765625" dy="0">stock</tspan></text></g></g><g id="p5b"><rect x="759.978466796875" y="372" width="52.333251953125" height="24" fill="none" stroke="#e5e7eb" stroke-width="0.5"/><g id="text_102"><text x="771.359326171875" y="387.5" text-anchor="middle" fill="#111827" font-size="10"><tspan x="771.359326171875" dy="0">int</tspan></text></g></g></g></g><rect x="687.66474609375" y="248.60000000000002" width="124.64697265625" height="147.4" rx="6" ry="6" fill="none" stroke="#d1d5db" stroke-width="1"/></g></g></g></g>
|
|
9
|
+
<g id="connector_1"><path d="M 88.4091796875 192.60000000000002 L 88.4091796875 310.3 L 88.4091796875 310.3 L 88.4091796875 428" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-filledArrow-6b7280-s0.7)"/><g id="label_1"><rect x="76.85078125" y="299.90000000000003" width="23.116796875000002" height="20.799999999999997" fill="#ffffff"/><text x="88.4091796875" y="314.5" text-anchor="middle" fill="#111827" font-size="12"><tspan x="88.4091796875" dy="0">1:N</tspan></text></g></g>
|
|
10
|
+
<g id="connector_2"><path d="M 152.818359375 104.6 C 224.97259924513554 104.6, 297.51309411423944 132.6, 369.667333984375 132.6" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/><g id="label_2"><rect x="249.6844482421875" y="108.19999999999999" width="23.116796875000002" height="20.799999999999997" fill="#ffffff"/><text x="261.2428466796875" y="122.79999999999998" text-anchor="middle" fill="#111827" font-size="12"><tspan x="261.2428466796875" dy="0">1:N</tspan></text></g></g>
|
|
11
|
+
<g id="connector_3"><path d="M 152.818359375 112.6 C 246.55739721276092 112.6, 261.38703638098906 312, 355.12607421875 312" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/><g id="label_3"><rect x="242.413818359375" y="201.9" width="23.116796875000002" height="20.799999999999997" fill="#ffffff"/><text x="253.972216796875" y="216.5" text-anchor="middle" fill="#111827" font-size="12"><tspan x="253.972216796875" dy="0">1:N</tspan></text></g></g>
|
|
12
|
+
<g id="connector_4"><path d="M 452.7992919921875 396 L 452.7992919921875 406 A 6 6 0 0 0 458.7992919921875 412 L 575.0736572265625 412 A 6 6 0 0 1 581.0736572265625 418 L 581.0736572265625 428" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/><g id="label_4"><rect x="505.37807617187497" y="401.6" width="23.116796875000002" height="20.799999999999997" fill="#ffffff"/><text x="516.936474609375" y="416.20000000000005" text-anchor="middle" fill="#111827" font-size="12"><tspan x="516.936474609375" dy="0">1:N</tspan></text></g></g>
|
|
13
|
+
<g id="connector_5"><path d="M 420.241552734375 396 L 420.241552734375 410.67763671874997 A 1.322363281250034 1.322363281250034 0 0 0 421.563916015625 412 L 421.563916015625 412 A 1.322363281250034 1.322363281250034 0 0 1 422.88627929687505 413.32236328125003 L 422.88627929687505 428" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/><g id="label_5"><rect x="412.293603515625" y="401.6" width="18.540625" height="20.799999999999997" fill="#ffffff"/><text x="421.563916015625" y="416.20000000000005" text-anchor="middle" fill="#111827" font-size="12"><tspan x="421.563916015625" dy="0">1:1</tspan></text></g></g>
|
|
14
|
+
<g id="connector_6"><path d="M 387.6838134765625 396 L 387.6838134765625 406 A 6 6 0 0 1 381.6838134765625 412 L 268.0541748046875 412 A 6 6 0 0 0 262.0541748046875 418 L 262.0541748046875 428" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/><g id="label_6"><rect x="313.310595703125" y="401.6" width="23.116796875000002" height="20.799999999999997" fill="#ffffff"/><text x="324.868994140625" y="416.20000000000005" text-anchor="middle" fill="#111827" font-size="12"><tspan x="324.868994140625" dy="0">1:N</tspan></text></g></g>
|
|
15
|
+
<g id="connector_7"><path d="M 152.818359375 467.4 L 166.818359375 467.4 A 6 6 0 0 1 172.818359375 473.4 L 172.818359375 509.4 A 6 6 0 0 0 178.818359375 515.4 L 192.818359375 515.4" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/><g id="label_7"><rect x="161.2599609375" y="481" width="23.116796875000002" height="20.799999999999997" fill="#ffffff"/><text x="172.818359375" y="495.6" text-anchor="middle" fill="#111827" font-size="12"><tspan x="172.818359375" dy="0">1:N</tspan></text></g></g>
|
|
16
|
+
<g id="connector_8"><path d="M 687.66474609375 292 L 673.66474609375 292 A 6 6 0 0 0 667.66474609375 298 L 667.66474609375 509.4 A 6 6 0 0 1 661.66474609375 515.4 L 647.66474609375 515.4" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/><g id="label_8"><rect x="656.1063476562499" y="393.3" width="23.116796875000002" height="20.799999999999997" fill="#ffffff"/><text x="667.66474609375" y="407.9" text-anchor="middle" fill="#111827" font-size="12"><tspan x="667.66474609375" dy="0">1:N</tspan></text></g></g>
|
|
17
|
+
<g id="connector_9"><path d="M 687.66474609375 284 C 604.6684419878618 284, 553.812075590263 156.60000000000002, 470.815771484375 156.60000000000002" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/><g id="label_9"><rect x="567.6818603515624" y="209.9" width="23.116796875000002" height="20.799999999999997" fill="#ffffff"/><text x="579.2402587890624" y="224.5" text-anchor="middle" fill="#111827" font-size="12"><tspan x="579.2402587890624" dy="0">1:N</tspan></text></g></g>
|
|
18
|
+
<g id="connector_10"><path d="M 749.988232421875 168.60000000000002 L 749.988232421875 208.60000000000002 L 749.988232421875 208.60000000000002 L 749.988232421875 248.60000000000002" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-filledArrow-6b7280-s0.7)"/><g id="label_10"><rect x="738.4298339843749" y="198.20000000000002" width="23.116796875000002" height="20.799999999999997" fill="#ffffff"/><text x="749.988232421875" y="212.8" text-anchor="middle" fill="#111827" font-size="12"><tspan x="749.988232421875" dy="0">1:N</tspan></text></g></g>
|
|
19
|
+
<g id="connector_11"><path d="M 812.31171875 108.6 L 826.31171875 108.6 A 6 6 0 0 1 832.31171875 114.6 L 832.31171875 150.60000000000002 A 6 6 0 0 1 826.31171875 156.60000000000002 L 812.31171875 156.60000000000002" fill="none" stroke="#16a34a" stroke-width="1.5" stroke-dasharray="4 2" marker-end="url(#marker-arrow-16a34a-s0.7)"/><g id="label_11"><rect x="798.93896484375" y="122.20000000000002" width="26.7455078125" height="20.799999999999997" fill="#ffffff"/><text x="812.31171875" y="136.8" text-anchor="middle" fill="#111827" font-size="12"><tspan x="812.31171875" dy="0">self</tspan></text></g></g>
|
|
20
|
+
</svg>
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { AwsAccount, AwsRegion } from "./components/aws.draw.tsx";
|
|
2
|
+
import {
|
|
3
|
+
PlatformVpc, ManagementVpc, BffVpc, EdgeServices,
|
|
4
|
+
EventProcessing, SharedServices, ExternalActor, AnalyticsServices
|
|
5
|
+
} from "./system-parts.draw.tsx";
|
|
6
|
+
|
|
7
|
+
<Document id="sys" padding={20} background="white" fontFamily="Inter, sans-serif">
|
|
8
|
+
<HStack gap={24} align="start">
|
|
9
|
+
{/* Left: External actors (Box allows free Y positioning via AlignConstraint) */}
|
|
10
|
+
<Box shape="rect" fill="none" stroke="none" width={100}>
|
|
11
|
+
<ExternalActor id="users" label="Users / Mobile" />
|
|
12
|
+
<ExternalActor id="ops-user" label="Operations" />
|
|
13
|
+
</Box>
|
|
14
|
+
|
|
15
|
+
{/* Right: AWS */}
|
|
16
|
+
<AwsAccount label="AWS Account">
|
|
17
|
+
<VStack padding={14} gap={14}>
|
|
18
|
+
<AwsRegion label="ap-northeast-1">
|
|
19
|
+
<HStack padding={14} gap={30} align="start">
|
|
20
|
+
<EdgeServices />
|
|
21
|
+
<VStack gap={14}>
|
|
22
|
+
<HStack gap={16} align="center">
|
|
23
|
+
<VStack align="center" height="fill"><BffVpc /></VStack>
|
|
24
|
+
<PlatformVpc />
|
|
25
|
+
</HStack>
|
|
26
|
+
<HStack gap={16} align="start">
|
|
27
|
+
<ManagementVpc />
|
|
28
|
+
<EventProcessing />
|
|
29
|
+
</HStack>
|
|
30
|
+
<SharedServices />
|
|
31
|
+
</VStack>
|
|
32
|
+
<AnalyticsServices />
|
|
33
|
+
</HStack>
|
|
34
|
+
</AwsRegion>
|
|
35
|
+
</VStack>
|
|
36
|
+
</AwsAccount>
|
|
37
|
+
</HStack>
|
|
38
|
+
|
|
39
|
+
{/* User row: plat-alb anchors the line; users + bff-vpc align to it */}
|
|
40
|
+
<AlignConstraint targets={["edge-row1", "users", "bff-vpc", "plat-alb"]} anchor="plat-alb" axis="horizontal" align="center" />
|
|
41
|
+
{/* Management row: mgmt-alb anchors the line; ops-user aligns to it */}
|
|
42
|
+
<AlignConstraint targets={["mgmt-alb", "ops-user", "edge-row2"]} anchor="mgmt-alb" axis="horizontal" align="center" />
|
|
43
|
+
<AlignConstraint targets={["redshift", "cms-admin"]} anchor="cms-admin" axis="horizontal" align="center" />
|
|
44
|
+
<AlignConstraint targets={["dms", "aurora"]} anchor="aurora" axis="horizontal" align="center" />
|
|
45
|
+
<AlignConstraint targets={["evt-row", "dynamo"]} anchor="dynamo" axis="vertical" align="center" />
|
|
46
|
+
<AlignConstraint targets={["s3-data", "s3-logs"]} anchor="s3-logs" axis="horizontal" align="center" />
|
|
47
|
+
<AlignConstraint targets={["s3-static", "edge-col"]} anchor="edge-col" axis="vertical" align="center" />
|
|
48
|
+
<AlignConstraint targets={["bff-alb", "bff"]} anchor="bff-alb" axis="horizontal" align="center" />
|
|
49
|
+
|
|
50
|
+
{/* --- Connections (geometry roles resolve implicitly via "connect" role) --- */}
|
|
51
|
+
<Connector from="users" to="cf" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
52
|
+
<Connector from="cf" to="waf" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
53
|
+
<Connector from="waf" to="bff-alb" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
54
|
+
<Connector from="bff-alb" to="bff" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
55
|
+
<Connector from="bff" to="plat-alb" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
56
|
+
<Connector from="plat-alb" to="api-a" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
57
|
+
<Connector from="plat-alb" to="api-b" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
58
|
+
<Connector from="api-a" to="cache" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
59
|
+
<Connector from="api-a" to="aurora" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
60
|
+
<Connector from="api-b" to="aurora" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
61
|
+
<Connector from="api-b" to="dynamo" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
62
|
+
<Connector from="api-b" to="eb" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
63
|
+
<Connector from="eb" to="evt-handler" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
64
|
+
<Connector from="ops-user" to="mcf" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
65
|
+
<Connector from="mcf" to="mwaf" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
66
|
+
<Connector from="mwaf" to="mgmt-alb" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
67
|
+
<Connector from="mgmt-alb" to="cms-app" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
68
|
+
<Connector from="mgmt-alb" to="cms-admin" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
69
|
+
<Connector from="cms-app" to="s3-static" endArrow="arrow" toAnchor="right" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
70
|
+
<Connector from="cf" to="s3-static" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} strokeStyle="dashed" />
|
|
71
|
+
<Connector from="aurora" to="dms" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
72
|
+
<Connector from="dms" to="redshift" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
73
|
+
<Connector from="evt-handler" to="redshift" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
74
|
+
<Connector from="redshift" to="s3-data" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
75
|
+
<Connector from="cms-admin" to="redshift" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
76
|
+
<Connector from="mgmt-batch" to="redshift" fromAnchor="right" toAnchor="left" endArrow="arrow" route="orthogonal" cornerRadius={6} arrowSize={0.7} />
|
|
77
|
+
</Document>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 932.113427734375 759.1999999999999" width="932.113427734375" height="759.1999999999999" font-family="Inter, sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<marker id="marker-arrow-6b7280-s0.7" markerWidth="4.8999999999999995" markerHeight="4.8999999999999995" refX="4.8999999999999995" refY="2.4499999999999997" orient="auto-start-reverse"><path d="M 0,0 L 7,3.5 L 0,7" fill="none" stroke="#6b7280" stroke-width="1" transform="scale(0.7)"/></marker>
|
|
4
|
+
</defs>
|
|
5
|
+
<rect x="0" y="0" width="932.113427734375" height="759.1999999999999" fill="white"/>
|
|
6
|
+
<g id="hstack_1"><g id="box_1"><rect x="20" y="20" width="100" height="62" fill="none" stroke="none" stroke-width="1"/><g id="users"><rect x="19.336181640625" y="232.5" width="101.32763671875" height="38" fill="#f3f4f6" stroke="#9ca3af" stroke-width="1"/><g id="text_1"><text x="70" y="255" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="70" dy="0">Users / Mobile</tspan></text></g></g><g id="ops-user"><rect x="28.203857421875" y="508.70000000000005" width="83.59228515625" height="38" fill="#f3f4f6" stroke="#9ca3af" stroke-width="1"/><g id="text_2"><text x="70" y="531.2" text-anchor="middle" fill="#111827" font-size="10" font-weight="bold"><tspan x="70" dy="0">Operations</tspan></text></g></g></g><g id="box_2"><rect x="144" y="20" width="768.113427734375" height="719.1999999999999" fill="white" stroke="#e7157b" stroke-width="2"/><g id="vstack_1"><g id="box_3"><rect x="144" y="20" width="128.0732421875" height="32.8" fill="#e7157b" stroke="#e7157b" stroke-width="0"/><g id="hstack_2"><g id="icon_1"><svg x="152" y="28.4" width="16" height="16" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/AWS-Account_32</title><g fill="none" fill-rule="evenodd"><path fill="#e7157b" d="M0 0h40v40H0z"/><path fill="#fff" d="M24.5 22c1.93 0 3.5 1.57 3.5 3.5S26.43 29 24.5 29 21 27.43 21 25.5s1.57-3.5 3.5-3.5m0 8c2.481 0 4.5-2.019 4.5-4.5S26.981 21 24.5 21a4.505 4.505 0 0 0-4.5 4.5c0 2.481 2.019 4.5 4.5 4.5m1.523-19.12L29.084 17h-6.121zM22.154 18h7.739a.502.502 0 0 0 .447-.724l-3.869-7.738c-.17-.338-.725-.338-.895 0l-3.869 7.738a.503.503 0 0 0 .447.724M11 23h7v-7h-7zm-.5 1h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5M8 32h24V8H8zM32.5 7h-25a.5.5 0 0 0-.5.5v25a.5.5 0 0 0 .5.5h25a.5.5 0 0 0 .5-.5v-25a.5.5 0 0 0-.5-.5"/></g></svg></g><g id="text_3"><text x="219.03662109375" y="40.599999999999994" text-anchor="middle" fill="white" font-size="12" font-weight="bold"><tspan x="219.03662109375" dy="0">AWS Account</tspan></text></g></g></g><g id="vstack_2"><g id="box_4"><rect x="158" y="66.8" width="740.113427734375" height="658.4" fill="white" stroke="#00a4a6" stroke-width="1" stroke-dasharray="6 4"/><g id="vstack_3"><g id="box_5"><rect x="158" y="66.8" width="114.52275390625" height="27.4" fill="#00a4a6" stroke="#00a4a6" stroke-width="0"/><g id="hstack_3"><g id="icon_2"><svg x="164" y="73.5" width="14" height="14" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/Region_32</title><g fill="none" fill-rule="evenodd"><path fill="#00a4a6" d="M0 0h40v40H0z"/><path fill="#fff" d="M14 20.026v-9h15.293l-4.147 4.146a.5.5 0 0 0 0 .708l4.147 4.146zm12.207-4.5 4.647-4.646a.5.5 0 0 0-.354-.854H14V8.97A1.528 1.528 0 0 0 13.495 6c-.845 0-1.532.687-1.532 1.531 0 .67.435 1.235 1.037 1.442v24.053h-3v1h7v-1h-3v-12h16.5a.5.5 0 0 0 .354-.854z"/></g></svg></g><g id="text_4"><text x="224.261376953125" y="84.35" text-anchor="middle" fill="white" font-size="11"><tspan x="224.261376953125" dy="0">ap-northeast-1</tspan></text></g></g></g><g id="hstack_4"><g id="edge-col"><rect x="172" y="108.19999999999999" width="106" height="603" fill="#f9f5ff" stroke="#c084fc" stroke-width="1" stroke-dasharray="6 4"/><g id="vstack_4"><g id="r53"><g id="r53-icon"><svg x="207" y="158.5" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Route-53_48</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h64v64H0z"/><path fill="#fff" d="M38.761 32.527q.862.796.862 2.137 0 1.46-1.049 2.33t-2.82.871a6.9 6.9 0 0 1-2.768-.595v-1.192q1.622.536 2.768.536 1.13 0 1.741-.506.611-.507.611-1.444 0-1.802-2.278-1.802-.714 0-1.414.074v-.983l3.126-3.41h-4.406v-1.221h6.059v1.177l-3.067 3.246a1 1 0 0 1 .149-.015h.149q1.474 0 2.337.797m-8.647-.26q.906.848.907 2.337 0 1.46-1.057 2.36-1.058.901-2.783.901-1.518 0-2.843-.595v-1.192q1.653.536 2.828.536 1.131 0 1.734-.513.603-.514.602-1.482.001-1.057-.565-1.534-.565-.476-1.846-.476-.922 0-2.307.149v-.983l.284-4.453H30.5v1.222h-4.182l-.195 3.023q.819-.15 1.474-.15 1.608 0 2.517.85m11.147 10.697c-3.745.672-7.028 2.182-9.261 3.431-2.232-1.25-5.515-2.76-9.26-3.431-1.032-.185-6.174-1.256-6.174-4.14 0-1.361.497-2.282 1.451-3.924 1.116-1.926 2.646-4.564 2.646-8.226 0-2.564-.659-5.023-1.96-7.32l.269-.331c1.955.95 3.987 1.43 6.053 1.43 2.546 0 4.889-.657 6.975-1.951 2.086 1.294 4.43 1.95 6.976 1.95 2.065 0 4.097-.48 6.053-1.43l.268.331c-1.301 2.298-1.96 4.757-1.96 7.32 0 3.663 1.53 6.3 2.647 8.227.954 1.642 1.451 2.563 1.451 3.925 0 2.883-5.143 3.954-6.174 4.139m4.076-16.29c0-2.415.682-4.73 2.025-6.882a1 1 0 0 0-.074-1.162c-.395-.485-.809-.994-1.218-1.5a1 1 0 0 0-1.261-.246c-1.883 1.04-3.846 1.568-5.833 1.568-2.4 0-4.494-.644-6.406-1.97a1 1 0 0 0-1.139 0c-1.912 1.326-4.007 1.97-6.406 1.97-1.988 0-3.951-.528-5.833-1.568a1 1 0 0 0-1.261.246c-.409.506-.823 1.015-1.219 1.5a1 1 0 0 0-.073 1.162c1.343 2.152 2.024 4.467 2.024 6.882 0 3.124-1.262 5.3-2.377 7.221-1.066 1.84-1.72 3.06-1.72 4.93 0 4.363 5.985 5.778 7.82 6.108 3.75.674 7.024 2.265 9.111 3.48a1 1 0 0 0 1.006 0c2.087-1.215 5.362-2.806 9.112-3.48 1.834-.33 7.82-1.745 7.82-6.108 0-1.87-.654-3.09-1.721-4.93-1.114-1.92-2.377-4.097-2.377-7.221m-3.269 20.785c-4.666.838-8.6 3.296-10.068 4.309-1.468-1.013-5.401-3.47-10.067-4.31-2.33-.418-9.933-2.28-9.933-8.633 0-2.655 1.004-4.387 2.068-6.22.998-1.72 2.03-3.498 2.03-5.931 0-3.667-2.027-6.302-3.157-7.487 1.154-1.405 3.695-4.506 5.088-6.29 2.122 1.935 4.571 2.988 6.996 2.988 2.701 0 4.942-1.065 6.975-3.336 2.033 2.27 4.275 3.336 6.976 3.336 2.425 0 4.874-1.053 6.996-2.988 1.393 1.784 3.934 4.885 5.088 6.29-1.13 1.185-3.157 3.82-3.157 7.487 0 2.433 1.032 4.212 2.03 5.932C50.996 34.438 52 36.17 52 38.825c0 6.354-7.602 8.215-9.932 8.634M51.662 31.6c-.944-1.627-1.759-3.033-1.759-4.927 0-4.002 3.121-6.603 3.15-6.627a1 1 0 0 0 .143-1.414c-.052-.062-5.147-6.24-6.311-7.835a1 1 0 0 0-1.538-.094c-1.917 2.05-4.18 3.18-6.371 3.18-2.416 0-4.322-1.083-6.182-3.513-.379-.495-1.209-.495-1.588 0-1.859 2.43-3.765 3.513-6.181 3.513-2.192 0-4.454-1.13-6.371-3.18a1 1 0 0 0-1.539.094c-1.164 1.596-6.258 7.773-6.31 7.835-.17.206-.25.47-.224.737.028.266.159.51.367.677.032.026 3.15 2.595 3.15 6.627 0 1.894-.816 3.3-1.76 4.927C11.242 33.49 10 35.631 10 38.825c0 5.336 4.328 9.3 11.579 10.604 5.316.954 9.768 4.33 9.813 4.365a1 1 0 0 0 1.218-.001c.044-.034 4.478-3.406 9.811-4.364C49.672 48.125 54 44.16 54 38.825c0-3.194-1.242-5.335-2.338-7.224"/></g></svg></g><g id="text_5"><text x="225" y="205.95" text-anchor="middle" fill="#111827" font-size="9"><tspan x="225" dy="0">Route 53</tspan></text></g></g><g id="edge-row1"><g id="cf"><g id="cf-icon"><svg x="182" y="233.5" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-CloudFront_48</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h64v64H0z"/><path fill="#fff" d="M41.5 43.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2m0-6c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4m-19-5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2m0-6c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4m22.889 20.624a29 29 0 0 0-.704-1.533l-1.789.895c.274.549.524 1.113.76 1.679a19 19 0 0 1-2.628 1.575c.356-.875.666-1.765.946-2.728l-1.92-.558a25.2 25.2 0 0 1-1.87 4.679A19.2 19.2 0 0 1 32.5 52c-3.035 0-5.933-.686-8.629-2.024-1.368-3.361-2.033-6.442-2.033-9.417 0-1.292.225-2.363.484-3.603q.096-.455.192-.932l-1.963-.386q-.092.465-.186.907c-.271 1.293-.527 2.515-.527 4.014 0 2.515.436 5.085 1.316 7.795A19.46 19.46 0 0 1 13 32.5c0-.111.01-.227.012-.339a24 24 0 0 1 4.842-.59l-.05-1.999c-1.635.04-3.11.207-4.641.512.918-7.401 6.049-13.69 13.16-16.065 1.55.799 2.697 1.505 3.812 2.351l1.209-1.594a24 24 0 0 0-2.198-1.477A19.6 19.6 0 0 1 32.5 13c2.532 0 5.032.494 7.349 1.439a33 33 0 0 0-1.606.532l.68 1.881c1.393-.503 2.485-.812 3.648-1.031C48.399 19.341 52 25.667 52 32.5a19.36 19.36 0 0 1-6.611 14.624m-2.381-33.375A21.4 21.4 0 0 0 32.5 11c-2.108 0-4.176.301-6.143.895-8.634 2.569-14.789 10.335-15.312 19.301-.035.429-.045.866-.045 1.304a21.47 21.47 0 0 0 11.354 18.955A21.54 21.54 0 0 0 32.5 54a21.1 21.1 0 0 0 6.937-1.157 21 21 0 0 0 6.209-3.336C50.955 45.399 54 39.2 54 32.5a21.52 21.52 0 0 0-10.992-18.751m-4.624 23.662-1.381 1.447c-2.981-2.843-5.956-4.712-9.366-5.883l.65-1.892c3.692 1.268 6.901 3.279 10.097 6.328m.06-15.047c2.838 4.328 4.436 9.08 4.749 14.124l-1.996.124c-.292-4.693-1.78-9.117-4.425-13.152zm-11.993 4.433-1.678-1.089c1.543-2.376 2.866-3.95 4.563-5.43l1.314 1.508c-1.547 1.349-2.764 2.801-4.199 5.011M34.5 16.5c1.103 0 2 .897 2 2s-.897 2-2 2-2-.897-2-2 .897-2 2-2m0 6c2.206 0 4-1.794 4-4s-1.794-4-4-4-4 1.794-4 4 1.794 4 4 4"/></g></svg></g><g id="text_6"><text x="200" y="280.95" text-anchor="middle" fill="#111827" font-size="9"><tspan x="200" dy="0">CF</tspan></text></g></g><g id="waf"><g id="waf-icon"><svg x="232" y="233.5" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-WAF_48</title><g fill="none" fill-rule="evenodd"><path fill="#dd344c" d="M0 0h64v64H0z"/><path fill="#fff" d="M26.929 40.397a18.6 18.6 0 0 0 3.04 1.692c-.477-2.376-.794-6.487 1.343-10.418 1.593-2.928 1.856-6.254.688-8.681a5.9 5.9 0 0 0-1.922-2.292c.762 1.759 1.19 4.299.038 7.572a1 1 0 0 1-1.825.142c-.331-.616-1.242-2.004-2.283-2.833.408 1.876.667 4.683-.673 6.788a8 8 0 0 0-.201.334c-1.47 2.589-.682 5.97 1.795 7.696m7.542-16.242c.565 2.649.092 5.725-1.401 8.471-2.165 3.981-1.363 8.319-.91 10.025 1.957-.329 6.903-1.557 7.959-5.649 1.014-3.926.4-6.199-.31-7.424-.708 2.544-2.007 3.615-2.074 3.669a1.002 1.002 0 0 1-1.614-.938c.606-3.768-.36-6.39-1.65-8.154M23.65 31.29c1.609-2.527-.074-6.965-.091-7.01a1 1 0 0 1 .932-1.361c1.75 0 3.248 1.355 4.25 2.593.529-3.989-1.877-6.084-1.997-6.184a1.004 1.004 0 0 1-.26-1.191.99.99 0 0 1 1.077-.561c1.474.261 2.773.822 3.85 1.633.955.427 5.726 2.839 6.714 8.7q.04-.264.072-.55a1 1 0 0 1 1.474-.774c.187.103 4.533 2.595 2.384 10.917-1.675 6.488-10.18 7.227-10.541 7.255l-.001-.01c-.022.002-.041.013-.063.013a1 1 0 0 1-.335-.059c-2.054-.734-3.847-1.63-5.33-2.663-3.314-2.31-4.364-6.847-2.39-10.327a10 10 0 0 1 .255-.421m-8.16 12.66 1.62-1.173A18.2 18.2 0 0 1 13.677 33H16v-2h-2.321a18.16 18.16 0 0 1 3.432-9.719l-1.621-1.173A20.16 20.16 0 0 0 11.679 31h-1.68v2h1.677c.186 3.962 1.484 7.731 3.814 10.95m27.257 2.968A18.2 18.2 0 0 1 33 50.351V48h-2v2.351a18.2 18.2 0 0 1-9.75-3.433l-1.172 1.621A20.2 20.2 0 0 0 31 52.351V54h2v-1.649c3.95-.191 7.709-1.489 10.919-3.812zM21.25 17.14A18.2 18.2 0 0 1 31 13.708V16h2v-2.292a18.2 18.2 0 0 1 9.747 3.432l1.172-1.62a20.15 20.15 0 0 0-10.92-3.812V10h-2v1.708a20.16 20.16 0 0 0-10.921 3.812zM52.32 31a20.2 20.2 0 0 0-3.811-10.892l-1.621 1.173A18.2 18.2 0 0 1 50.32 31H48v2h2.323a18.2 18.2 0 0 1-3.435 9.777l1.62 1.173c2.33-3.219 3.629-6.988 3.815-10.95H54v-2zm-7.293-10.584 6.159-6.16-1.414-1.414-6.16 6.16zM18.972 43.642l-6.16 6.16 1.414 1.414 6.16-6.16zm3.442-22.641L11.586 10.173l-1.414 1.414L21 22.415zM43 41.586l10.826 10.827-1.414 1.414L41.586 43z"/></g></svg></g><g id="text_7"><text x="250" y="280.95" text-anchor="middle" fill="#111827" font-size="9"><tspan x="250" dy="0">WAF</tspan></text></g></g></g><g id="s3-static"><g id="s3-static-icon"><svg x="207" y="439.7" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Simple-Storage-Service_48</title><g fill="none" fill-rule="evenodd"><path fill="#7aa116" d="M0 0h64v64H0z"/><path fill="#fff" d="m47.759 33.948.234-1.817c2.173 1.254 2.849 1.99 3.044 2.293-.324.061-1.205.085-3.278-.476M30.499 21c-10.374 0-17.117-2.512-17.5-4.304v-.185c.35-1.119 6.14-4.51 17.5-4.51 11.34 0 17.133 3.38 17.5 4.504v.111C47.725 18.446 40.962 21 30.5 21m15.319 12.362c-4.765-1.565-10.906-4.383-13.224-5.474a2.09 2.09 0 0 0-2.082-1.982A2.097 2.097 0 0 0 28.418 28c0 1.154.94 2.094 2.094 2.094.457 0 .877-.152 1.22-.4 2.4 1.128 8.887 4.104 13.826 5.686l-1.721 13.344C43.583 50.352 38.919 52 30.497 52c-8.425 0-13.092-1.648-13.342-3.249l-3.72-28.937C16.945 21.915 23.749 23 30.5 23c6.75 0 13.554-1.085 17.065-3.185zM50 16.5c0-3.069-8.34-6.5-19.5-6.5S11 13.431 11 16.5v.543l4.174 31.99C15.874 53.516 26.123 54 30.497 54c4.372 0 14.616-.484 15.32-4.993l1.684-13.06c1.277.332 2.31.51 3.115.508.99 0 1.657-.252 2.08-.758.35-.416.489-.94.389-1.476-.228-1.22-1.682-2.509-4.715-4.177l-.1-.055L50 17.044z"/></g></svg></g><g id="text_8"><text x="225" y="487.15" text-anchor="middle" fill="#111827" font-size="9"><tspan x="225" dy="0">Static S3</tspan></text></g></g><g id="edge-row2"><g id="mcf"><g id="mcf-icon"><svg x="182" y="509.70000000000005" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-CloudFront_48</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h64v64H0z"/><path fill="#fff" d="M41.5 43.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2m0-6c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4m-19-5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2m0-6c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4m22.889 20.624a29 29 0 0 0-.704-1.533l-1.789.895c.274.549.524 1.113.76 1.679a19 19 0 0 1-2.628 1.575c.356-.875.666-1.765.946-2.728l-1.92-.558a25.2 25.2 0 0 1-1.87 4.679A19.2 19.2 0 0 1 32.5 52c-3.035 0-5.933-.686-8.629-2.024-1.368-3.361-2.033-6.442-2.033-9.417 0-1.292.225-2.363.484-3.603q.096-.455.192-.932l-1.963-.386q-.092.465-.186.907c-.271 1.293-.527 2.515-.527 4.014 0 2.515.436 5.085 1.316 7.795A19.46 19.46 0 0 1 13 32.5c0-.111.01-.227.012-.339a24 24 0 0 1 4.842-.59l-.05-1.999c-1.635.04-3.11.207-4.641.512.918-7.401 6.049-13.69 13.16-16.065 1.55.799 2.697 1.505 3.812 2.351l1.209-1.594a24 24 0 0 0-2.198-1.477A19.6 19.6 0 0 1 32.5 13c2.532 0 5.032.494 7.349 1.439a33 33 0 0 0-1.606.532l.68 1.881c1.393-.503 2.485-.812 3.648-1.031C48.399 19.341 52 25.667 52 32.5a19.36 19.36 0 0 1-6.611 14.624m-2.381-33.375A21.4 21.4 0 0 0 32.5 11c-2.108 0-4.176.301-6.143.895-8.634 2.569-14.789 10.335-15.312 19.301-.035.429-.045.866-.045 1.304a21.47 21.47 0 0 0 11.354 18.955A21.54 21.54 0 0 0 32.5 54a21.1 21.1 0 0 0 6.937-1.157 21 21 0 0 0 6.209-3.336C50.955 45.399 54 39.2 54 32.5a21.52 21.52 0 0 0-10.992-18.751m-4.624 23.662-1.381 1.447c-2.981-2.843-5.956-4.712-9.366-5.883l.65-1.892c3.692 1.268 6.901 3.279 10.097 6.328m.06-15.047c2.838 4.328 4.436 9.08 4.749 14.124l-1.996.124c-.292-4.693-1.78-9.117-4.425-13.152zm-11.993 4.433-1.678-1.089c1.543-2.376 2.866-3.95 4.563-5.43l1.314 1.508c-1.547 1.349-2.764 2.801-4.199 5.011M34.5 16.5c1.103 0 2 .897 2 2s-.897 2-2 2-2-.897-2-2 .897-2 2-2m0 6c2.206 0 4-1.794 4-4s-1.794-4-4-4-4 1.794-4 4 1.794 4 4 4"/></g></svg></g><g id="text_9"><text x="200" y="557.1500000000001" text-anchor="middle" fill="#111827" font-size="9"><tspan x="200" dy="0">CF</tspan></text></g></g><g id="mwaf"><g id="mwaf-icon"><svg x="232" y="509.70000000000005" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-WAF_48</title><g fill="none" fill-rule="evenodd"><path fill="#dd344c" d="M0 0h64v64H0z"/><path fill="#fff" d="M26.929 40.397a18.6 18.6 0 0 0 3.04 1.692c-.477-2.376-.794-6.487 1.343-10.418 1.593-2.928 1.856-6.254.688-8.681a5.9 5.9 0 0 0-1.922-2.292c.762 1.759 1.19 4.299.038 7.572a1 1 0 0 1-1.825.142c-.331-.616-1.242-2.004-2.283-2.833.408 1.876.667 4.683-.673 6.788a8 8 0 0 0-.201.334c-1.47 2.589-.682 5.97 1.795 7.696m7.542-16.242c.565 2.649.092 5.725-1.401 8.471-2.165 3.981-1.363 8.319-.91 10.025 1.957-.329 6.903-1.557 7.959-5.649 1.014-3.926.4-6.199-.31-7.424-.708 2.544-2.007 3.615-2.074 3.669a1.002 1.002 0 0 1-1.614-.938c.606-3.768-.36-6.39-1.65-8.154M23.65 31.29c1.609-2.527-.074-6.965-.091-7.01a1 1 0 0 1 .932-1.361c1.75 0 3.248 1.355 4.25 2.593.529-3.989-1.877-6.084-1.997-6.184a1.004 1.004 0 0 1-.26-1.191.99.99 0 0 1 1.077-.561c1.474.261 2.773.822 3.85 1.633.955.427 5.726 2.839 6.714 8.7q.04-.264.072-.55a1 1 0 0 1 1.474-.774c.187.103 4.533 2.595 2.384 10.917-1.675 6.488-10.18 7.227-10.541 7.255l-.001-.01c-.022.002-.041.013-.063.013a1 1 0 0 1-.335-.059c-2.054-.734-3.847-1.63-5.33-2.663-3.314-2.31-4.364-6.847-2.39-10.327a10 10 0 0 1 .255-.421m-8.16 12.66 1.62-1.173A18.2 18.2 0 0 1 13.677 33H16v-2h-2.321a18.16 18.16 0 0 1 3.432-9.719l-1.621-1.173A20.16 20.16 0 0 0 11.679 31h-1.68v2h1.677c.186 3.962 1.484 7.731 3.814 10.95m27.257 2.968A18.2 18.2 0 0 1 33 50.351V48h-2v2.351a18.2 18.2 0 0 1-9.75-3.433l-1.172 1.621A20.2 20.2 0 0 0 31 52.351V54h2v-1.649c3.95-.191 7.709-1.489 10.919-3.812zM21.25 17.14A18.2 18.2 0 0 1 31 13.708V16h2v-2.292a18.2 18.2 0 0 1 9.747 3.432l1.172-1.62a20.15 20.15 0 0 0-10.92-3.812V10h-2v1.708a20.16 20.16 0 0 0-10.921 3.812zM52.32 31a20.2 20.2 0 0 0-3.811-10.892l-1.621 1.173A18.2 18.2 0 0 1 50.32 31H48v2h2.323a18.2 18.2 0 0 1-3.435 9.777l1.62 1.173c2.33-3.219 3.629-6.988 3.815-10.95H54v-2zm-7.293-10.584 6.159-6.16-1.414-1.414-6.16 6.16zM18.972 43.642l-6.16 6.16 1.414 1.414 6.16-6.16zm3.442-22.641L11.586 10.173l-1.414 1.414L21 22.415zM43 41.586l10.826 10.827-1.414 1.414L41.586 43z"/></g></svg></g><g id="text_10"><text x="250" y="557.1500000000001" text-anchor="middle" fill="#111827" font-size="9"><tspan x="250" dy="0">WAF</tspan></text></g></g></g></g></g><g id="vstack_5"><g id="hstack_5"><g id="vstack_6"><g id="box_6"><rect x="308" y="164.5" width="190" height="154.6" fill="white" stroke="#8c4fff" stroke-width="2"/><g id="vstack_7"><g id="box_7"><rect x="308" y="164.5" width="95.5263671875" height="34" fill="#8c4fff" stroke="#8c4fff" stroke-width="0"/><g id="hstack_6"><g id="icon_3"><svg x="316" y="172.5" width="18" height="18" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/Virtual-private-cloud-VPC_32</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h40v40H0z"/><path fill="#fff" d="m30.97 21.03-2.943-1.264v10.49c2.545-.353 2.932-2.969 2.948-3.088zm-3.943 9.24V19.76l-3.035 1.272v6.201c.013.054.445 2.767 3.035 3.036m.306-11.723a.5.5 0 0 1 .39.001l3.945 1.692a.5.5 0 0 1 .303.46v6.533c-.183 1.447-1.357 4.063-4.527 4.063-3.075 0-4.254-2.612-4.448-3.994l-.004-6.603c0-.2.12-.383.306-.46zm5.65.637-5.461-2.406-5.53 2.327v7.128c-.001.042-.054 2.868 1.657 4.623.917.941 2.194 1.42 3.795 1.42 1.602 0 2.887-.48 3.819-1.423 1.735-1.758 1.72-4.585 1.72-4.613zM31.98 31.55c-1.127 1.144-2.654 1.725-4.536 1.725-1.884 0-3.404-.58-4.517-1.727-2.005-2.063-1.94-5.197-1.935-5.329v-7.446a.5.5 0 0 1 .305-.46l6.035-2.54a.5.5 0 0 1 .396.003l5.956 2.625c.182.08.299.26.299.457v7.375c.002.125.027 3.255-2.003 5.317m-20.988-7.314h8v1h-8c-2.811 0-4.811-2.016-4.98-5.016A4 4 0 0 1 6 19.841c0-2.509 1.318-4.223 3.817-4.979a8 8 0 0 1-.032-.647c0-2.916 1.577-5.445 4.017-6.445 3.298-1.348 7.042-.894 9.106 1.104a8.2 8.2 0 0 1 1.76 2.485c.609-.45 1.4-.66 2.349-.614 1.78.09 3.149 1.713 3.433 4.007 1.498.124 2.485.883 3.01 2.308l-.937.346c-.428-1.157-1.208-1.673-2.531-1.673a.5.5 0 0 1-.5-.47c-.138-2.338-1.406-3.463-2.526-3.519-.945-.053-1.645.22-2.08.791a.5.5 0 0 1-.472.193.5.5 0 0 1-.395-.323 7.4 7.4 0 0 0-1.807-2.814c-1.788-1.73-5.09-2.099-8.031-.895-2.063.845-3.396 3.011-3.396 5.52 0 .272.035.695.066.958a.5.5 0 0 1-.376.544C8.169 16.29 7 17.678 7 19.841c0 .101-.001.201.009.302.14 2.495 1.703 4.093 3.983 4.093"/></g></svg></g><g id="text_11"><text x="367.76318359375" y="185.7" text-anchor="middle" fill="white" font-size="12" font-weight="bold"><tspan x="367.76318359375" dy="0">BFF VPC</tspan></text></g></g></g><g id="bff-vpc"><g id="bff-alb"><g id="bff-alb-icon"><svg x="322" y="233.5" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Elastic-Load-Balancing_48</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h64v64H0z"/><path fill="#fff" d="M23.5 42C17.71 42 13 37.29 13 31.5S17.71 21 23.5 21 34 25.71 34 31.5 29.29 42 23.5 42M48 48c0 1.654-1.346 3-3 3s-3-1.346-3-3 1.346-3 3-3 3 1.346 3 3m-3-35c1.654 0 3 1.346 3 3s-1.346 3-3 3-3-1.346-3-3 1.346-3 3-3m3 16c1.654 0 3 1.346 3 3s-1.346 3-3 3-3-1.346-3-3 1.346-3 3-3m-12.099 4h7.201A5.01 5.01 0 0 0 48 37c2.757 0 5-2.243 5-5s-2.243-5-5-5a5.01 5.01 0 0 0-4.898 4h-7.127a12.5 12.5 0 0 0-.879-4.144l7.703-6.389A4.94 4.94 0 0 0 45 21c2.757 0 5-2.243 5-5s-2.243-5-5-5-5 2.243-5 5c0 1.224.459 2.331 1.191 3.201l-7.019 5.823C31.977 21.42 28.021 19 23.5 19 16.607 19 11 24.607 11 31.5S16.607 44 23.5 44c4.243 0 7.993-2.129 10.254-5.371l7.437 6.17C40.459 45.669 40 46.776 40 48c0 2.757 2.243 5 5 5s5-2.243 5-5-2.243-5-5-5a4.94 4.94 0 0 0-2.201.533l-8.029-6.66c.574-1.2.966-2.5 1.131-3.873"/></g></svg></g><g id="text_12"><text x="340" y="280.95" text-anchor="middle" fill="#111827" font-size="9"><tspan x="340" dy="0">ALB</tspan></text></g></g><g id="bff"><rect x="388" y="205.2" width="96" height="92.6" fill="white" stroke="#ed7100" stroke-width="1" stroke-dasharray="6 4"/><g id="vstack_8"><g id="box_8"><rect x="388" y="205.2" width="74.87548828125" height="26" fill="#ed7100" stroke="#ed7100" stroke-width="0"/><g id="hstack_7"><g id="icon_4"><svg x="394" y="211.2" width="14" height="14" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/Auto-Scaling-group_32</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h40v40H0z"/><path fill="#fff" d="M18.021 19.495a.5.5 0 0 0-.188-.39l-2.954-2.954-.707.707 2.138 2.137H7v1h9.314l-2.142 2.142.707.707 2.969-2.969a.5.5 0 0 0 .173-.38m15.965-.5h-9.311l2.138-2.137-.707-.707-2.969 2.97a.5.5 0 0 0 .016.77l2.953 2.953.707-.707-2.142-2.142h9.315zm-12.99 12.33V22.01h-1v9.31l-2.138-2.137-.707.707 2.969 2.967a.5.5 0 0 0 .773-.016l2.951-2.95-.707-.708zM17.858 9.836l-.707-.707 2.952-2.95c.182-.233.58-.24.774-.018l2.967 2.968-.707.707-2.141-2.14v9.313h-1V7.7z"/></g></svg></g><g id="text_13"><text x="434.437744140625" y="221.7" text-anchor="middle" fill="white" font-size="10" font-weight="bold"><tspan x="434.437744140625" dy="0">BFF App</tspan></text></g></g></g><g id="hstack_8"><g id="bff-ecs"><g id="bff-ecs-icon"><svg x="396" y="239.2" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Elastic-Container-Service_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="m50 36.382-6-3V25a1 1 0 0 0-.515-.874L35 19.412V12.75l15 8.822zm1.507-16.244-17-10a1.001 1.001 0 0 0-1.507.863v9c0 .362.197.697.515.873L42 25.588V34c0 .38.214.725.553.895l8 4a1 1 0 0 0 .972-.044c.295-.183.475-.504.475-.85V21c0-.355-.188-.683-.493-.863M32 51.828 15 41.439V21.554l14-8.75v6.642l-7.53 4.706A1 1 0 0 0 21 25v13a1 1 0 0 0 .485.857l10 6a1 1 0 0 0 .994.021l10.509-5.732 5.047 2.883zm18.496-10.696-7-4a1 1 0 0 0-.975-.01l-10.498 5.726L23 37.434v-11.88l7.53-4.706A1 1 0 0 0 31 20v-9a1 1 0 0 0-1.53-.847l-16 10A1 1 0 0 0 13 21v21c0 .348.182.671.479.854l18 11a1 1 0 0 0 1.042 0l18-11a1 1 0 0 0-.025-1.722"/></g></svg></g><g id="text_14"><text x="414" y="286.65" text-anchor="middle" fill="#111827" font-size="9"><tspan x="414" dy="0">ECS</tspan></text></g></g><g id="bff-fg"><g id="bff-fg-icon"><svg x="440" y="239.2" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-Fargate_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="M42.467 46.382v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm-4.983 9.764v-3.764l1.993-1v3.764zm-3.987-4.764 1.993 1v3.764l-1.993-1zm-4.984-.236v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm2.99-2.5 1.759.882-1.758.882L21.77 40zm8.971 5 1.758.882-1.758.882L30.742 45zm8.97-5L43.23 40l-1.759.882L39.712 40zm4.433-.012-3.987-2a.99.99 0 0 0-.891 0l-3.987 2a1 1 0 0 0-.551.894v3.882l-3.541-1.776a.99.99 0 0 0-.892 0l-3.54 1.776V40a1 1 0 0 0-.552-.894l-3.987-2a.99.99 0 0 0-.89 0l-3.988 2a1 1 0 0 0-.55.894v6c0 .379.212.725.55.895l3.987 2a1 1 0 0 0 .891 0l3.541-1.777V51c0 .379.214.725.552.895l3.986 2a1 1 0 0 0 .892 0l3.986-2c.338-.17.552-.516.552-.895v-3.882l3.54 1.777a1 1 0 0 0 .892 0l3.987-2c.338-.17.55-.516.55-.895v-6a1 1 0 0 0-.55-.894M54 28.09c0 5.103-11.077 7.856-21.5 7.856S11 33.193 11 28.09c0-2.461 2.68-4.616 7.547-6.067l.568 1.917c-3.776 1.126-6.122 2.716-6.122 4.15 0 2.764 8.343 5.856 19.507 5.856s19.507-3.092 19.507-5.856c0-1.434-2.346-3.024-6.122-4.15l.568-1.917C51.32 23.474 54 25.629 54 28.09M32.5 12.064 40.547 15 32.5 17.936 24.453 15zm8.868 16.584c-1.556.7-4.155 1.516-7.871 1.645V19.701l8.97-3.273v10.485c0 .754-.431 1.435-1.1 1.735m-18.835-1.735V16.428l8.97 3.273v10.592c-3.716-.129-6.315-.945-7.87-1.645-.669-.3-1.1-.981-1.1-1.735m.283 3.56c1.87.842 5.07 1.846 9.684 1.846 4.615 0 7.813-1.004 9.684-1.846 1.383-.622 2.277-2.019 2.277-3.56V15a1 1 0 0 0-.656-.94l-10.964-4a1 1 0 0 0-.682 0l-10.964 4a1 1 0 0 0-.656.94v11.913c0 1.541.894 2.938 2.277 3.56"/></g></svg></g><g id="text_15"><text x="458" y="286.65" text-anchor="middle" fill="#111827" font-size="9"><tspan x="458" dy="0">Fargate</tspan></text></g></g></g></g></g></g></g></g></g><g id="box_9"><rect x="514" y="108.19999999999999" width="301.528564453125" height="267.2" fill="white" stroke="#8c4fff" stroke-width="2"/><g id="vstack_9"><g id="box_10"><rect x="514" y="108.19999999999999" width="126.6958984375" height="34" fill="#8c4fff" stroke="#8c4fff" stroke-width="0"/><g id="hstack_9"><g id="icon_5"><svg x="522" y="116.19999999999999" width="18" height="18" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/Virtual-private-cloud-VPC_32</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h40v40H0z"/><path fill="#fff" d="m30.97 21.03-2.943-1.264v10.49c2.545-.353 2.932-2.969 2.948-3.088zm-3.943 9.24V19.76l-3.035 1.272v6.201c.013.054.445 2.767 3.035 3.036m.306-11.723a.5.5 0 0 1 .39.001l3.945 1.692a.5.5 0 0 1 .303.46v6.533c-.183 1.447-1.357 4.063-4.527 4.063-3.075 0-4.254-2.612-4.448-3.994l-.004-6.603c0-.2.12-.383.306-.46zm5.65.637-5.461-2.406-5.53 2.327v7.128c-.001.042-.054 2.868 1.657 4.623.917.941 2.194 1.42 3.795 1.42 1.602 0 2.887-.48 3.819-1.423 1.735-1.758 1.72-4.585 1.72-4.613zM31.98 31.55c-1.127 1.144-2.654 1.725-4.536 1.725-1.884 0-3.404-.58-4.517-1.727-2.005-2.063-1.94-5.197-1.935-5.329v-7.446a.5.5 0 0 1 .305-.46l6.035-2.54a.5.5 0 0 1 .396.003l5.956 2.625c.182.08.299.26.299.457v7.375c.002.125.027 3.255-2.003 5.317m-20.988-7.314h8v1h-8c-2.811 0-4.811-2.016-4.98-5.016A4 4 0 0 1 6 19.841c0-2.509 1.318-4.223 3.817-4.979a8 8 0 0 1-.032-.647c0-2.916 1.577-5.445 4.017-6.445 3.298-1.348 7.042-.894 9.106 1.104a8.2 8.2 0 0 1 1.76 2.485c.609-.45 1.4-.66 2.349-.614 1.78.09 3.149 1.713 3.433 4.007 1.498.124 2.485.883 3.01 2.308l-.937.346c-.428-1.157-1.208-1.673-2.531-1.673a.5.5 0 0 1-.5-.47c-.138-2.338-1.406-3.463-2.526-3.519-.945-.053-1.645.22-2.08.791a.5.5 0 0 1-.472.193.5.5 0 0 1-.395-.323 7.4 7.4 0 0 0-1.807-2.814c-1.788-1.73-5.09-2.099-8.031-.895-2.063.845-3.396 3.011-3.396 5.52 0 .272.035.695.066.958a.5.5 0 0 1-.376.544C8.169 16.29 7 17.678 7 19.841c0 .101-.001.201.009.302.14 2.495 1.703 4.093 3.983 4.093"/></g></svg></g><g id="text_16"><text x="589.34794921875" y="129.39999999999998" text-anchor="middle" fill="white" font-size="12" font-weight="bold"><tspan x="589.34794921875" dy="0">Platform VPC</tspan></text></g></g></g><g id="hstack_10"><g id="plat-alb"><g id="plat-alb-icon"><svg x="528" y="233.5" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Elastic-Load-Balancing_48</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h64v64H0z"/><path fill="#fff" d="M23.5 42C17.71 42 13 37.29 13 31.5S17.71 21 23.5 21 34 25.71 34 31.5 29.29 42 23.5 42M48 48c0 1.654-1.346 3-3 3s-3-1.346-3-3 1.346-3 3-3 3 1.346 3 3m-3-35c1.654 0 3 1.346 3 3s-1.346 3-3 3-3-1.346-3-3 1.346-3 3-3m3 16c1.654 0 3 1.346 3 3s-1.346 3-3 3-3-1.346-3-3 1.346-3 3-3m-12.099 4h7.201A5.01 5.01 0 0 0 48 37c2.757 0 5-2.243 5-5s-2.243-5-5-5a5.01 5.01 0 0 0-4.898 4h-7.127a12.5 12.5 0 0 0-.879-4.144l7.703-6.389A4.94 4.94 0 0 0 45 21c2.757 0 5-2.243 5-5s-2.243-5-5-5-5 2.243-5 5c0 1.224.459 2.331 1.191 3.201l-7.019 5.823C31.977 21.42 28.021 19 23.5 19 16.607 19 11 24.607 11 31.5S16.607 44 23.5 44c4.243 0 7.993-2.129 10.254-5.371l7.437 6.17C40.459 45.669 40 46.776 40 48c0 2.757 2.243 5 5 5s5-2.243 5-5-2.243-5-5-5a4.94 4.94 0 0 0-2.201.533l-8.029-6.66c.574-1.2.966-2.5 1.131-3.873"/></g></svg></g><g id="text_17"><text x="546" y="280.95" text-anchor="middle" fill="#111827" font-size="9"><tspan x="546" dy="0">ALB</tspan></text></g></g><g id="vstack_10"><g id="api-a"><rect x="604" y="156.2" width="102.68701171875" height="92.6" fill="white" stroke="#ed7100" stroke-width="1" stroke-dasharray="6 4"/><g id="vstack_11"><g id="box_11"><rect x="604" y="156.2" width="102.68701171875" height="26" fill="#ed7100" stroke="#ed7100" stroke-width="0"/><g id="hstack_11"><g id="icon_6"><svg x="610" y="162.2" width="14" height="14" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/Auto-Scaling-group_32</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h40v40H0z"/><path fill="#fff" d="M18.021 19.495a.5.5 0 0 0-.188-.39l-2.954-2.954-.707.707 2.138 2.137H7v1h9.314l-2.142 2.142.707.707 2.969-2.969a.5.5 0 0 0 .173-.38m15.965-.5h-9.311l2.138-2.137-.707-.707-2.969 2.97a.5.5 0 0 0 .016.77l2.953 2.953.707-.707-2.142-2.142h9.315zm-12.99 12.33V22.01h-1v9.31l-2.138-2.137-.707.707 2.969 2.967a.5.5 0 0 0 .773-.016l2.951-2.95-.707-.708zM17.858 9.836l-.707-.707 2.952-2.95c.182-.233.58-.24.774-.018l2.967 2.968-.707.707-2.141-2.14v9.313h-1V7.7z"/></g></svg></g><g id="text_18"><text x="664.343505859375" y="172.7" text-anchor="middle" fill="white" font-size="10" font-weight="bold"><tspan x="664.343505859375" dy="0">API Service A</tspan></text></g></g></g><g id="hstack_12"><g id="api-a-ecs"><g id="api-a-ecs-icon"><svg x="612" y="190.2" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Elastic-Container-Service_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="m50 36.382-6-3V25a1 1 0 0 0-.515-.874L35 19.412V12.75l15 8.822zm1.507-16.244-17-10a1.001 1.001 0 0 0-1.507.863v9c0 .362.197.697.515.873L42 25.588V34c0 .38.214.725.553.895l8 4a1 1 0 0 0 .972-.044c.295-.183.475-.504.475-.85V21c0-.355-.188-.683-.493-.863M32 51.828 15 41.439V21.554l14-8.75v6.642l-7.53 4.706A1 1 0 0 0 21 25v13a1 1 0 0 0 .485.857l10 6a1 1 0 0 0 .994.021l10.509-5.732 5.047 2.883zm18.496-10.696-7-4a1 1 0 0 0-.975-.01l-10.498 5.726L23 37.434v-11.88l7.53-4.706A1 1 0 0 0 31 20v-9a1 1 0 0 0-1.53-.847l-16 10A1 1 0 0 0 13 21v21c0 .348.182.671.479.854l18 11a1 1 0 0 0 1.042 0l18-11a1 1 0 0 0-.025-1.722"/></g></svg></g><g id="text_19"><text x="630" y="237.64999999999998" text-anchor="middle" fill="#111827" font-size="9"><tspan x="630" dy="0">ECS</tspan></text></g></g><g id="api-a-fg"><g id="api-a-fg-icon"><svg x="656" y="190.2" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-Fargate_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="M42.467 46.382v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm-4.983 9.764v-3.764l1.993-1v3.764zm-3.987-4.764 1.993 1v3.764l-1.993-1zm-4.984-.236v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm2.99-2.5 1.759.882-1.758.882L21.77 40zm8.971 5 1.758.882-1.758.882L30.742 45zm8.97-5L43.23 40l-1.759.882L39.712 40zm4.433-.012-3.987-2a.99.99 0 0 0-.891 0l-3.987 2a1 1 0 0 0-.551.894v3.882l-3.541-1.776a.99.99 0 0 0-.892 0l-3.54 1.776V40a1 1 0 0 0-.552-.894l-3.987-2a.99.99 0 0 0-.89 0l-3.988 2a1 1 0 0 0-.55.894v6c0 .379.212.725.55.895l3.987 2a1 1 0 0 0 .891 0l3.541-1.777V51c0 .379.214.725.552.895l3.986 2a1 1 0 0 0 .892 0l3.986-2c.338-.17.552-.516.552-.895v-3.882l3.54 1.777a1 1 0 0 0 .892 0l3.987-2c.338-.17.55-.516.55-.895v-6a1 1 0 0 0-.55-.894M54 28.09c0 5.103-11.077 7.856-21.5 7.856S11 33.193 11 28.09c0-2.461 2.68-4.616 7.547-6.067l.568 1.917c-3.776 1.126-6.122 2.716-6.122 4.15 0 2.764 8.343 5.856 19.507 5.856s19.507-3.092 19.507-5.856c0-1.434-2.346-3.024-6.122-4.15l.568-1.917C51.32 23.474 54 25.629 54 28.09M32.5 12.064 40.547 15 32.5 17.936 24.453 15zm8.868 16.584c-1.556.7-4.155 1.516-7.871 1.645V19.701l8.97-3.273v10.485c0 .754-.431 1.435-1.1 1.735m-18.835-1.735V16.428l8.97 3.273v10.592c-3.716-.129-6.315-.945-7.87-1.645-.669-.3-1.1-.981-1.1-1.735m.283 3.56c1.87.842 5.07 1.846 9.684 1.846 4.615 0 7.813-1.004 9.684-1.846 1.383-.622 2.277-2.019 2.277-3.56V15a1 1 0 0 0-.656-.94l-10.964-4a1 1 0 0 0-.682 0l-10.964 4a1 1 0 0 0-.656.94v11.913c0 1.541.894 2.938 2.277 3.56"/></g></svg></g><g id="text_20"><text x="674" y="237.64999999999998" text-anchor="middle" fill="#111827" font-size="9"><tspan x="674" dy="0">Fargate</tspan></text></g></g></g></g></g><g id="api-b"><rect x="604" y="268.79999999999995" width="101.75244140625" height="92.6" fill="white" stroke="#ed7100" stroke-width="1" stroke-dasharray="6 4"/><g id="vstack_12"><g id="box_12"><rect x="604" y="268.79999999999995" width="101.75244140625" height="26" fill="#ed7100" stroke="#ed7100" stroke-width="0"/><g id="hstack_13"><g id="icon_7"><svg x="610" y="274.79999999999995" width="14" height="14" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/Auto-Scaling-group_32</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h40v40H0z"/><path fill="#fff" d="M18.021 19.495a.5.5 0 0 0-.188-.39l-2.954-2.954-.707.707 2.138 2.137H7v1h9.314l-2.142 2.142.707.707 2.969-2.969a.5.5 0 0 0 .173-.38m15.965-.5h-9.311l2.138-2.137-.707-.707-2.969 2.97a.5.5 0 0 0 .016.77l2.953 2.953.707-.707-2.142-2.142h9.315zm-12.99 12.33V22.01h-1v9.31l-2.138-2.137-.707.707 2.969 2.967a.5.5 0 0 0 .773-.016l2.951-2.95-.707-.708zM17.858 9.836l-.707-.707 2.952-2.95c.182-.233.58-.24.774-.018l2.967 2.968-.707.707-2.141-2.14v9.313h-1V7.7z"/></g></svg></g><g id="text_21"><text x="663.876220703125" y="285.29999999999995" text-anchor="middle" fill="white" font-size="10" font-weight="bold"><tspan x="663.876220703125" dy="0">API Service B</tspan></text></g></g></g><g id="hstack_14"><g id="api-b-ecs"><g id="api-b-ecs-icon"><svg x="612" y="302.79999999999995" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Elastic-Container-Service_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="m50 36.382-6-3V25a1 1 0 0 0-.515-.874L35 19.412V12.75l15 8.822zm1.507-16.244-17-10a1.001 1.001 0 0 0-1.507.863v9c0 .362.197.697.515.873L42 25.588V34c0 .38.214.725.553.895l8 4a1 1 0 0 0 .972-.044c.295-.183.475-.504.475-.85V21c0-.355-.188-.683-.493-.863M32 51.828 15 41.439V21.554l14-8.75v6.642l-7.53 4.706A1 1 0 0 0 21 25v13a1 1 0 0 0 .485.857l10 6a1 1 0 0 0 .994.021l10.509-5.732 5.047 2.883zm18.496-10.696-7-4a1 1 0 0 0-.975-.01l-10.498 5.726L23 37.434v-11.88l7.53-4.706A1 1 0 0 0 31 20v-9a1 1 0 0 0-1.53-.847l-16 10A1 1 0 0 0 13 21v21c0 .348.182.671.479.854l18 11a1 1 0 0 0 1.042 0l18-11a1 1 0 0 0-.025-1.722"/></g></svg></g><g id="text_22"><text x="630" y="350.24999999999994" text-anchor="middle" fill="#111827" font-size="9"><tspan x="630" dy="0">ECS</tspan></text></g></g><g id="api-b-fg"><g id="api-b-fg-icon"><svg x="656" y="302.79999999999995" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-Fargate_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="M42.467 46.382v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm-4.983 9.764v-3.764l1.993-1v3.764zm-3.987-4.764 1.993 1v3.764l-1.993-1zm-4.984-.236v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm2.99-2.5 1.759.882-1.758.882L21.77 40zm8.971 5 1.758.882-1.758.882L30.742 45zm8.97-5L43.23 40l-1.759.882L39.712 40zm4.433-.012-3.987-2a.99.99 0 0 0-.891 0l-3.987 2a1 1 0 0 0-.551.894v3.882l-3.541-1.776a.99.99 0 0 0-.892 0l-3.54 1.776V40a1 1 0 0 0-.552-.894l-3.987-2a.99.99 0 0 0-.89 0l-3.988 2a1 1 0 0 0-.55.894v6c0 .379.212.725.55.895l3.987 2a1 1 0 0 0 .891 0l3.541-1.777V51c0 .379.214.725.552.895l3.986 2a1 1 0 0 0 .892 0l3.986-2c.338-.17.552-.516.552-.895v-3.882l3.54 1.777a1 1 0 0 0 .892 0l3.987-2c.338-.17.55-.516.55-.895v-6a1 1 0 0 0-.55-.894M54 28.09c0 5.103-11.077 7.856-21.5 7.856S11 33.193 11 28.09c0-2.461 2.68-4.616 7.547-6.067l.568 1.917c-3.776 1.126-6.122 2.716-6.122 4.15 0 2.764 8.343 5.856 19.507 5.856s19.507-3.092 19.507-5.856c0-1.434-2.346-3.024-6.122-4.15l.568-1.917C51.32 23.474 54 25.629 54 28.09M32.5 12.064 40.547 15 32.5 17.936 24.453 15zm8.868 16.584c-1.556.7-4.155 1.516-7.871 1.645V19.701l8.97-3.273v10.485c0 .754-.431 1.435-1.1 1.735m-18.835-1.735V16.428l8.97 3.273v10.592c-3.716-.129-6.315-.945-7.87-1.645-.669-.3-1.1-.981-1.1-1.735m.283 3.56c1.87.842 5.07 1.846 9.684 1.846 4.615 0 7.813-1.004 9.684-1.846 1.383-.622 2.277-2.019 2.277-3.56V15a1 1 0 0 0-.656-.94l-10.964-4a1 1 0 0 0-.682 0l-10.964 4a1 1 0 0 0-.656.94v11.913c0 1.541.894 2.938 2.277 3.56"/></g></svg></g><g id="text_23"><text x="674" y="350.24999999999994" text-anchor="middle" fill="#111827" font-size="9"><tspan x="674" dy="0">Fargate</tspan></text></g></g></g></g></g></g><g id="vstack_13"><g id="cache"><g id="cache-icon"><svg x="756.1077880859375" y="162.89999999999998" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-ElastiCache_48</title><g fill="none" fill-rule="evenodd"><path fill="#c925d1" d="M0 0h64v64H0z"/><path fill="#fff" d="M40.05 35.279V30.62c-1.988 1.103-5.194 1.62-8.386 1.62-3.35 0-6.025-.554-7.714-1.517v4.555c0 .953 2.452 2.364 7.714 2.364 5.506 0 8.386-1.54 8.386-2.364m0 6.73v-3.984c-1.988 1.103-5.194 1.62-8.386 1.62-3.35 0-6.025-.554-7.714-1.518v3.882c0 .953 2.452 2.363 7.714 2.363 5.506 0 8.386-1.54 8.386-2.364m0 6.655v-3.91c-1.988 1.103-5.194 1.62-8.386 1.62-3.35 0-6.025-.554-7.714-1.517v3.807c0 .978 2.682 2.334 7.717 2.334 5.504 0 8.383-1.52 8.383-2.334m-16.1-20.79c0 .992 2.681 2.365 7.714 2.365 5.506 0 8.386-1.54 8.386-2.364 0-.825-2.88-2.364-8.386-2.364-5.033 0-7.714 1.373-7.714 2.364m18.1 0c0 .05-.013.097-.016.146h.016v20.644c0 2.995-5.215 4.336-10.383 4.336-5.902 0-9.717-1.702-9.717-4.336V28.019h.013c-.002-.048-.013-.095-.013-.144 0-2.652 3.813-4.366 9.714-4.366 5.17 0 10.386 1.35 10.386 4.366M53 18.005a1 1 0 0 0 1-1v-4.003A1 1 0 0 0 53 12H11a1 1 0 0 0-1 1v4.004a1 1 0 0 0 1 1 1.502 1.502 0 0 1 0 3.003 1 1 0 0 0-1 1.001v16.013a1 1 0 0 0 1 1h8v-2h-4v-2.002h4v-2.002h-5a1 1 0 0 0-1 1v3.003h-1V22.863a3.51 3.51 0 0 0 2.5-3.357 3.51 3.51 0 0 0-2.5-3.358v-2.146h40v2.146a3.51 3.51 0 0 0-2.5 3.358 3.51 3.51 0 0 0 2.5 3.357V37.02h-1v-3.002a1 1 0 0 0-1-1.001h-5v2.002h4v2.001h-4v2.002h8a1 1 0 0 0 1-1.001V22.008a1 1 0 0 0-1-1 1.502 1.502 0 0 1 0-3.003M22 23.01v-6.005a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v13.01a1 1 0 0 0 1 1.001h2v-2.001h-1v-11.01h2v5.005zm24 6.005h-1v2.001h2a1 1 0 0 0 1-1V17.003a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v6.005h2v-5.004h2zm-6-7.006v-5.004a1 1 0 0 0-1-1h-5a1 1 0 0 0-1 1v4.003h2v-3.002h3v4.003zm-11-1v-3.003h-3v4.003h-2v-5.004a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v4.003z"/></g></svg></g><g id="text_24"><text x="774.1077880859375" y="210.34999999999997" text-anchor="middle" fill="#111827" font-size="9"><tspan x="774.1077880859375" dy="0">ElastiCache</tspan></text></g></g><g id="aurora"><g id="aurora-icon"><svg x="756.1077880859375" y="233.49999999999997" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Aurora_48</title><g fill="none" fill-rule="evenodd"><path fill="#c925d1" d="M0 0h64v64H0z"/><path fill="#fff" d="M36.213 16.011h-2.016v-2.005h2.016V12h2.017v2.006h2.016v2.005H38.23v2.006h-2.017zm9.074 8.023h-2.016v-2.006h2.016v-2.005h2.016v2.005h2.017v2.006h-2.017v2.006h-2.016v-2.006m-3.434 22.64c-1.495-3.292-4.482-6.263-7.792-7.75 3.31-1.487 6.297-4.459 7.792-7.75 1.494 3.291 4.482 6.263 7.791 7.75-3.31 1.487-6.297 4.458-7.79 7.75m12.139-8.753c-5.202 0-11.13-5.898-11.13-11.071 0-.555-.452-1.003-1.009-1.003s-1.008.448-1.008 1.003c0 5.173-5.93 11.071-11.13 11.071-.558 0-1.009.448-1.009 1.003s.45 1.003 1.008 1.003c5.202 0 11.13 5.898 11.13 11.07 0 .554.452 1.003 1.01 1.003.556 0 1.007-.45 1.007-1.003 0-5.172 5.93-11.07 11.13-11.07.558 0 1.009-.45 1.009-1.003 0-.555-.45-1.003-1.008-1.003m-31.39-19.904c6.85 0 10.587 1.988 10.587 3.008s-3.737 3.009-10.586 3.009-10.587-1.988-10.587-3.009 3.737-3.008 10.587-3.008m-.35 15.15c-5.012 0-8.62-1.063-10.236-2.19v-7.113c2.367 1.433 6.487 2.176 10.587 2.176s8.22-.743 10.586-2.176v6.484c-1.016 1.406-5.247 2.819-10.936 2.819M33.19 45.975c0 1.435-4.126 3.52-10.59 3.52-6.46 0-10.583-2.085-10.583-3.52v-4.407c2.258 1.354 6.014 2.192 10.276 2.192 2.942 0 5.786-.413 8.01-1.166l-.651-1.898c-2.019.682-4.633 1.058-7.359 1.058-5.39 0-9.252-1.402-10.276-2.76v-5.707c2.411 1.176 6.113 1.885 10.237 1.885 3.92 0 8.34-.725 10.936-2.269v2.162h2.016v-14.04c0-3.292-6.34-5.014-12.602-5.014S10 17.733 10 21.025v24.95c0 3.59 6.49 5.526 12.598 5.526 6.112 0 12.607-1.937 12.607-5.526v-2.887h-2.016z"/></g></svg></g><g id="text_25"><text x="774.1077880859375" y="280.95" text-anchor="middle" fill="#111827" font-size="9"><tspan x="774.1077880859375" dy="0">Aurora</tspan></text></g></g><g id="dynamo"><g id="dynamo-icon"><svg x="756.1077880859375" y="304.09999999999997" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-DynamoDB_48</title><g fill="none" fill-rule="evenodd"><path fill="#c925d1" d="M0 0h64v64H0z"/><path fill="#fff" d="M46.586 25.25H43a1 1 0 0 1-.822-.435 1.02 1.02 0 0 1-.114-.931l2.493-6.722h-8.913l-4.091 9.098H36c.32 0 .623.156.812.42.187.264.239.602.136.91l-3.66 11.101zm3.12-.297L31.709 43.15a.99.99 0 0 1-1.232.146 1.014 1.014 0 0 1-.423-1.18l4.56-13.833H30a1 1 0 0 1-.841-.463 1.02 1.02 0 0 1-.07-.966l5-11.12a1 1 0 0 1 .91-.593h11c.329 0 .636.163.823.435.187.273.23.62.115.931l-2.494 6.721H49a1 1 0 0 1 .924.624c.155.378.069.813-.217 1.102M41.002 44.22c-2.71 1.886-7.687 2.882-12.468 2.882-4.816 0-9.837-1.01-12.533-2.924l.001 3.816c0 1.664 4.768 3.984 12.532 3.984 7.495 0 12.468-2.702 12.468-4.49zm2.064-3.27c0 .187-.032.367-.064.546v5.993C43 51.079 36.51 54 28.533 54c-6.903 0-13.871-1.89-14.473-5.5h-.059L14 43.445V16.151h.001c0-3.996 7.487-6.151 14.532-6.151 3.94 0 7.73.64 10.397 1.756l-.766 1.868c-2.432-1.019-5.943-1.602-9.631-1.602-7.764 0-12.532 2.405-12.532 4.13 0 1.724 4.768 4.129 12.532 4.129.195 0 .399 0 .596-.007l.078 2.02c-.225.009-.45.009-.674.009-4.817 0-9.837-1.01-12.533-2.924v4.358h.001v.017c.005.53.489 1.143 1.364 1.72 1.982 1.288 5.55 2.168 9.539 2.351l-.091 2.02c-4.126-.19-7.75-1.069-10.086-2.416-.31.298-.726 1.056-.726 1.467 0 1.724 4.768 4.129 12.532 4.129.738 0 1.465-.025 2.162-.075l.14 2.017c-.743.054-1.518.08-2.302.08-4.817 0-9.837-1.009-12.533-2.924v3.67h.001c.005.547.489 1.16 1.364 1.737 2.268 1.474 6.549 2.393 11.168 2.393h.33v2.022h-.33c-4.778 0-9.86-1.008-12.532-2.543-.322.298 0 1.01 0 1.548 0 1.725 4.768 4.13 12.532 4.13s12.532-2.405 12.532-4.13c0-.61-.6-1.174-1.092-1.538-.41.247-.86.483-1.372.7l-.768-1.868c.53-.223.99-.463 1.364-.711 1.1-.734 1.804-1.779 1.804-2.175h2c0 .94-.621 1.947-1.417 2.775 1.192 1.04 1.48 2.078 1.48 2.817M17.142 48.39c.791.408 1.716.772 2.752 1.08l.564-1.94a14 14 0 0 1-2.406-.94zm2.752-11.05.564-1.94c-.916-.272-1.726-.589-2.406-.94l-.91 1.799c.791.41 1.716.772 2.752 1.08m-2.752-13.21.91-1.801c.68.352 1.49.668 2.406.94l-.564 1.94a16 16 0 0 1-2.752-1.08"/></g></svg></g><g id="text_26"><text x="774.1077880859375" y="351.54999999999995" text-anchor="middle" fill="#111827" font-size="9"><tspan x="774.1077880859375" dy="0">DynamoDB</tspan></text></g></g></g></g></g></g></g><g id="hstack_15"><g id="box_13"><rect x="308" y="389.4" width="257.5146484375" height="257.2" fill="white" stroke="#8c4fff" stroke-width="2"/><g id="vstack_14"><g id="box_14"><rect x="308" y="389.4" width="156.3056640625" height="34" fill="#8c4fff" stroke="#8c4fff" stroke-width="0"/><g id="hstack_16"><g id="icon_8"><svg x="316" y="397.4" width="18" height="18" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/Virtual-private-cloud-VPC_32</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h40v40H0z"/><path fill="#fff" d="m30.97 21.03-2.943-1.264v10.49c2.545-.353 2.932-2.969 2.948-3.088zm-3.943 9.24V19.76l-3.035 1.272v6.201c.013.054.445 2.767 3.035 3.036m.306-11.723a.5.5 0 0 1 .39.001l3.945 1.692a.5.5 0 0 1 .303.46v6.533c-.183 1.447-1.357 4.063-4.527 4.063-3.075 0-4.254-2.612-4.448-3.994l-.004-6.603c0-.2.12-.383.306-.46zm5.65.637-5.461-2.406-5.53 2.327v7.128c-.001.042-.054 2.868 1.657 4.623.917.941 2.194 1.42 3.795 1.42 1.602 0 2.887-.48 3.819-1.423 1.735-1.758 1.72-4.585 1.72-4.613zM31.98 31.55c-1.127 1.144-2.654 1.725-4.536 1.725-1.884 0-3.404-.58-4.517-1.727-2.005-2.063-1.94-5.197-1.935-5.329v-7.446a.5.5 0 0 1 .305-.46l6.035-2.54a.5.5 0 0 1 .396.003l5.956 2.625c.182.08.299.26.299.457v7.375c.002.125.027 3.255-2.003 5.317m-20.988-7.314h8v1h-8c-2.811 0-4.811-2.016-4.98-5.016A4 4 0 0 1 6 19.841c0-2.509 1.318-4.223 3.817-4.979a8 8 0 0 1-.032-.647c0-2.916 1.577-5.445 4.017-6.445 3.298-1.348 7.042-.894 9.106 1.104a8.2 8.2 0 0 1 1.76 2.485c.609-.45 1.4-.66 2.349-.614 1.78.09 3.149 1.713 3.433 4.007 1.498.124 2.485.883 3.01 2.308l-.937.346c-.428-1.157-1.208-1.673-2.531-1.673a.5.5 0 0 1-.5-.47c-.138-2.338-1.406-3.463-2.526-3.519-.945-.053-1.645.22-2.08.791a.5.5 0 0 1-.472.193.5.5 0 0 1-.395-.323 7.4 7.4 0 0 0-1.807-2.814c-1.788-1.73-5.09-2.099-8.031-.895-2.063.845-3.396 3.011-3.396 5.52 0 .272.035.695.066.958a.5.5 0 0 1-.376.544C8.169 16.29 7 17.678 7 19.841c0 .101-.001.201.009.302.14 2.495 1.703 4.093 3.983 4.093"/></g></svg></g><g id="text_27"><text x="398.15283203125" y="410.6" text-anchor="middle" fill="white" font-size="12" font-weight="bold"><tspan x="398.15283203125" dy="0">Management VPC</tspan></text></g></g></g><g id="hstack_17"><g id="mgmt-alb"><g id="mgmt-alb-icon"><svg x="322" y="509.7" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Elastic-Load-Balancing_48</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h64v64H0z"/><path fill="#fff" d="M23.5 42C17.71 42 13 37.29 13 31.5S17.71 21 23.5 21 34 25.71 34 31.5 29.29 42 23.5 42M48 48c0 1.654-1.346 3-3 3s-3-1.346-3-3 1.346-3 3-3 3 1.346 3 3m-3-35c1.654 0 3 1.346 3 3s-1.346 3-3 3-3-1.346-3-3 1.346-3 3-3m3 16c1.654 0 3 1.346 3 3s-1.346 3-3 3-3-1.346-3-3 1.346-3 3-3m-12.099 4h7.201A5.01 5.01 0 0 0 48 37c2.757 0 5-2.243 5-5s-2.243-5-5-5a5.01 5.01 0 0 0-4.898 4h-7.127a12.5 12.5 0 0 0-.879-4.144l7.703-6.389A4.94 4.94 0 0 0 45 21c2.757 0 5-2.243 5-5s-2.243-5-5-5-5 2.243-5 5c0 1.224.459 2.331 1.191 3.201l-7.019 5.823C31.977 21.42 28.021 19 23.5 19 16.607 19 11 24.607 11 31.5S16.607 44 23.5 44c4.243 0 7.993-2.129 10.254-5.371l7.437 6.17C40.459 45.669 40 46.776 40 48c0 2.757 2.243 5 5 5s5-2.243 5-5-2.243-5-5-5a4.94 4.94 0 0 0-2.201.533l-8.029-6.66c.574-1.2.966-2.5 1.131-3.873"/></g></svg></g><g id="text_28"><text x="340" y="557.1500000000001" text-anchor="middle" fill="#111827" font-size="9"><tspan x="340" dy="0">ALB</tspan></text></g></g><g id="vstack_15"><g id="cms-app"><rect x="388" y="437.4" width="96" height="92.6" fill="white" stroke="#ed7100" stroke-width="1" stroke-dasharray="6 4"/><g id="vstack_16"><g id="box_15"><rect x="388" y="437.4" width="80.2734375" height="26" fill="#ed7100" stroke="#ed7100" stroke-width="0"/><g id="hstack_18"><g id="icon_9"><svg x="394" y="443.4" width="14" height="14" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/Auto-Scaling-group_32</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h40v40H0z"/><path fill="#fff" d="M18.021 19.495a.5.5 0 0 0-.188-.39l-2.954-2.954-.707.707 2.138 2.137H7v1h9.314l-2.142 2.142.707.707 2.969-2.969a.5.5 0 0 0 .173-.38m15.965-.5h-9.311l2.138-2.137-.707-.707-2.969 2.97a.5.5 0 0 0 .016.77l2.953 2.953.707-.707-2.142-2.142h9.315zm-12.99 12.33V22.01h-1v9.31l-2.138-2.137-.707.707 2.969 2.967a.5.5 0 0 0 .773-.016l2.951-2.95-.707-.708zM17.858 9.836l-.707-.707 2.952-2.95c.182-.233.58-.24.774-.018l2.967 2.968-.707.707-2.141-2.14v9.313h-1V7.7z"/></g></svg></g><g id="text_29"><text x="437.13671875" y="453.9" text-anchor="middle" fill="white" font-size="10" font-weight="bold"><tspan x="437.13671875" dy="0">CMS App</tspan></text></g></g></g><g id="hstack_19"><g id="cms-app-ecs"><g id="cms-app-ecs-icon"><svg x="396" y="471.4" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Elastic-Container-Service_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="m50 36.382-6-3V25a1 1 0 0 0-.515-.874L35 19.412V12.75l15 8.822zm1.507-16.244-17-10a1.001 1.001 0 0 0-1.507.863v9c0 .362.197.697.515.873L42 25.588V34c0 .38.214.725.553.895l8 4a1 1 0 0 0 .972-.044c.295-.183.475-.504.475-.85V21c0-.355-.188-.683-.493-.863M32 51.828 15 41.439V21.554l14-8.75v6.642l-7.53 4.706A1 1 0 0 0 21 25v13a1 1 0 0 0 .485.857l10 6a1 1 0 0 0 .994.021l10.509-5.732 5.047 2.883zm18.496-10.696-7-4a1 1 0 0 0-.975-.01l-10.498 5.726L23 37.434v-11.88l7.53-4.706A1 1 0 0 0 31 20v-9a1 1 0 0 0-1.53-.847l-16 10A1 1 0 0 0 13 21v21c0 .348.182.671.479.854l18 11a1 1 0 0 0 1.042 0l18-11a1 1 0 0 0-.025-1.722"/></g></svg></g><g id="text_30"><text x="414" y="518.85" text-anchor="middle" fill="#111827" font-size="9"><tspan x="414" dy="0">ECS</tspan></text></g></g><g id="cms-app-fg"><g id="cms-app-fg-icon"><svg x="440" y="471.4" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-Fargate_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="M42.467 46.382v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm-4.983 9.764v-3.764l1.993-1v3.764zm-3.987-4.764 1.993 1v3.764l-1.993-1zm-4.984-.236v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm2.99-2.5 1.759.882-1.758.882L21.77 40zm8.971 5 1.758.882-1.758.882L30.742 45zm8.97-5L43.23 40l-1.759.882L39.712 40zm4.433-.012-3.987-2a.99.99 0 0 0-.891 0l-3.987 2a1 1 0 0 0-.551.894v3.882l-3.541-1.776a.99.99 0 0 0-.892 0l-3.54 1.776V40a1 1 0 0 0-.552-.894l-3.987-2a.99.99 0 0 0-.89 0l-3.988 2a1 1 0 0 0-.55.894v6c0 .379.212.725.55.895l3.987 2a1 1 0 0 0 .891 0l3.541-1.777V51c0 .379.214.725.552.895l3.986 2a1 1 0 0 0 .892 0l3.986-2c.338-.17.552-.516.552-.895v-3.882l3.54 1.777a1 1 0 0 0 .892 0l3.987-2c.338-.17.55-.516.55-.895v-6a1 1 0 0 0-.55-.894M54 28.09c0 5.103-11.077 7.856-21.5 7.856S11 33.193 11 28.09c0-2.461 2.68-4.616 7.547-6.067l.568 1.917c-3.776 1.126-6.122 2.716-6.122 4.15 0 2.764 8.343 5.856 19.507 5.856s19.507-3.092 19.507-5.856c0-1.434-2.346-3.024-6.122-4.15l.568-1.917C51.32 23.474 54 25.629 54 28.09M32.5 12.064 40.547 15 32.5 17.936 24.453 15zm8.868 16.584c-1.556.7-4.155 1.516-7.871 1.645V19.701l8.97-3.273v10.485c0 .754-.431 1.435-1.1 1.735m-18.835-1.735V16.428l8.97 3.273v10.592c-3.716-.129-6.315-.945-7.87-1.645-.669-.3-1.1-.981-1.1-1.735m.283 3.56c1.87.842 5.07 1.846 9.684 1.846 4.615 0 7.813-1.004 9.684-1.846 1.383-.622 2.277-2.019 2.277-3.56V15a1 1 0 0 0-.656-.94l-10.964-4a1 1 0 0 0-.682 0l-10.964 4a1 1 0 0 0-.656.94v11.913c0 1.541.894 2.938 2.277 3.56"/></g></svg></g><g id="text_31"><text x="458" y="518.85" text-anchor="middle" fill="#111827" font-size="9"><tspan x="458" dy="0">Fargate</tspan></text></g></g></g></g></g><g id="cms-admin"><rect x="388" y="540" width="97.5146484375" height="92.6" fill="white" stroke="#ed7100" stroke-width="1" stroke-dasharray="6 4"/><g id="vstack_17"><g id="box_16"><rect x="388" y="540" width="97.5146484375" height="26" fill="#ed7100" stroke="#ed7100" stroke-width="0"/><g id="hstack_20"><g id="icon_10"><svg x="394" y="546" width="14" height="14" viewBox="0 0 40 40"><title>Icon-Architecture-Group/32/Auto-Scaling-group_32</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h40v40H0z"/><path fill="#fff" d="M18.021 19.495a.5.5 0 0 0-.188-.39l-2.954-2.954-.707.707 2.138 2.137H7v1h9.314l-2.142 2.142.707.707 2.969-2.969a.5.5 0 0 0 .173-.38m15.965-.5h-9.311l2.138-2.137-.707-.707-2.969 2.97a.5.5 0 0 0 .016.77l2.953 2.953.707-.707-2.142-2.142h9.315zm-12.99 12.33V22.01h-1v9.31l-2.138-2.137-.707.707 2.969 2.967a.5.5 0 0 0 .773-.016l2.951-2.95-.707-.708zM17.858 9.836l-.707-.707 2.952-2.95c.182-.233.58-.24.774-.018l2.967 2.968-.707.707-2.141-2.14v9.313h-1V7.7z"/></g></svg></g><g id="text_32"><text x="445.75732421875" y="556.5" text-anchor="middle" fill="white" font-size="10" font-weight="bold"><tspan x="445.75732421875" dy="0">Admin Panel</tspan></text></g></g></g><g id="hstack_21"><g id="cms-admin-ecs"><g id="cms-admin-ecs-icon"><svg x="396" y="574" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Elastic-Container-Service_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="m50 36.382-6-3V25a1 1 0 0 0-.515-.874L35 19.412V12.75l15 8.822zm1.507-16.244-17-10a1.001 1.001 0 0 0-1.507.863v9c0 .362.197.697.515.873L42 25.588V34c0 .38.214.725.553.895l8 4a1 1 0 0 0 .972-.044c.295-.183.475-.504.475-.85V21c0-.355-.188-.683-.493-.863M32 51.828 15 41.439V21.554l14-8.75v6.642l-7.53 4.706A1 1 0 0 0 21 25v13a1 1 0 0 0 .485.857l10 6a1 1 0 0 0 .994.021l10.509-5.732 5.047 2.883zm18.496-10.696-7-4a1 1 0 0 0-.975-.01l-10.498 5.726L23 37.434v-11.88l7.53-4.706A1 1 0 0 0 31 20v-9a1 1 0 0 0-1.53-.847l-16 10A1 1 0 0 0 13 21v21c0 .348.182.671.479.854l18 11a1 1 0 0 0 1.042 0l18-11a1 1 0 0 0-.025-1.722"/></g></svg></g><g id="text_33"><text x="414" y="621.45" text-anchor="middle" fill="#111827" font-size="9"><tspan x="414" dy="0">ECS</tspan></text></g></g><g id="cms-admin-fg"><g id="cms-admin-fg-icon"><svg x="440" y="574" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-Fargate_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="M42.467 46.382v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm-4.983 9.764v-3.764l1.993-1v3.764zm-3.987-4.764 1.993 1v3.764l-1.993-1zm-4.984-.236v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm2.99-2.5 1.759.882-1.758.882L21.77 40zm8.971 5 1.758.882-1.758.882L30.742 45zm8.97-5L43.23 40l-1.759.882L39.712 40zm4.433-.012-3.987-2a.99.99 0 0 0-.891 0l-3.987 2a1 1 0 0 0-.551.894v3.882l-3.541-1.776a.99.99 0 0 0-.892 0l-3.54 1.776V40a1 1 0 0 0-.552-.894l-3.987-2a.99.99 0 0 0-.89 0l-3.988 2a1 1 0 0 0-.55.894v6c0 .379.212.725.55.895l3.987 2a1 1 0 0 0 .891 0l3.541-1.777V51c0 .379.214.725.552.895l3.986 2a1 1 0 0 0 .892 0l3.986-2c.338-.17.552-.516.552-.895v-3.882l3.54 1.777a1 1 0 0 0 .892 0l3.987-2c.338-.17.55-.516.55-.895v-6a1 1 0 0 0-.55-.894M54 28.09c0 5.103-11.077 7.856-21.5 7.856S11 33.193 11 28.09c0-2.461 2.68-4.616 7.547-6.067l.568 1.917c-3.776 1.126-6.122 2.716-6.122 4.15 0 2.764 8.343 5.856 19.507 5.856s19.507-3.092 19.507-5.856c0-1.434-2.346-3.024-6.122-4.15l.568-1.917C51.32 23.474 54 25.629 54 28.09M32.5 12.064 40.547 15 32.5 17.936 24.453 15zm8.868 16.584c-1.556.7-4.155 1.516-7.871 1.645V19.701l8.97-3.273v10.485c0 .754-.431 1.435-1.1 1.735m-18.835-1.735V16.428l8.97 3.273v10.592c-3.716-.129-6.315-.945-7.87-1.645-.669-.3-1.1-.981-1.1-1.735m.283 3.56c1.87.842 5.07 1.846 9.684 1.846 4.615 0 7.813-1.004 9.684-1.846 1.383-.622 2.277-2.019 2.277-3.56V15a1 1 0 0 0-.656-.94l-10.964-4a1 1 0 0 0-.682 0l-10.964 4a1 1 0 0 0-.656.94v11.913c0 1.541.894 2.938 2.277 3.56"/></g></svg></g><g id="text_34"><text x="458" y="621.45" text-anchor="middle" fill="#111827" font-size="9"><tspan x="458" dy="0">Fargate</tspan></text></g></g></g></g></g></g><g id="mgmt-batch"><g id="mgmt-batch-icon"><svg x="515.5146484375" y="509.7" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-Fargate_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="M42.467 46.382v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm-4.983 9.764v-3.764l1.993-1v3.764zm-3.987-4.764 1.993 1v3.764l-1.993-1zm-4.984-.236v-3.764l1.994-1v3.764zm-3.987-4.764 1.994 1v3.764l-1.994-1zm2.99-2.5 1.759.882-1.758.882L21.77 40zm8.971 5 1.758.882-1.758.882L30.742 45zm8.97-5L43.23 40l-1.759.882L39.712 40zm4.433-.012-3.987-2a.99.99 0 0 0-.891 0l-3.987 2a1 1 0 0 0-.551.894v3.882l-3.541-1.776a.99.99 0 0 0-.892 0l-3.54 1.776V40a1 1 0 0 0-.552-.894l-3.987-2a.99.99 0 0 0-.89 0l-3.988 2a1 1 0 0 0-.55.894v6c0 .379.212.725.55.895l3.987 2a1 1 0 0 0 .891 0l3.541-1.777V51c0 .379.214.725.552.895l3.986 2a1 1 0 0 0 .892 0l3.986-2c.338-.17.552-.516.552-.895v-3.882l3.54 1.777a1 1 0 0 0 .892 0l3.987-2c.338-.17.55-.516.55-.895v-6a1 1 0 0 0-.55-.894M54 28.09c0 5.103-11.077 7.856-21.5 7.856S11 33.193 11 28.09c0-2.461 2.68-4.616 7.547-6.067l.568 1.917c-3.776 1.126-6.122 2.716-6.122 4.15 0 2.764 8.343 5.856 19.507 5.856s19.507-3.092 19.507-5.856c0-1.434-2.346-3.024-6.122-4.15l.568-1.917C51.32 23.474 54 25.629 54 28.09M32.5 12.064 40.547 15 32.5 17.936 24.453 15zm8.868 16.584c-1.556.7-4.155 1.516-7.871 1.645V19.701l8.97-3.273v10.485c0 .754-.431 1.435-1.1 1.735m-18.835-1.735V16.428l8.97 3.273v10.592c-3.716-.129-6.315-.945-7.87-1.645-.669-.3-1.1-.981-1.1-1.735m.283 3.56c1.87.842 5.07 1.846 9.684 1.846 4.615 0 7.813-1.004 9.684-1.846 1.383-.622 2.277-2.019 2.277-3.56V15a1 1 0 0 0-.656-.94l-10.964-4a1 1 0 0 0-.682 0l-10.964 4a1 1 0 0 0-.656.94v11.913c0 1.541.894 2.938 2.277 3.56"/></g></svg></g><g id="text_35"><text x="533.5146484375" y="557.1500000000001" text-anchor="middle" fill="#111827" font-size="9"><tspan x="533.5146484375" dy="0">Batch</tspan></text></g></g></g></g></g><g id="box_17"><rect x="581.5146484375" y="389.4" width="76.881494140625" height="131.2" fill="none" stroke="none" stroke-width="1"/><g id="evt-row"><g id="eb"><g id="eb-icon"><svg x="756.1077880859375" y="399.4" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-EventBridge_48</title><g fill="none" fill-rule="evenodd"><path fill="#e7157b" d="M0 0h64v64H0z"/><path fill="#fff" d="M43.262 52c-1.566 0-2.84-1.264-2.84-2.818s1.274-2.818 2.84-2.818 2.839 1.264 2.839 2.818S44.827 52 43.26 52m-6.718-13H28.4l-4.072-7 4.072-7h8.144l4.072 7zM22.746 17.636c-1.566 0-2.84-1.264-2.84-2.818S21.18 12 22.746 12s2.84 1.264 2.84 2.818-1.275 2.818-2.84 2.818m20.516 26.728c-.542 0-1.055.109-1.543.272l-3.103-5.198 4.036-6.938c.18-.31.18-.69 0-1l-4.654-8c-.18-.31-.512-.5-.873-.5h-8.324l-2.777-4.651c.963-.881 1.576-2.132 1.576-3.531 0-2.656-2.177-4.818-4.854-4.818s-4.855 2.162-4.855 4.818c0 2.657 2.177 4.818 4.855 4.818.542 0 1.055-.109 1.542-.272l2.566 4.295-4.561 7.841c-.18.31-.18.69 0 1l4.653 8c.18.31.512.5.873.5h9.306c.026 0 .05-.008.075-.01l2.783 4.661c-.962.881-1.575 2.132-1.575 3.531 0 2.656 2.177 4.818 4.854 4.818s4.854-2.162 4.854-4.818c0-2.657-2.177-4.818-4.854-4.818m4.672-18.728c-1.566 0-2.84-1.264-2.84-2.818S46.367 20 47.933 20c1.564 0 2.839 1.264 2.839 2.818s-1.275 2.818-2.84 2.818m3.045.903c1.094-.884 1.809-2.214 1.809-3.721 0-2.656-2.177-4.818-4.854-4.818a4.8 4.8 0 0 0-1.8.353l-2.73-3.921c-.189-.27-.499-.432-.83-.432h-9.067v2h8.54l2.41 3.466a4.78 4.78 0 0 0-1.379 3.352c0 2.657 2.178 4.818 4.856 4.818.434 0 .848-.075 1.25-.182L51.83 32l-3.85 6.616 1.746 1 4.139-7.116c.18-.31.18-.69 0-1zM17.71 43.636c-1.566 0-2.84-1.264-2.84-2.818S16.142 38 17.708 38c1.564 0 2.839 1.264 2.839 2.818s-1.275 2.818-2.84 2.818m2.913 1.011c1.17-.88 1.94-2.261 1.94-3.829 0-2.656-2.177-4.818-4.854-4.818-.7 0-1.364.155-1.965.421L13.17 32l4.472-7.689-1.745-1-4.763 8.189c-.18.31-.18.69 0 1l2.974 5.114c-.771.854-1.256 1.969-1.256 3.204 0 2.657 2.178 4.818 4.855 4.818.368 0 .723-.048 1.066-.125l2.821 4.057c.189.27.498.432.83.432h9.067v-2h-8.537z"/></g></svg></g><g id="text_36"><text x="774.1077880859375" y="446.84999999999997" text-anchor="middle" fill="#111827" font-size="9"><tspan x="774.1077880859375" dy="0">EventBridge</tspan></text></g></g><g id="evt-handler"><g id="evt-handler-icon"><svg x="756.1077880859375" y="460" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-Lambda_48</title><g fill="none" fill-rule="evenodd"><path fill="#ed7100" d="M0 0h64v64H0z"/><path fill="#fff" d="M22.68 52h-9.106l10.264-21.59 4.562 9.451zm2.047-24.333a.99.99 0 0 0-.896-.564h-.003a.99.99 0 0 0-.896.569L11.097 52.569c-.147.31-.126.674.057.965.181.29.5.466.842.466H23.31a1 1 0 0 0 .9-.572l6.194-13.144a1 1 0 0 0-.005-.864zM51.008 52h-9.022L26.955 19.578a1 1 0 0 0-.903-.578h-5.924l.007-7h11.68l14.96 32.42c.163.354.516.58.904.58h3.33zm.996-9h-3.69l-14.96-32.42a1 1 0 0 0-.903-.58H19.14a1 1 0 0 0-.996.999l-.008 9A.993.993 0 0 0 19.131 21h6.286l15.03 32.422a1 1 0 0 0 .903.578h10.654c.55 0 .996-.448.996-1v-9c0-.552-.445-1-.996-1"/></g></svg></g><g id="text_37"><text x="774.1077880859375" y="507.45" text-anchor="middle" fill="#111827" font-size="9"><tspan x="774.1077880859375" dy="0">Handler</tspan></text></g></g></g></g></g><g id="hstack_22"><g id="s3-logs"><g id="s3-logs-icon"><svg x="308" y="660.5999999999999" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Simple-Storage-Service_48</title><g fill="none" fill-rule="evenodd"><path fill="#7aa116" d="M0 0h64v64H0z"/><path fill="#fff" d="m47.759 33.948.234-1.817c2.173 1.254 2.849 1.99 3.044 2.293-.324.061-1.205.085-3.278-.476M30.499 21c-10.374 0-17.117-2.512-17.5-4.304v-.185c.35-1.119 6.14-4.51 17.5-4.51 11.34 0 17.133 3.38 17.5 4.504v.111C47.725 18.446 40.962 21 30.5 21m15.319 12.362c-4.765-1.565-10.906-4.383-13.224-5.474a2.09 2.09 0 0 0-2.082-1.982A2.097 2.097 0 0 0 28.418 28c0 1.154.94 2.094 2.094 2.094.457 0 .877-.152 1.22-.4 2.4 1.128 8.887 4.104 13.826 5.686l-1.721 13.344C43.583 50.352 38.919 52 30.497 52c-8.425 0-13.092-1.648-13.342-3.249l-3.72-28.937C16.945 21.915 23.749 23 30.5 23c6.75 0 13.554-1.085 17.065-3.185zM50 16.5c0-3.069-8.34-6.5-19.5-6.5S11 13.431 11 16.5v.543l4.174 31.99C15.874 53.516 26.123 54 30.497 54c4.372 0 14.616-.484 15.32-4.993l1.684-13.06c1.277.332 2.31.51 3.115.508.99 0 1.657-.252 2.08-.758.35-.416.489-.94.389-1.476-.228-1.22-1.682-2.509-4.715-4.177l-.1-.055L50 17.044z"/></g></svg></g><g id="text_38"><text x="326" y="708.05" text-anchor="middle" fill="#111827" font-size="9"><tspan x="326" dy="0">Log S3</tspan></text></g></g></g></g><g id="vstack_18"><g id="dms"><g id="dms-icon"><svg x="846.82099609375" y="233.49999999999997" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_AWS-Database-Migration-Service_48</title><g fill="none" fill-rule="evenodd"><path fill="#c925d1" d="M0 0h64v64H0z"/><path fill="#fff" d="M34.995 53h1.996v-5h-1.996zm-7.987 0h1.996v-5h-1.996zm14.995-2H44v-4h-1.997zM20.02 51h1.997v-4h-1.997zm11.98-23c-6.197 0-10.002-1.967-10.002-3.376v-5.628C24.339 20.429 28.364 21 32 21s7.661-.571 10.003-2.004v5.628C42.003 26.033 38.197 28 32 28m0 8c-6.44 0-10.002-1.9-10.002-3.214v-5.072C24.09 29.125 27.676 30 32 30s7.909-.875 10.003-2.286v5.072C42.003 34.1 38.441 36 32 36m0 8c-6.177 0-10.002-1.557-10.002-3v-5.178C24.072 37.177 27.626 38 32 38c4.373 0 7.928-.823 10.003-2.178V41c0 1.443-3.825 3-10.003 3m0-31c6.527 0 10.004 1.742 10.004 3S38.526 19 32 19c-6.527 0-10.003-1.742-10.003-3S25.473 13 32 13m0-2C26.464 11 20 12.31 20 16v25c0 3.69 6.463 5 12 5 5.536 0 12-1.31 12-5V16c0-3.69-6.464-5-12-5"/></g></svg></g><g id="text_39"><text x="864.82099609375" y="280.95" text-anchor="middle" fill="#111827" font-size="9"><tspan x="864.82099609375" dy="0">DMS</tspan></text></g></g><g id="redshift"><g id="redshift-icon"><svg x="846.82099609375" y="568.3" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Redshift_48</title><g fill="none" fill-rule="evenodd"><path fill="#8c4fff" d="M0 0h64v64H0z"/><path fill="#fff" d="M40.419 28.025c-.7 0-1.271-.569-1.271-1.269a1.271 1.271 0 0 1 2.542 0c0 .7-.571 1.269-1.271 1.269m-3.784 9.063c-.7 0-1.27-.569-1.27-1.268a1.27 1.27 0 0 1 2.54 0 1.27 1.27 0 0 1-1.27 1.268m-9.081-1.511c-.7 0-1.27-.568-1.27-1.268a1.27 1.27 0 0 1 2.54 0c0 .7-.57 1.268-1.27 1.268m-3.783 8.308a1.27 1.27 0 0 1-1.271-1.267 1.271 1.271 0 0 1 2.541 0 1.27 1.27 0 0 1-1.27 1.267m16.648-20.392a3.27 3.27 0 0 0-3.271 3.263c0 1.04.499 1.957 1.259 2.555l-1.301 3.293c-.155-.023-.31-.047-.471-.047a3.27 3.27 0 0 0-3.022 2.026l-2.826-.642a3.26 3.26 0 0 0-6.503.368c0 .79.293 1.504.762 2.07l-1.273 2.974h-.002a3.27 3.27 0 0 0-3.271 3.265 3.27 3.27 0 0 0 6.541 0c0-1.087-.54-2.045-1.36-2.638l1.075-2.516c.257.064.521.109.798.109 1.222 0 2.278-.68 2.839-1.674l3.076.698a3.27 3.27 0 0 0 3.166 2.487 3.27 3.27 0 0 0 3.27-3.264c0-.917-.383-1.744-.996-2.337l1.373-3.476c.046.002.09.014.137.014a3.27 3.27 0 0 0 3.271-3.265 3.27 3.27 0 0 0-3.271-3.263M32 52.004c-8.055 0-13-2.376-13-4.08V19.354c2.768 1.946 7.991 2.972 13 2.972s10.232-1.026 13-2.972v28.568c0 1.705-4.945 4.081-13 4.081m0-40.008c8.055 0 13 2.428 13 4.168s-4.945 4.167-13 4.167-13-2.427-13-4.167 4.945-4.168 13-4.168m15 4.168C47 12.16 39.272 10 32 10c-7.271 0-15 2.16-15 6.164l.002.02H17v31.74C17 51.87 24.729 54 32 54c7.272 0 15-2.13 15-6.077v-31.74h-.002z"/></g></svg></g><g id="text_40"><text x="864.82099609375" y="615.75" text-anchor="middle" fill="#111827" font-size="9"><tspan x="864.82099609375" dy="0">Redshift</tspan></text></g></g><g id="s3-data"><g id="s3-data-icon"><svg x="846.8209960937501" y="660.5999999999999" width="36" height="36" viewBox="0 0 64 64"><title>Icon-Architecture/48/Arch_Amazon-Simple-Storage-Service_48</title><g fill="none" fill-rule="evenodd"><path fill="#7aa116" d="M0 0h64v64H0z"/><path fill="#fff" d="m47.759 33.948.234-1.817c2.173 1.254 2.849 1.99 3.044 2.293-.324.061-1.205.085-3.278-.476M30.499 21c-10.374 0-17.117-2.512-17.5-4.304v-.185c.35-1.119 6.14-4.51 17.5-4.51 11.34 0 17.133 3.38 17.5 4.504v.111C47.725 18.446 40.962 21 30.5 21m15.319 12.362c-4.765-1.565-10.906-4.383-13.224-5.474a2.09 2.09 0 0 0-2.082-1.982A2.097 2.097 0 0 0 28.418 28c0 1.154.94 2.094 2.094 2.094.457 0 .877-.152 1.22-.4 2.4 1.128 8.887 4.104 13.826 5.686l-1.721 13.344C43.583 50.352 38.919 52 30.497 52c-8.425 0-13.092-1.648-13.342-3.249l-3.72-28.937C16.945 21.915 23.749 23 30.5 23c6.75 0 13.554-1.085 17.065-3.185zM50 16.5c0-3.069-8.34-6.5-19.5-6.5S11 13.431 11 16.5v.543l4.174 31.99C15.874 53.516 26.123 54 30.497 54c4.372 0 14.616-.484 15.32-4.993l1.684-13.06c1.277.332 2.31.51 3.115.508.99 0 1.657-.252 2.08-.758.35-.416.489-.94.389-1.476-.228-1.22-1.682-2.509-4.715-4.177l-.1-.055L50 17.044z"/></g></svg></g><g id="text_41"><text x="864.8209960937501" y="708.05" text-anchor="middle" fill="#111827" font-size="9"><tspan x="864.8209960937501" dy="0">Data S3</tspan></text></g></g></g></g></g></g></g></g></g></g>
|
|
7
|
+
<g id="connector_1"><path d="M 120.663818359375 251.5 L 151.3319091796875 251.5 L 151.3319091796875 251.5 L 182 251.5" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
8
|
+
<g id="connector_2"><path d="M 218 251.5 L 225 251.5 L 225 251.5 L 232 251.5" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
9
|
+
<g id="connector_3"><path d="M 268 251.5 L 295 251.5 L 295 251.5 L 322 251.5" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
10
|
+
<g id="connector_4"><path d="M 358 251.5 L 373 251.5 L 373 251.5 L 388 251.5" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
11
|
+
<g id="connector_5"><path d="M 484 251.5 L 506 251.5 L 506 251.5 L 528 251.5" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
12
|
+
<g id="connector_6"><path d="M 564 245.5 L 578 245.5 A 6 6 0 0 0 584 239.5 L 584 208.5 A 6 6 0 0 1 590 202.5 L 604 202.5" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
13
|
+
<g id="connector_7"><path d="M 564 257.5 L 578 257.5 A 6 6 0 0 1 584 263.5 L 584 309.09999999999997 A 6 6 0 0 0 590 315.09999999999997 L 604 315.09999999999997" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
14
|
+
<g id="connector_8"><path d="M 706.68701171875 187.06666666666666 L 728.3140665690104 187.06666666666666 A 3.083333333333343 3.083333333333343 0 0 0 731.3973999023438 183.98333333333332 L 731.3973999023438 183.98333333333332 A 3.083333333333343 3.083333333333343 0 0 1 734.4807332356771 180.89999999999998 L 756.1077880859375 180.89999999999998" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
15
|
+
<g id="connector_9"><path d="M 706.68701171875 217.9333333333333 L 725.3973999023438 217.9333333333333 A 6 6 0 0 1 731.3973999023438 223.9333333333333 L 731.3973999023438 239.49999999999997 A 6 6 0 0 0 737.3973999023438 245.49999999999997 L 756.1077880859375 245.49999999999997" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
16
|
+
<g id="connector_10"><path d="M 705.75244140625 291.94999999999993 L 724.9301147460938 291.94999999999993 A 6 6 0 0 0 730.9301147460938 285.94999999999993 L 730.9301147460938 263.5 A 6 6 0 0 1 736.9301147460938 257.5 L 756.1077880859375 257.5" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
17
|
+
<g id="connector_11"><path d="M 705.75244140625 315.09999999999997 L 727.4301147460938 315.09999999999997 A 3.5 3.5 0 0 1 730.9301147460938 318.59999999999997 L 730.9301147460938 318.59999999999997 A 3.5 3.5 0 0 0 734.4301147460938 322.09999999999997 L 756.1077880859375 322.09999999999997" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
18
|
+
<g id="connector_12"><path d="M 705.75244140625 338.24999999999994 L 724.9301147460938 338.24999999999994 A 6 6 0 0 1 730.9301147460938 344.24999999999994 L 730.9301147460938 411.4 A 6 6 0 0 0 736.9301147460938 417.4 L 756.1077880859375 417.4" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
19
|
+
<g id="connector_13"><path d="M 774.1077880859375 435.4 L 774.1077880859375 447.7 L 774.1077880859375 447.7 L 774.1077880859375 460" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
20
|
+
<g id="connector_14"><path d="M 111.796142578125 527.7 L 146.8980712890625 527.7 L 146.8980712890625 527.7 L 182 527.7" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
21
|
+
<g id="connector_15"><path d="M 218 527.7 L 225 527.7 L 225 527.7 L 232 527.7" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
22
|
+
<g id="connector_16"><path d="M 268 527.7 L 295 527.7 L 295 527.7 L 322 527.7" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
23
|
+
<g id="connector_17"><path d="M 358 521.7 L 367 521.7 A 6 6 0 0 0 373 515.7 L 373 505.1333333333333 A 6 6 0 0 1 379 499.1333333333333 L 388 499.1333333333333" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
24
|
+
<g id="connector_18"><path d="M 358 533.7 L 367 533.7 A 6 6 0 0 1 373 539.7 L 373 580.3 A 6 6 0 0 0 379 586.3 L 388 586.3" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
25
|
+
<g id="connector_19"><path d="M 388 468.26666666666665 L 320.7833333333333 468.26666666666665 A 5.283333333333331 5.283333333333331 0 0 1 315.5 462.98333333333335 L 315.5 462.98333333333335 A 5.283333333333331 5.283333333333331 0 0 0 310.2166666666667 457.7 L 243 457.7" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
26
|
+
<g id="connector_20"><path d="M 200 269.5 L 200 348.6 A 6 6 0 0 0 206 354.6 L 219 354.6 A 6 6 0 0 1 225 360.6 L 225 439.7" fill="none" stroke="#6b7280" stroke-width="1.5" stroke-dasharray="6 4" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
27
|
+
<g id="connector_21"><path d="M 792.1077880859375 251.49999999999997 L 819.4643920898437 251.49999999999997 L 819.4643920898437 251.49999999999997 L 846.82099609375 251.49999999999997" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
28
|
+
<g id="connector_22"><path d="M 864.82099609375 269.5 L 864.82099609375 418.9 L 864.82099609375 418.9 L 864.82099609375 568.3" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
29
|
+
<g id="connector_23"><path d="M 774.1077880859375 496 L 774.1077880859375 577.3 L 774.1077880859375 577.3 L 846.82099609375 577.3" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
30
|
+
<g id="connector_24"><path d="M 864.82099609375 604.3 L 864.82099609375 632.4499999999999 L 864.8209960937501 632.4499999999999 L 864.8209960937501 660.5999999999999" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
31
|
+
<g id="connector_25"><path d="M 485.5146484375 586.3 L 661.667822265625 586.3 A 4.5 4.5 0 0 1 666.167822265625 590.8 L 666.167822265625 590.8 A 4.5 4.5 0 0 0 670.667822265625 595.3 L 846.82099609375 595.3" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
32
|
+
<g id="connector_26"><path d="M 551.5146484375 527.7 L 693.167822265625 527.7 A 6 6 0 0 1 699.167822265625 533.7 L 699.167822265625 580.3 A 6 6 0 0 0 705.167822265625 586.3 L 846.82099609375 586.3" fill="none" stroke="#6b7280" stroke-width="1.5" marker-end="url(#marker-arrow-6b7280-s0.7)"/></g>
|
|
33
|
+
</svg>
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AwsServiceSm, AwsService, AwsVpc, AwsAutoScaling,
|
|
3
|
+
EcsFargateCluster, AwsAccount, AwsRegion
|
|
4
|
+
} from "./components/aws.draw.tsx";
|
|
5
|
+
|
|
6
|
+
// --- Edge Services (single box, CF/WAF outside VPCs) ---
|
|
7
|
+
|
|
8
|
+
export function EdgeServices() {
|
|
9
|
+
return (
|
|
10
|
+
<Box id="edge-col" shape="rect" fill="#f9f5ff" stroke="#c084fc" strokeWidth={1} strokeStyle="dashed" padding={10} height="fill">
|
|
11
|
+
<VStack gap={60} align="center">
|
|
12
|
+
<AwsServiceSm id="r53" service="route53" label="Route 53" />
|
|
13
|
+
<Spacer />
|
|
14
|
+
<HStack id="edge-row1" gap={14} align="start" geometry={{ align: "cf" }}>
|
|
15
|
+
<AwsServiceSm id="cf" service="cloudfront" label="CF" />
|
|
16
|
+
<AwsServiceSm id="waf" service="waf" label="WAF" />
|
|
17
|
+
</HStack>
|
|
18
|
+
<AwsServiceSm id="s3-static" service="s3" label="Static S3" />
|
|
19
|
+
<HStack id="edge-row2" gap={14} align="start" geometry={{ align: "mcf" }}>
|
|
20
|
+
<AwsServiceSm id="mcf" service="cloudfront" label="CF" />
|
|
21
|
+
<AwsServiceSm id="mwaf" service="waf" label="WAF" />
|
|
22
|
+
</HStack>
|
|
23
|
+
<Spacer />
|
|
24
|
+
</VStack>
|
|
25
|
+
</Box>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// --- Platform VPC ---
|
|
30
|
+
|
|
31
|
+
export function PlatformVpc() {
|
|
32
|
+
return (
|
|
33
|
+
<AwsVpc label="Platform VPC">
|
|
34
|
+
<HStack padding={14} gap={40} align="center">
|
|
35
|
+
<AwsServiceSm id="plat-alb" service="elasticloadbalancing" label="ALB" />
|
|
36
|
+
<VStack gap={20}>
|
|
37
|
+
<EcsFargateCluster id="api-a" label="API Service A" />
|
|
38
|
+
<EcsFargateCluster id="api-b" label="API Service B" />
|
|
39
|
+
</VStack>
|
|
40
|
+
<VStack gap={20} align="center">
|
|
41
|
+
<AwsServiceSm id="cache" service="elasticache" label="ElastiCache" />
|
|
42
|
+
<AwsServiceSm id="aurora" service="aurora" label="Aurora" />
|
|
43
|
+
<AwsServiceSm id="dynamo" service="dynamodb" label="DynamoDB" />
|
|
44
|
+
</VStack>
|
|
45
|
+
</HStack>
|
|
46
|
+
</AwsVpc>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// --- Management VPC ---
|
|
51
|
+
|
|
52
|
+
export function ManagementVpc() {
|
|
53
|
+
return (
|
|
54
|
+
<AwsVpc label="Management VPC">
|
|
55
|
+
<HStack padding={14} gap={30} align="center">
|
|
56
|
+
<AwsServiceSm id="mgmt-alb" service="elasticloadbalancing" label="ALB" />
|
|
57
|
+
<VStack gap={10}>
|
|
58
|
+
<EcsFargateCluster id="cms-app" label="CMS App" />
|
|
59
|
+
<EcsFargateCluster id="cms-admin" label="Admin Panel" />
|
|
60
|
+
</VStack>
|
|
61
|
+
<AwsServiceSm id="mgmt-batch" service="fargate" label="Batch" />
|
|
62
|
+
</HStack>
|
|
63
|
+
</AwsVpc>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// --- Analytics (outside VPCs) ---
|
|
68
|
+
|
|
69
|
+
export function AnalyticsServices() {
|
|
70
|
+
return (
|
|
71
|
+
<VStack gap={10} align="center" height="fill">
|
|
72
|
+
<AwsServiceSm id="dms" service="dms" label="DMS" />
|
|
73
|
+
<Spacer />
|
|
74
|
+
<AwsServiceSm id="redshift" service="redshift" label="Redshift" />
|
|
75
|
+
<Spacer />
|
|
76
|
+
<AwsServiceSm id="s3-data" service="s3" label="Data S3" />
|
|
77
|
+
</VStack>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// --- BFF VPC ---
|
|
82
|
+
|
|
83
|
+
export function BffVpc() {
|
|
84
|
+
return (
|
|
85
|
+
<AwsVpc label="BFF VPC">
|
|
86
|
+
<HStack id="bff-vpc" padding={14} gap={30} align="center" geometry={{ align: "bff-alb" }}>
|
|
87
|
+
<AwsServiceSm id="bff-alb" service="elasticloadbalancing" label="ALB" />
|
|
88
|
+
<EcsFargateCluster id="bff" label="BFF App" />
|
|
89
|
+
</HStack>
|
|
90
|
+
</AwsVpc>
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// --- Event Processing (serverless, outside VPCs) ---
|
|
95
|
+
|
|
96
|
+
export function EventProcessing() {
|
|
97
|
+
return (
|
|
98
|
+
<Box shape="rect" fill="none" stroke="none" padding={10}>
|
|
99
|
+
<VStack id="evt-row" gap={10} align="center">
|
|
100
|
+
<AwsServiceSm id="eb" service="eventbridge" label="EventBridge" />
|
|
101
|
+
<AwsServiceSm id="evt-handler" service="lambda" label="Handler" />
|
|
102
|
+
</VStack>
|
|
103
|
+
</Box>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// --- Shared Services ---
|
|
108
|
+
|
|
109
|
+
export function SharedServices() {
|
|
110
|
+
return (
|
|
111
|
+
<HStack gap={18} align="start">
|
|
112
|
+
<AwsServiceSm id="s3-logs" service="s3" label="Log S3" />
|
|
113
|
+
</HStack>
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// --- External Actors ---
|
|
118
|
+
|
|
119
|
+
export function ExternalActor({ id, label }: { id: string; label: string }) {
|
|
120
|
+
return (
|
|
121
|
+
<Box id={id} shape="rect" fill="#f3f4f6" stroke="#9ca3af" padding={12}>
|
|
122
|
+
<Text fontSize={10} fontWeight="bold">{label}</Text>
|
|
123
|
+
</Box>
|
|
124
|
+
);
|
|
125
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "diagram-contracts",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Rule Catalog driven layout runtime — compile diagrams to deterministic SVG from Draw TSX, Draw Text, or Layout IR",
|
|
6
6
|
"keywords": [
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"files": [
|
|
38
38
|
"dist",
|
|
39
39
|
"tokens",
|
|
40
|
+
"assets/readme",
|
|
40
41
|
"LICENSE",
|
|
41
42
|
"README.md"
|
|
42
43
|
],
|