Pythonic infrastructure diagram

I’ve been designing and analyzing a lot of architectures lately and I felt the need for a tool to export images quick, so that I could add them to the documentations, or just to show a concept to someone else, but I am far from at least a decent graphic designer. So I decided to search google for “diagram as code” and, well, I found many crazy options, but one of them caught my attention, as it was a python library: Diagrams!

It’s great that I don’t even need to leave the python interpreter to draw things and it’s very simples to use it. As an example, I’ll design the architecture of my ASI project:

from diagrams import Cluster, Diagram, Edge
from diagrams.aws.network import ELB
from diagrams.aws.devtools import Codebuild, Codedeploy
from diagrams.aws.compute import Fargate, ECR, ECS
from diagrams.onprem.vcs import Github
from diagrams.aws.storage import S3
from diagrams.aws.management import Cloudwatch
from diagrams.aws.database import RDS
with Diagram(name="ASI", show=False):
    with Cluster("Continuous Delivery"):
        with Cluster("webhook"):
            gh = Github("PUSH")
        with Cluster(""):
            ecr = ECR("ECR")
            fargate = Fargate("Fargate")
            s3 = S3("artifacts")
            delivery = [ecr, fargate, s3]
        with Cluster("CodePipeline"):
            gh >> Codebuild("CodeBuild") >> Codedeploy("CodeDeploy") >> delivery
    lb = ELB("load balancer")
    with Cluster("VPC"):
        app = ECS("ECS")
        db = RDS("database")
        app - Edge(color="brown", style="dotted") - db
    lb >> app << fargate
    app >> Cloudwatch("CloudWatch")

Just that, and the result is:

I’ll try to create a library later to integrate and self generate terraform templates from the design script. Thay may be very handy in the future.