Split architecture diagram into separate local and AWS diagrams
This commit is contained in:
85
docs/architecture/01b-aws-architecture.dot
Normal file
85
docs/architecture/01b-aws-architecture.dot
Normal file
@@ -0,0 +1,85 @@
|
||||
digraph aws_architecture {
|
||||
rankdir=TB
|
||||
node [shape=box, style=rounded, fontname="Helvetica"]
|
||||
edge [fontname="Helvetica", fontsize=10]
|
||||
|
||||
labelloc="t"
|
||||
label="MPR - AWS Architecture (Lambda + Step Functions)"
|
||||
fontsize=16
|
||||
fontname="Helvetica-Bold"
|
||||
|
||||
graph [splines=ortho, nodesep=0.8, ranksep=0.8]
|
||||
|
||||
// External
|
||||
subgraph cluster_external {
|
||||
label="External"
|
||||
style=dashed
|
||||
color=gray
|
||||
|
||||
browser [label="Browser\nmpr.mcrn.ar", shape=ellipse]
|
||||
}
|
||||
|
||||
// Nginx reverse proxy
|
||||
subgraph cluster_proxy {
|
||||
label="Reverse Proxy"
|
||||
style=filled
|
||||
fillcolor="#e8f4f8"
|
||||
|
||||
nginx [label="nginx\nport 80"]
|
||||
}
|
||||
|
||||
// Application layer
|
||||
subgraph cluster_apps {
|
||||
label="Application Layer"
|
||||
style=filled
|
||||
fillcolor="#f0f8e8"
|
||||
|
||||
django [label="Django Admin\n/admin\nport 8701"]
|
||||
fastapi [label="FastAPI + GraphQL\n/api + /graphql\nport 8702"]
|
||||
timeline [label="Timeline UI\n/\nport 5173"]
|
||||
}
|
||||
|
||||
// Data layer (still local)
|
||||
subgraph cluster_data {
|
||||
label="Data Layer"
|
||||
style=filled
|
||||
fillcolor="#f8e8f0"
|
||||
|
||||
postgres [label="PostgreSQL\nport 5436", shape=cylinder]
|
||||
}
|
||||
|
||||
// AWS layer
|
||||
subgraph cluster_aws {
|
||||
label="AWS Cloud"
|
||||
style=filled
|
||||
fillcolor="#fde8d0"
|
||||
|
||||
step_functions [label="Step Functions\nOrchestration\nstate machine"]
|
||||
lambda [label="Lambda Function\nFFmpeg container\ntranscoding"]
|
||||
s3 [label="S3 Buckets", shape=folder]
|
||||
bucket_in [label="mpr-media-in/\ninput videos", shape=note]
|
||||
bucket_out [label="mpr-media-out/\ntranscoded output", shape=note]
|
||||
}
|
||||
|
||||
// Connections
|
||||
browser -> nginx [label="HTTP"]
|
||||
|
||||
nginx -> django [xlabel="/admin"]
|
||||
nginx -> fastapi [xlabel="/api, /graphql"]
|
||||
nginx -> timeline [xlabel="/"]
|
||||
|
||||
timeline -> fastapi [label="REST API\nGraphQL"]
|
||||
django -> postgres
|
||||
|
||||
fastapi -> postgres [label="read/write jobs"]
|
||||
fastapi -> step_functions [label="boto3\nstart_execution()\nexecution_arn"]
|
||||
|
||||
step_functions -> lambda [label="invoke with\njob parameters"]
|
||||
lambda -> s3 [label="download input\nupload output"]
|
||||
lambda -> fastapi [label="POST /jobs/{id}/callback\nupdate status"]
|
||||
|
||||
fastapi -> postgres [label="callback updates\njob status"]
|
||||
|
||||
s3 -> bucket_in [style=dotted, arrowhead=none]
|
||||
s3 -> bucket_out [style=dotted, arrowhead=none]
|
||||
}
|
||||
Reference in New Issue
Block a user