AWS architecture diagrams

Official AWS icons, rendered offline.

AWS architecture diagrams using the official icon set, resolved from a bundled copy rather than fetched at render time. That matters more than it sounds: the usual failure mode for these diagrams is an icon URL that 404s two years later and takes the diagram with it.

When to use these

When not to

Common mistakes

Icon-heavy diagrams flatter the design. It is easy to produce something that looks considered and says nothing about failure, scaling or cost. Pair one of these with a sequence diagram of the unhappy path.

The 6 templates

Simple Architecture.puml

The starting point: a handful of services and the traffic between them.

Simple Architecture: rendered example
Show the source
@startuml
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/main/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/Compute/EC2.puml
!include AWSPuml/Database/RDS.puml
!include AWSPuml/Storage/SimpleStorageService.puml
!include AWSPuml/NetworkingContentDelivery/ElasticLoadBalancing.puml

title AWS Simple Architecture

EC2(webServer, "Web Server", "t3.medium")
RDS(database, "Database", "PostgreSQL")
SimpleStorageService(storage, "Static Assets", "S3 Bucket")
ElasticLoadBalancing(elb, "Load Balancer", "ALB")

elb --> webServer
webServer --> database
webServer --> storage

@enduml

Notes and a copy button for this template

VPC Architecture.puml

Subnets, availability zones and what is actually reachable from where.

VPC Architecture: rendered example
Show the source
@startuml
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/main/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/Groups/VPC.puml
!include AWSPuml/Groups/AvailabilityZone.puml
!include AWSPuml/Groups/PublicSubnet.puml
!include AWSPuml/Groups/PrivateSubnet.puml
!include AWSPuml/Compute/EC2.puml
!include AWSPuml/Database/RDS.puml
!include AWSPuml/NetworkingContentDelivery/ElasticLoadBalancing.puml
!include AWSPuml/NetworkingContentDelivery/VPCNATGateway.puml

title AWS VPC Architecture

VPCGroup(vpc, "Production VPC") {
  AvailabilityZoneGroup(az1, "AZ-1") {
    PublicSubnetGroup(public1, "Public Subnet") {
      ElasticLoadBalancing(alb, "ALB", "")
      VPCNATGateway(nat1, "NAT Gateway", "")
    }
    PrivateSubnetGroup(private1, "Private Subnet") {
      EC2(app1, "App Server", "")
      RDS(db1, "Primary DB", "")
    }

The rest of this template, and how to use it

Serverless Architecture.puml

API Gateway, Lambda, DynamoDB: the pattern most greenfield work starts from.

Serverless Architecture: rendered example
Show the source
@startuml
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/main/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/Compute/Lambda.puml
!include AWSPuml/NetworkingContentDelivery/APIGateway.puml
!include AWSPuml/Database/DynamoDB.puml
!include AWSPuml/Storage/SimpleStorageService.puml
!include AWSPuml/ApplicationIntegration/SimpleQueueService.puml
!include AWSPuml/ApplicationIntegration/SimpleNotificationService.puml
!include AWSPuml/NetworkingContentDelivery/CloudFront.puml
!include AWSPuml/SecurityIdentityCompliance/Cognito.puml

title AWS Serverless Architecture

actor User as user

CloudFront(cdn, "CloudFront", "CDN")
SimpleStorageService(staticSite, "Static Website", "S3")
Cognito(auth, "Cognito", "Auth")

APIGateway(api, "API Gateway", "REST API")
Lambda(getFunc, "GET Handler", "Node.js")
Lambda(postFunc, "POST Handler", "Node.js")
Lambda(processFunc, "Processor", "Python")

The rest of this template, and how to use it

Microservices Architecture.puml

Service-per-container with the plumbing between them.

Microservices Architecture: rendered example
Show the source
@startuml
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/main/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/Containers/ElasticContainerService.puml
!include AWSPuml/Containers/ElasticContainerRegistry.puml
!include AWSPuml/Containers/ElasticKubernetesService.puml
!include AWSPuml/NetworkingContentDelivery/APIGateway.puml
!include AWSPuml/ApplicationIntegration/SimpleQueueService.puml
!include AWSPuml/Database/RDS.puml
!include AWSPuml/Database/ElastiCache.puml
!include AWSPuml/NetworkingContentDelivery/ElasticLoadBalancing.puml
!include AWSPuml/ManagementGovernance/CloudWatch.puml

title AWS Microservices Architecture

APIGateway(api, "API Gateway", "")
ElasticLoadBalancing(alb, "ALB", "")

ElasticKubernetesService(eks, "EKS Cluster", "") {
  ElasticContainerService(userSvc, "User Service", "")
  ElasticContainerService(orderSvc, "Order Service", "")
  ElasticContainerService(productSvc, "Product Service", "")
  ElasticContainerService(notifySvc, "Notification Service", "")
}

The rest of this template, and how to use it

Data Lake Architecture.puml

Ingest, store, catalogue, query.

Data Lake Architecture: rendered example
Show the source
@startuml
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/main/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/Storage/SimpleStorageService.puml
!include AWSPuml/Analytics/Glue.puml
!include AWSPuml/Analytics/Athena.puml
!include AWSPuml/Analytics/Redshift.puml
!include AWSPuml/Analytics/QuickSight.puml
!include AWSPuml/Analytics/KinesisDataStreams.puml
!include AWSPuml/Analytics/LakeFormation.puml
!include AWSPuml/Database/RDS.puml

title AWS Data Lake Architecture

' Data Sources
RDS(sourceDb, "Source Database", "")
KinesisDataStreams(stream, "Kinesis Stream", "Real-time")

' Data Lake
LakeFormation(lakeFormation, "Lake Formation", "Governance")
SimpleStorageService(rawZone, "Raw Zone", "Landing")
SimpleStorageService(cleanZone, "Clean Zone", "Processed")
SimpleStorageService(curatedZone, "Curated Zone", "Analytics")

The rest of this template, and how to use it

CI/CD Pipeline.puml

CodePipeline and friends, end to end.

CI/CD Pipeline: rendered example
Show the source
@startuml
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/main/dist
!include AWSPuml/AWSCommon.puml
!include AWSPuml/DeveloperTools/CodeCommit.puml
!include AWSPuml/DeveloperTools/CodeBuild.puml
!include AWSPuml/DeveloperTools/CodeDeploy.puml
!include AWSPuml/DeveloperTools/CodePipeline.puml
!include AWSPuml/Containers/ElasticContainerRegistry.puml
!include AWSPuml/Containers/ElasticContainerService.puml
!include AWSPuml/Storage/SimpleStorageService.puml
!include AWSPuml/ApplicationIntegration/SimpleNotificationService.puml

title AWS CI/CD Pipeline

actor Developer as dev

CodeCommit(repo, "CodeCommit", "Source")
CodePipeline(pipeline, "CodePipeline", "Orchestration")
CodeBuild(build, "CodeBuild", "Build & Test")
ElasticContainerRegistry(registry, "ECR", "Container Registry")
SimpleStorageService(artifacts, "S3", "Artifacts")
CodeDeploy(deploy, "CodeDeploy", "Deployment")
ElasticContainerService(staging, "Staging", "ECS")
ElasticContainerService(production, "Production", "ECS")

The rest of this template, and how to use it

Render these offline

Every template here ships in Gnomon and renders on your machine, with no account and nothing sent to a server. The browser editor is free and needs no install.

Get GnomonOpen the browser editor