Home Resources Documentation Examples Language GitHub

Basic

Basic
diagram "basic" [direction=lr] {
  // creating the nodes
  aws.route53 DNS;
  aws.cloudfront cf [label="CDN"];

  group vpc [label="VPC"] {
      aws.elasticLoadBalancing load_balancer [label="Load balancer"];

      group servers [label="Servers"] {
          aws.ec2 server1 [label="Server 1"];
          aws.ec2 server2 [label="Server 2"];
      }
  }

  // creating the edges
  DNS -> cf -> load_balancer [stroke=blue,style=dashed];
  load_balancer => servers;
}

Serverless image processing

Serverless image processing
diagram "serverless image processing" [direction=lr] {
  generic.user user [label="User"];
  aws.appsync appsync [label="AWS AppSync"];
  aws.s3 bucket [label="AWS S3 Bucket"];
  aws.cognito cognito [label="AWS Cognito"];
  aws.lambdaFunction workflow [label="Start workflow"];
  aws.lambdaFunction resolver [label="Resolver"];

  group backend [label="Backend",style=solid,opacity=0,stroke=red,width=4] {
    aws.stepFunctions stepFunction [label="AWS Step Function"];

    aws.lambdaFunction extraction [label="Extract metadata"];
    aws.lambdaFunction detection [label="Object/Scene detection"];
    aws.lambdaFunction thumbnailing [label="Create thumbnail"];
    aws.lambdaFunction persistence [label="Persist metadata"];

    aws.dynamodb dynamo [label="AWS DynamoDB"];
    aws.rekognition rekognition [label="AWS Rekognition"];

    stepFunction -> extraction;
    stepFunction -> detection;
    stepFunction -> thumbnailing;
    stepFunction -> persistence;

    persistence -> dynamo;
    detection -> rekognition;
  }

  user -> cognito;
  user -> appsync;
  user -> bucket;
  bucket -> workflow;
  workflow -> appsync;
  appsync -> resolver;

  resolver -> stepFunction;
  resolver -> dynamo;
}

Wordpress

Wordpress
diagram "wordpress" [direction=tb] {
  generic.users users [label="Users"];
  aws.route53 dns [label="Amazon Route 53"];
  aws.cloudfront cf [label="Amazon CloudFront"];

  group region [label="Region",opacity=0,style=solid,stroke=black,width=2] {
    aws.vpcInternetGateway igw [label="Internet Gateway"];
    aws.alb alb [label="Application Load Balancer"];
    aws.efs efs [label="Amazon EFS"];

    alb <-> igw;

    group vpc [label="VPC",opacity=0,style=solid,stroke=black,width=2] {
      group az1 [label="Availability Zone",opacity=0,stroke="rgb(255,153,0)",width=5] {
        group publicSubnet1 [label="Public Subnet",opacity=0,style=solid,stroke=black] {
          aws.vpcNatGateway nat1 [label="NAT gateway"];
        }

        group appSubnet1 [label="App Subnet",opacity=0,style=solid,stroke=black] {
          aws.ec2 app1 [label="WordPress Instance"];
        }

        group dataSubnet1 [label="Data Subnet",opacity=0,style=solid,stroke=black] {
          aws.elasticacheForMemcached cache1 [label="Memcached"];
          aws.aurora master [label="Master"];
          aws.efsFileSystem efs1 [label="EFS Mount Target"];
        }

        app1 -> nat1;
        app1 <-> cache1;
        app1 <-> master;
        app1 <-> efs1;
      }

      group az2 [label="Availability Zone",opacity=0,stroke="rgb(255,153,0)",width=5] {
        group publicSubnet2 [label="Public Subnet",opacity=0,style=solid,stroke=black] {
          aws.vpcNatGateway nat2 [label="NAT gateway"];
        }

        group appSubnet2 [label="App Subnet",opacity=0,style=solid,stroke=black] {
          aws.ec2 app2 [label="WordPress Instance"];
        }

        group dataSubnet2 [label="Data Subnet",opacity=0,style=solid,stroke=black] {
          aws.elasticacheForMemcached cache2 [label="Memcached"];
          aws.aurora replica [label="Read Replica"];
          aws.efsFileSystem efs2 [label="EFS Mount Target"];
        }

        app2 -> nat2;
        app2 <-> cache2;
        app2 <-> replica;
        app2 <-> efs2;
      }

      nat1 -> igw;
      nat2 -> igw;
      app1 <-> alb;
      app2 <-> alb;
      efs1 <-> efs;
      efs2 <-> efs;
      app1 <-> replica;
      app2 <-> master;
      master -> replica;
    }
  }

  users <-> dns <-> cf <-> igw;
}