-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdiagram.py
138 lines (115 loc) · 5.4 KB
/
diagram.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
from diagrams import Diagram, Cluster, Edge
from diagrams.aws.storage import S3
from diagrams.aws.network import Route53, ElbApplicationLoadBalancer, VPC, PublicSubnet, PrivateSubnet, NATGateway, InternetGateway, RouteTable
from diagrams.aws.compute import Lambda, ElasticContainerService, ElasticKubernetesService, Fargate, ElasticContainerServiceService
from diagrams.aws.database import Aurora
from diagrams.aws.security import CertificateManager
from diagrams.generic.device import Tablet, Mobile
from diagrams.programming.language import Nodejs, Python, Go, Csharp
from diagrams.programming.framework import React
from diagrams.k8s import group
from diagrams.k8s.network import Ingress, Service
from diagrams.k8s.compute import Deployment, Pod
graph_attr = {
"fontsize": "45",
"bgcolor": "transparent"
}
with Diagram("", graph_attr=graph_attr, show=False, direction='LR'):
with Cluster(""):
user_a = Tablet("Users")
user_b = Mobile("Users")
mongodb = Aurora("MongoDB")
postgresql = Aurora("PostgreSQL")
with Cluster("Vercel"):
portal_frontend = React("Portal")
portal_backend = Nodejs("")
portal_serverless = Lambda("Serverless")
with Cluster("AWS Cloud"):
route = Route53("Domain Names")
cert = CertificateManager("Certificate")
with Cluster("VPC of Staging env"):
vpc = VPC("VPC")
alb = ElbApplicationLoadBalancer("ALB")
ecs = ElasticContainerService("ECS")
fargate = Fargate("Fargate")
service = ElasticContainerServiceService("Service")
with Cluster("Service"):
api_module = Nodejs("API Module")
user_module = Csharp("User Module")
generator_module = Python("Generator Module")
document_module = Go("Document Module")
ecs >> service
ecs >> fargate
service >> api_module
api_module >> Edge(label="gRPC") >> user_module
api_module >> Edge(label="gRPC") >> generator_module
api_module >> Edge(label="gRPC") >> document_module
document_module >> mongodb
user_module >> postgresql
vpc >> alb
alb >> ecs
route >> alb
route >> cert >> route
user_a >> portal_frontend
portal_frontend >> portal_backend
portal_frontend >> route
portal_backend >> route
with Cluster("VPC of Production env"):
vpc_eks = VPC("VPC")
public_subnets = PublicSubnet("Public Subnets")
private_subnets = PrivateSubnet("Private Subnets")
nat = NATGateway("NAT Gateway")
igw = InternetGateway("Internet Gateway")
route_table_private = RouteTable("Route Table")
route_table_public = RouteTable("Route Table")
alb_eks = ElbApplicationLoadBalancer("ALB")
eks = ElasticKubernetesService("EKS")
fargate_eks = Fargate("Fargate")
with Cluster("K8s cluster"):
ingress = Ingress("Ingress")
kube_system_group = group.NS("kube_system namespace")
application_group = group.NS("application namespace")
alb_controller_pod = Pod("ALB Controller")
external_dns_pod = Pod("External DNS")
with Cluster("Public"):
api_service = Service("API Service")
api_deployment = Deployment("API Deployment")
api_pod = Pod("API Pods")
api_module_k8s = Nodejs("API Module")
with Cluster("Private"):
user_service = Service("User Service")
generator_service = Service("Generator Service")
document_service = Service("Document Service")
user_deployment = Deployment("User Deployment")
generator_deployment = Deployment("Generator Deployment")
document_deployment = Deployment("Document Deployment")
user_pod = Pod("User Pods")
generator_pod = Pod("Generator Pods")
document_pod = Pod("Document Pods")
user_module_k8s = Csharp("User Module")
generator_module_k8s = Python("Generator Module")
document_module_k8s = Go("Document Module")
route >> alb_eks >> alb_controller_pod
vpc_eks >> alb_eks
eks >> fargate_eks
fargate_eks >> kube_system_group
fargate_eks >> application_group
vpc_eks >> igw >> route_table_public
route_table_public >> public_subnets >> nat
nat >> route_table_private
route_table_private >> private_subnets
public_subnets >> alb_controller_pod >> ingress >> api_service
private_subnets >> generator_service
kube_system_group >> alb_controller_pod
kube_system_group >> external_dns_pod
application_group >> api_service
application_group >> user_service
application_group >> generator_service
application_group >> document_service
api_service >> api_deployment >> api_pod >> api_module_k8s
user_service >> user_deployment >> user_pod >> user_module_k8s >> postgresql
generator_service >> generator_deployment >> generator_pod >> generator_module_k8s
document_service >> document_deployment >> document_pod >> document_module_k8s >> mongodb
api_module_k8s >> user_module_k8s
api_module_k8s >> generator_module_k8s
api_module_k8s >> document_module_k8s