# Diagrams
```plantuml
@startuml
!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v13.1/dist
!include AWSPuml/AWSCommon.puml
' comment out to simplify
!include AWSPuml/AWSSimplified.puml
!include AWSPuml/General/Users.puml
!include AWSPuml/Storage/SimpleStorageServiceBucketWithObjects.puml
!include AWSPuml/NetworkingContentDelivery/ElasticLoadBalancingApplicationLoadBalancer.puml
!include AWSPuml/NetworkingContentDelivery/Route53.puml
!include AWSPuml/NetworkingContentDelivery/CloudFront.puml
!include AWSPuml/Compute/EC2.puml
!include AWSPuml/Compute/EC2Instance.puml
!include AWSPuml/Containers/Fargate.puml
!include AWSPuml/Groups/AWSCloud.puml
!include AWSPuml/Groups/VPC.puml
!include AWSPuml/Groups/AvailabilityZone.puml
!include AWSPuml/Groups/PublicSubnet.puml
!include AWSPuml/Groups/PrivateSubnet.puml
!include AWSPuml/Groups/AutoScalingGroup.puml
!include AWSPuml/NetworkingContentDelivery/VPCNATGateway.puml
!include AWSPuml/NetworkingContentDelivery/VPCInternetGateway.puml
!include AWSPuml/Compute/EC2.puml
!include AWSPuml/Database/Aurora.puml
!include AWSPuml/SecurityIdentityCompliance/WAF.puml
' left to right direction
Users(users, "Users", "millions of users")
AWSCloudGroup(cloud) {
together {
Route53(route53, "DNS", "Route53")
CloudFront(cloudfront, "CDN", "")
SimpleStorageServiceBucketWithObjects(s3, "Static Resources", "")
}
VPCInternetGateway(internet_gateway, "Internet gateway", "")
VPCGroup(vpc) {
PublicSubnetGroup(public_subnet, "Public Subnets (3)") {
together {
WAF(waf,"Web Application Firewall", "")
ElasticLoadBalancingApplicationLoadBalancer(public_alb, "Public ALB", "public load balancer")
}
VPCNATGateway(nat_gateway, "NAT gateway", "")
waf <-> public_alb
}
PublicSubnetGroup(dmz_subnet, "DMZ Subnets (3)") {
EC2(nat_gateways, "SFTP", "")
}
PrivateSubnetGroup(private_subnet, "Private Subnets (3)") {
ElasticLoadBalancingApplicationLoadBalancer(private_alb, "Private ALB", "private load balancer")
Aurora(db, "Database(s)", "")
AutoScalingGroupGroup(containers,"Autoscaling App") {
AvailabilityZoneGroup(az1, "Availability Zone") {
Fargate(container_1, "app", "")
}
AvailabilityZoneGroup(az2, "Availability Zone") {
Fargate(container_2, "app", "")
}
AvailabilityZoneGroup(az3, "Availability Zone") {
Fargate(container_3, "app", "")
}
}
private_alb -> containers
public_alb -> containers
containers --> db
}
cloudfront --> public_alb
containers .u.> nat_gateway
}
users --> route53
route53 --> cloudfront
cloudfront -> s3
nat_gateway .u.-> internet_gateway
private_subnet .[hidden]u.> public_subnet
}
@enduml
```