Beispiel #1
0
def linking_nodes_diagram():
    from diagrams import Diagram, Cluster
    from diagrams.aws.compute import EC2
    from diagrams.aws.network import ELB
    from diagrams.aws.network import Route53
    from diagrams.onprem.database import PostgreSQL  # Would typically use RDS from aws.database
    from diagrams.onprem.inmemory import Redis  # Would typically use ElastiCache from aws.database

    with Diagram(
            "Simple Website Diagram", direction='LR'
    ) as diag4:  # It's LR by default, but you have a few options with the orientation
        dns = Route53("DNS")
        load_balancer = ELB("Load Balancer")
        database = PostgreSQL("User Database")
        cache = Redis("Cache")
        with Cluster("Webserver Cluster"):
            svc_group = [
                EC2("Webserver 1"),
                EC2("Webserver 2"),
                EC2("Webserver 3")
            ]
        dns >> load_balancer >> svc_group
        svc_group >> cache
        svc_group >> database
    print(
        diag4
    )  # This will illustrate the diagram if you are using a Google Colab or Jypiter notebook.
Beispiel #2
0
 def test2():
     filename = os.path.join(img_dir, sys._getframe().f_code.co_name)
     with Diagram("Grouped Workers", show=False, direction="TB", filename=filename):
         ELB("lb") >> [EC2("worker1"),
                       EC2("worker2"),
                       EC2("worker3"),
                       EC2("worker4"),
                       EC2("worker5")] >> RDS("events")
Beispiel #3
0
 def test1():
     filename = os.path.join(img_dir, sys._getframe().f_code.co_name)
     with Diagram("Workers", show=False, direction="TB", filename=filename):
         lb = ELB("lb")
         db = RDS("events")
         lb >> EC2("worker1") >> db
         lb >> EC2("worker2") >> db
         lb >> EC2("worker3") >> db
         lb >> EC2("worker4") >> db
         lb >> EC2("worker5") >> db
Beispiel #4
0
def nodes_diagram():
    with Diagram("Simple Website Diagram") as diag2:
        dns = Route53("dns")
        load_balancer = ELB("Load Balancer")
        database = PostgreSQL("User Database")
        cache = Redis("Cache")
        svc_group = [
            EC2("Webserver 1"),
            EC2("Webserver 2"),
            EC2("Webserver 3")
        ]
    print(
        diag2
    )  # This will illustrate the diagram if you are using a Google Colab or Jypiter notebook.
Beispiel #5
0
def main():
    with Diagram("Recipeify Architecture", direction='LR'):

        with Cluster("Github"):
            ci = Github("Actions CI/CD")
            Github("Open Source Repo") >> ci

        with Cluster("Cloudfare"):
            clf = Cloudflare("CDN\n DDoS Protection")

        with Cluster("AWS", direction='LR'):
            with Cluster("VPC"):
                elb = ELB("Elastic Load Balancer")
                eb = EB("Elastic Beanstalk")
                es = ES("Elasticsearch")
                lmda = Lambda("Lambda")
            ecr = ECR("Container Registry")

        with Cluster("3rd Party SaaS", direction='LR'):
            with Cluster("MongoDB Atlas"):
                mongo = MongoDB("Users DB")

            with Cluster("Recombee"):
                rec = Recombee("Recommendation\n Engine")

            with Cluster("Auth0"):
                auth = Auth0("Oauth2 Integrator")

            with Cluster("Cloudinary"):
                cl = Cloudinary("Image Caching\n and Proccessing")

            auth >> Edge(style="invis") >> mongo >> Edge(
                style="invis") >> cl >> Edge(style="invis") >> rec

        eb >> auth
        eb >> mongo
        eb >> cl
        eb >> rec

        eb << ecr << ci
        es << lmda
        clf >> elb >> eb >> es
Beispiel #6
0
def draw(name: str, *, show: bool = False) -> None:
    with Diagram(name):
        dns = Route53()
        lb = ELB()

        with Cluster() as Services:
            web1 = ECS()
            web2 = ECS()
            web3 = ECS()

        with Cluster() as DBCluster:
            userdb = RDS()
            userdb_ro = RDS()
            userdb - [userdb_ro]

        memcached = ElastiCache()

        dns >> lb >> Services
        Services >> DBCluster
        Services >> memcached
def linking_nodes_diagram():
    with Diagram(
            "Simple Website Diagram", direction='LR'
    ) as diag4:  # It's LR by default, but you have a few options with the orientation
        dns = Route53("DNS")
        load_balancer = ELB("Load Balancer")
        database = PostgreSQL("User Database")
        cache = Redis("Cache")
        with Cluster("Webserver Cluster"):
            svc_group = [
                EC2("Webserver 1"),
                EC2("Webserver 2"),
                EC2("Webserver 3")
            ]
        dns >> load_balancer >> svc_group
        svc_group >> cache
        svc_group >> database
    print(
        diag4
    )  # This will illustrate the diagram if you are using a Google Colab or Jypiter notebook.
Beispiel #8
0
def nodes_diagram():
    from diagrams import Diagram, Cluster
    from diagrams.aws.compute import EC2
    from diagrams.aws.network import ELB
    from diagrams.aws.network import Route53
    from diagrams.onprem.database import PostgreSQL  # Would typically use RDS from aws.database
    from diagrams.onprem.inmemory import Redis  # Would typically use ElastiCache from aws.database

    with Diagram("Simple Website Diagram") as diag2:
        dns = Route53("dns")
        load_balancer = ELB("Load Balancer")
        database = PostgreSQL("User Database")
        cache = Redis("Cache")
        svc_group = [
            EC2("Webserver 1"),
            EC2("Webserver 2"),
            EC2("Webserver 3")
        ]
    print(
        diag2
    )  # This will illustrate the diagram if you are using a Google Colab or Jypiter notebook.
from diagrams.onprem.container import Docker
from diagrams.onprem.database import PostgreSQL
from diagrams.onprem.monitoring import Grafana, Prometheus
from diagrams.onprem.network import Internet
from diagrams.programming.framework import Spring, React

graph_attr = {
    "fontsize": "20",
    "bgcolor": "white"  #transparent
}

with Diagram("Application Architecture",
             graph_attr=graph_attr,
             outformat="png",
             filename="application_architecture"):
    ELB("lb") >> EC2("web") >> RDS("userdb") >> S3("store")
    ELB("lb") >> EC2("web") >> RDS("userdb") << EC2("stat")
    (ELB("lb") >> EC2("web")) - EC2("web") >> RDS("userdb")

    with Cluster("Application Context"):
        app = EC2("Spring Boot")

    ELB("lb") >> app

    metrics = Prometheus("metric")
    metrics << Edge(color="firebrick", style="dashed") << Grafana("monitoring")

    Jenkins("CI")
    client = Client("A")
    client >> User("B") >> Users("S")
    client >> PostgreSQL("Database")
Beispiel #10
0
    app_servers >> nfs

with Diagram("AWS web application", show=True):
    users = Users('website/mobile users')

    with Cluster("Ingress"):
        dns = Route53("Route53")

        with Cluster("Cloudfront CDN"):
            s3_content = S3('Shared content')
            cf = CF('Cloudfront CDN')

    with Cluster('VPC'):
        with Cluster("WebProxy AutoScalingGroup (ASG)"):
            web_asg = AutoScaling('ASG')
            web_lb = ELB("NLB")

        with Cluster("Application servers AutoScalingGroup (ASG)"):
            app_asg = AutoScaling('ASG')
            app_lb = ELB("NLB")

        with Cluster("AWS Batch"):
            cwa = cw('CW Event')
            batch_s3 = S3('Batch data')
            batch = Batch('AWS Batch')

        with Cluster("DB Cluster"):
            db_master = RDS("master")
            db_master - [RDS("slave")]

    users >> dns
Beispiel #11
0
from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.database import ElastiCache, RDS
from diagrams.aws.network import ELB
from diagrams.aws.network import Route53

with Diagram("Clustered Web Services",
             filename="out/aws-001",
             outformat="svg",
             show=False):
    dns = Route53("dns")
    lb = ELB("lb")

    with Cluster("Services"):
        svc_group = [ECS("web1"), ECS("web2"), ECS("web3")]

    with Cluster("DB Cluster"):
        db_master = RDS("userdb")
        db_master - [RDS("userdb ro")]

    memcached = ElastiCache("memcached")

    dns >> lb >> svc_group
    svc_group >> db_master
    svc_group >> memcached
Beispiel #12
0
from diagrams.aws.security import CertificateManager, IAM
from diagrams.aws.general import Users
from diagrams.aws.storage import S3

with Diagram("Architecture", show=False):

    cw = Cloudwatch("Cloudwatch")
    s3 = S3("S3")
    users = Users("Users")
    iam = IAM("IAM")
    dns = Route53("DNS")
    cm = CertificateManager("CertificateManager")
    listener = InternetGateway(":443")

    with Cluster("VPC: 172.16.x.x"):
        lb = ELB("ALB")

        with Cluster("ECS"):
            with Cluster("Public Subnet #1"):
                ecs_stack_1 = ECS("rshiny-app-1")

            with Cluster("Public Subnet #2"):
                ecs_stack_2 = ECS("rshiny-app-2")

        with Cluster("Private Subnet #1"):
            with Cluster("RDS Cluster"):
                db_1 = RDS("postgresql db")

    users << dns >> lb
    users >> listener >> lb
    lb >> Edge(label=":8080") >> ecs_stack_1
Beispiel #13
0
    "fontsize": "45",
}

with Diagram("Zeebo-app Internet Traffic overview",
             show=False,
             filename="zeebo-aws-network-traffic",
             outformat="png",
             direction="TB",
             graph_attr=graph_attr):

    # Grouping step
    with Cluster("VPC"):
        igw = InternetGateway("IGW")
        with Cluster("Public Subnet"):
            with Cluster("Availability Zone A"):
                alb_leg_a = ELB("elb-interface-1")
            with Cluster("Availability Zone B"):
                alb_leg_b = ELB("elb-interface-2")
            with Cluster("Availability Zone C"):
                alb_leg_c = ELB("elb-interface-3")

        vpc_router = VPCRouter("Internal router")

        with Cluster("Private Subnet"):
            with Cluster("Availability Zone A"):
                eks1 = EKS("Kubernetes node 1")
            with Cluster("Availability Zone B"):
                eks2 = EKS("Kubernetes node 2")
            with Cluster("Availability Zone C"):
                eks3 = EKS("Kubernetes node 3")
Beispiel #14
0
from diagrams.aws.network import ELB
from diagrams.aws.database import Redshift
from diagrams.aws.integration import SQS
from diagrams.aws.storage import S3
from diagrams.aws.security import WAF
from diagrams.aws.database import Aurora

with Diagram("Infra as <Code> -  Sistemas em paralelo", show=True):

    with Cluster("Infra as <Code> - Sistemas em paralelo"):
        with Cluster("Front-end"):
            front_end = [
                EC2("Front-end-01"),
                EC2("Front-end-02"),
                EC2("Front-end-03")
            ]

        with Cluster("Back-end"):
            back_end = [
                EC2("Back-end-01"),
                EC2("Back-end-02"),
                EC2("Back-end-03")
            ]

        waf = WAF("WAF")
        db = Aurora("DB")
        fe_lb = ELB("Front-end-LB")
        be_lb = ELB("Back-end-LB")

    waf >> fe_lb >> front_end >> be_lb >> back_end >> db
Beispiel #15
0
from diagrams import Cluster, Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.network import VPC, PublicSubnet, PrivateSubnet, ELB, Route53

with Diagram("Load Balancer in front of an application",
             show=True,
             direction="TB"):
    dns = Route53("DNS")

    with Cluster("VPC"):
        VPC()

        with Cluster("Public Subnet"):
            PublicSubnet()

            lb = ELB("Application\nLoad Balancer")

        with Cluster("Private Subnet"):
            PrivateSubnet()

            svc_group = [EC2("app%s" % idx) for idx in [1, 2, 3]]

    dns >> lb
    lb >> svc_group
Beispiel #16
0
from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.database import ElastiCache, RDS
from diagrams.aws.network import ELB
from diagrams.aws.network import Route53
from diagrams.onprem.network import Haproxy
from diagrams.k8s.rbac import User
from diagrams.k8s.network import Ingress
from diagrams.onprem.compute import Server

with Diagram("OpenShift 4.3 with external load balancer", show=False):
    dns = Route53("DNS")
    lb = ELB("External load balancer (F5 BIG-IP etc")
    internallb = Haproxy("Internal load balancer")

    with Cluster("Masters"):
        master_group = [ECS("master1"),
                     ECS("master2"),
                     ECS("master3")]

    with Cluster("Infra nodes"):
                         infra_group = [ECS("infranode1"),
                                      ECS("infranode2")]

    with Cluster("Worker nodes"):
                         worker_group = [ECS("workernode1"),
                         ECS("workernode2")]

    with Cluster("CA bundle, http://bit.ly/marcredhatcerts"):
                        ca_bundle = ECS("CA bundle")
Beispiel #17
0
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

with Diagram('Grouped Workers', show=False,
                                direction='TB',
                                filename='img/example'):
    ELB('lb') >> [EC2('worker1'),
                  EC2('worker2'),
                  EC2('worker3'),
                  EC2('worker4'),
                  EC2('worker5')] >> RDS('events')
Beispiel #18
0
from diagrams.aws.database import ElastiCache, RDS, Redshift
from diagrams.aws.network import ELB, Route53
from diagrams.aws.integration import SQS
from diagrams.aws.storage import S3
from diagrams.gcp.analytics import BigQuery, Dataflow, PubSub
from diagrams.gcp.compute import AppEngine, Functions
from diagrams.gcp.database import BigTable
from diagrams.gcp.iot import IotCore
from diagrams.gcp.storage import GCS

diagram_name = "Grouped Workers"
with Diagram(diagram_name,
             show=False,
             direction="TB",
             filename="diagrams/" + diagram_name):
    ELB("lb") >> [
        EC2("worker1"),
        EC2("worker2"),
        EC2("worker3"),
        EC2("worker4"),
        EC2("worker5")
    ] >> RDS("events")

diagram_name = "Clustered Web Services"
with Diagram(diagram_name, show=False, filename="diagrams/" + diagram_name):
    dns = Route53("dns")
    lb = ELB("lb")

    with Cluster("Services"):
        svc_group = [ECS("web1"), ECS("web2"), ECS("web3")]
Beispiel #19
0
from diagrams import Diagram, Cluster, Edge
from diagrams.aws.compute import ECS
from diagrams.aws.network import APIGateway, CloudMap, ELB
from diagrams.generic.blank import Blank

with Diagram("AWS ECS Service", show=False, direction="TB"):

    api_gw = APIGateway("api gateway")

    cloud_map = CloudMap("cloud map")
    api_gw << cloud_map

    with Cluster("vpc"):

        target_group = ELB("target group (*)")
        listener_rule = ELB("listener rule (*)")

    with Cluster("ecs"):

     service = ECS("ecs service")
     api_gw >> service >> cloud_map

     service >> listener_rule >> target_group

    Blank("* 0..1")
Beispiel #20
0
"""
quick start from diagrams
"""
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB, CF
from diagrams.aws.storage import S3, EFS

with Diagram("Web Service", show=True):
    workers = [
        EC2("1-web"),
    ]
    shared = EFS('wp-content')
    balancer = ELB('lb')
    cdn = CF('cdn')
    static = S3('wp-static')
    db = RDS('wp-tables')

    balancer >> workers >> db
    workers >> static
    workers >> shared
    cdn >> static
Beispiel #21
0
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

with Diagram("Grouped Workers", show=False, direction="TB"):
    ELB("lb") >> [
        EC2("worker1"),
        EC2("worker2"),
        EC2("worker3"),
        EC2("worker4"),
        EC2("worker5")
    ] >> RDS("events")
with Diagram("Simple ECS Service", show=True):
    with Cluster("AWS Account"):
        with Cluster("Hosted Zone\nflavio.com"):
            maindomain = Route53("webservices.*.flavio.com")
            secondarydomain = Route53("ws.*.flavio.com")

        with Cluster("ECR"):

            ecr = ECR("Webservices Image")

        with Cluster("VPC"):

            PrivateSubnet("Private Subnet")
            with Cluster("Loadbalancing"):

                loadbalancer = ELB("Loadbalancer\nEndpoint")

                [maindomain, secondarydomain] >> loadbalancer

            with Cluster("ECS Cluster"):

                clusterecs = ECS("Webservices-Prod")

                autoscalingclusterecs = AutoScaling("Cluster Scaling")

                ec2 = EC2("EC2 Instances")

                alarmscluster = Cloudwatch("Cluster Reserved CPU Alarm")

                clusterecs >> alarmscluster >> autoscalingclusterecs >> ec2
Beispiel #23
0
from diagrams.aws.network import NATGateway
from diagrams.aws.security import ACM
from diagrams.aws.network import Route53
from diagrams.aws.compute import AutoScaling
from diagrams.aws.compute import EC2
from diagrams.k8s.network import Ingress
from diagrams.k8s.network import Service
from diagrams.k8s.compute import Pod
from diagrams.onprem.iac import Terraform
from diagrams.onprem.ci import GitlabCI
from diagrams.aws.storage import S3

with Diagram("EKS Cluster", show=False, direction="LR"):
    ssl_certificate = ACM("SSL cert")
    dns_name = Route53("DNS domain")
    load_balancer = ELB("Load balancer")
    with Cluster("Custom VPC"):
        with Cluster("Public network"):
            public_subnets = [
                PublicSubnet("Subnet zone a"),
                PublicSubnet("Subnet zone b"),
                PublicSubnet("Subnet zone c"),
                PublicSubnet("Subnet zone d"),
                ]
        nat_gateway = NATGateway("NAT gateway")
        with Cluster("Private network"):
            private_subnets = [
                PrivateSubnet("Subnet zone a"),
                PrivateSubnet("Subnet zone b"),
                PrivateSubnet("Subnet zone c"),
                PrivateSubnet("Subnet zone d"),
Beispiel #24
0
with Diagram("Deployment HLA",
             filename="assets-architecture-hla",
             show=False,
             direction="TB"):

    with Cluster("Group#1") as pe:

        with Cluster("Configuration Cluster") as configServer:
            configServerP = ECS("Primary")
            configServerB = ECS("Backup")
            configServerP - configServerB

        with Cluster("VM#1"):
            s1 = ECS("MicroService #A")
            s2 = ECS("MicroService #B")
            ELB("elb") >> s1

        with Cluster("VM#2"):
            s3 = [Server("S3 - A...Z")]

        # Volumes
        with Cluster("Files"):
            volumeA = FileStorage("/files")
            volumeDB = Database("/database")

        # Logging
        with Cluster("Logging"):
            logs = FluentBit("logging")
            s2 >> Edge(label="produces") >> logs

        # Monitoring
Beispiel #25
0
#!/usr/bin/env python
# coding: utf-8

# In[1]:

from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.database import Elasticache, RDS
from diagrams.aws.network import ELB, Route53

# In[2]:

with Diagram('Clustered Web Services', show=False):
    dns = Route53('dns')
    lb = ELB('lb')

    with Cluster('Services'):
        svc_group = [ECS('web1'), ECS('web2'), ECS('web3')]
    with Cluster('DB Cluster'):
        db_master = RDS('userdb')
        db_master = [RDS('userdb ro')]

    memcached = Elasticache('memcached')

    dns >> lb >> svc_group
    svc_group >> db_master
    svc_group >> memchaced

# In[ ]:
Beispiel #26
0
            kube = EKS('Elastic Kubernetes\nService')
            instance_1 = EC2('EC2 Instance 1\n(m5.xlarge)')
            disk_1 = EBS('EBS Disk 1\n(gp2)')
            instance_2 = EC2('EC2 Instance 2\n(m5.xlarge)')
            disk_2 = EBS('EBS Disk 2\n(gp2)')

            instance_1 - disk_1
            instance_2 - disk_2
            kube - instance_1
            kube - instance_2
            kube - RDS('Amazon RDS\nfor PostgreSQL\n(db.t3.large)')

        kube - S3('S3')
        kube - Cloudwatch('Amazon CloudWatch')
        dns = Route53('Route53')
        lb = ELB('Elastic Load Balancer')
        lb >> kube
        dns >> lb

    [Client('SDKs'), Users('Users')] >> dns

with Diagram('Google Cloud Platform resources',
             show=False,
             filename='gke',
             outformat='png'):
    with Cluster('Google Cloud Platform'):
        with Cluster('Virtual Private Cloud'):
            kube = GKE('Google Kubernetes\nEngine')
            instance_1 = ComputeEngine('VM Instance 1\n(n1-standard-4)')
            disk_1 = PersistentDisk('Persistent Disk 1\n(pd-standard)')
            instance_2 = ComputeEngine('VM Instance 2\n(n1-standard-4)')
Beispiel #27
0
# diagram.py
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

with Diagram("Web Service", show=False):
    ELB("lb") >> EC2("web") >> RDS("userdb")
Beispiel #28
0
from diagrams import Diagram
from diagrams import Cluster, Diagram
from diagrams.aws.network import ELB
from diagrams.aws.compute import ECS
from diagrams.onprem.database import PostgreSQL
from diagrams.aws.database import Aurora

with Diagram("DIAGRAMA : ARQUITECTURA HORIZONTAL", show=False):
    lb = ELB("API/CONETENEDOR C")
    with Cluster("Database "):
        master = PostgreSQL("CONTENEDOR A")
        data = Aurora("DATABASE")
        lb >> master >> data
    with Cluster("Service"):
        svc_pgadmin = ECS("PGADMIN/CONTENEDOR B")
        data >> svc_pgadmin
    with Cluster("Services"):
        svc_flask = ECS("FLASK/CONTENEDOR D")
        svc_redis = ECS("REDIS/CONTENEDOR E")
        master >> svc_flask
        master >> svc_redis
Beispiel #29
0
    cluster = ECS("Primary Cluster")
    workers = [EC2(f"worker#{i}") for i in range(start, end)]
    cluster >> Edge(color="pink", style="dashed",
                    label="Container Instance") >> workers

    return cluster


with Diagram("Cluster Integration",
             show=False,
             direction="TB",
             outformat="png",
             filename="/output/grouped_workers"):

    with Cluster("Other AWS Resources"):
        primary_load_balancer = ELB("Load Balancer")
        events_database = RDS("Events Databse")

    with Cluster("Primary ECS Cluster"):
        primary_cluster = create_ecs_cluster(start=0, end=7)

    with Cluster("Backup Clusters"):
        with Cluster("First Backup ECS Cluster"):
            backup_cluster1 = create_ecs_cluster(start=10, end=12)

        with Cluster("Second Backup ECS Cluster"):
            backup_cluster2 = create_ecs_cluster(start=20, end=21)

    primary_cluster >> events_database
    backup_cluster1 >> events_database
    backup_cluster2 >> events_database
Beispiel #30
0
                        "bgcolor": "#E587B5"
                    }):  # one cluster defined but with overwritten attributes
            Custom("Chassis", "./resources/ovn.png")
            Server("strix")
            with VirtualPrivateCloud(""):
                with PrivateSubnet("Private"):
                    with SecurityGroup("web sg"):
                        with AutoScalling(""):
                            with EC2Contents("A"):
                                d1 = Crio("Container")
                            with ServerContents("A1"):
                                d2 = Crio("Container")

                    with PublicSubnet("Public"):
                        with SecurityGroup("elb sg"):
                            lb1 = ELB()
        with Region("chassis 5",
                    graph_attr={
                        "pencolor": "#60193C",
                        "bgcolor": "#E587B5"
                    }):  # one cluster defined but with overwritten attributes
            Custom("Chassis", "./resources/ovn.png")
            Server("otus")
            with VirtualPrivateCloud(""):
                with PrivateSubnet("Private"):
                    with SecurityGroup("web sg"):
                        with AutoScalling(""):
                            with EC2Contents("A"):
                                d3 = Crio("Container")
                            with ServerContents("A1"):
                                d4 = Crio("Container")