TheArchitect

Twitter/X Scale Test

AWS architecture template · CloudFront behavior split, API Gateway VPC Link, public/internal ALBs, private app/data subnets, queues, media, and data stores

Twitter/X Scale Test is a free AWS architecture template built with Load Balancer, API Gateway, CloudFront, CloudWatch, DynamoDB, ECS, ElastiCache, IAM, Lambda, RDS, Route 53, S3, SNS, SQS and VPC Link. Open it in TheArchitect to edit the diagram, estimate monthly cost, and export the CloudFormation or Terraform that deploys it.

Public ALB/NAT subnets A/BPrivate app + ingress subnets A/BPrivate data subnets A/BX Production VPC 10.0.0.0/16Route 53CloudFrontAPI GatewayIAMCloudWatchPublic Web ALBVPC LinkInternal API A…ECS API ClusterLambdaRDSElastiCacheSNSSQSDynamoDBS3
Twitter/X Scale Test architecture diagram

AWS services in this template

  • Load Balancer×2
  • API Gateway
  • CloudFront
  • CloudWatch
  • DynamoDB
  • ECS
  • ElastiCache
  • IAM
  • Lambda
  • RDS
  • Route 53
  • S3
  • SNS
  • SQS
  • VPC Link

Deployment notes

Deploy-ready

  • Uses realistic non-secret demo values across CDN, API, compute, data, and async layers.
  • Exercises VPC zone and subnet-zone inheritance for app, data, and edge resources.
  • Passes local deploy-readiness and registry-constraints checks without AWS ValidateTemplate or stack execution.

Generated CloudFormation — 52 resources

Logical IDResource type
Route53route53AWS::Route53::HostedZone
CloudFrontcloudfrontAWS::CloudFront::Distribution
APIGatewayapigatewayAWS::ApiGateway::RestApi
IAMiamAWS::IAM::Role
CloudWatchcloudwatchAWS::CloudWatch::Alarm
XProductionVPC1000016vpcAWS::EC2::VPC
XProductionVPC1000016vpcxpublicalbsgSecurityGroupAWS::EC2::SecurityGroup
XProductionVPC1000016vpcxvpclinksgSecurityGroupAWS::EC2::SecurityGroup
XProductionVPC1000016vpcxinternalalbsgSecurityGroupAWS::EC2::SecurityGroup
XProductionVPC1000016vpcxinternalalbsgSecurityGroupIngressRuleAWS::EC2::SecurityGroupIngress
XProductionVPC1000016vpcxlambdaworkersgSecurityGroupAWS::EC2::SecurityGroup
XProductionVPC1000016vpcxdbsgSecurityGroupAWS::EC2::SecurityGroup
XProductionVPC1000016vpcxdbsgSecurityGroupIngressRuleAWS::EC2::SecurityGroupIngress
XProductionVPC1000016vpcxcachesgSecurityGroupAWS::EC2::SecurityGroup
XProductionVPC1000016vpcxcachesgSecurityGroupIngressRuleAWS::EC2::SecurityGroupIngress
XProductionVPC1000016vpcPublicSubnet1AWS::EC2::Subnet
XProductionVPC1000016vpcPublicSubnet2AWS::EC2::Subnet
XProductionVPC1000016vpcPrivateSubnet1AWS::EC2::Subnet
XProductionVPC1000016vpcPrivateSubnet2AWS::EC2::Subnet
XProductionVPC1000016vpcPrivateSubnet3AWS::EC2::Subnet
XProductionVPC1000016vpcPrivateSubnet4AWS::EC2::Subnet
XProductionVPC1000016vpcInternetGatewayAWS::EC2::InternetGateway
XProductionVPC1000016vpcGatewayAttachmentAWS::EC2::VPCGatewayAttachment
XProductionVPC1000016vpcPublicRouteTableAWS::EC2::RouteTable
XProductionVPC1000016vpcPublicRouteAWS::EC2::Route
XProductionVPC1000016vpcPublicSubnet1RTAAWS::EC2::SubnetRouteTableAssociation
XProductionVPC1000016vpcPublicSubnet2RTAAWS::EC2::SubnetRouteTableAssociation
XProductionVPC1000016vpcNatEIPAWS::EC2::EIP
XProductionVPC1000016vpcNatGatewayAWS::EC2::NatGateway
XProductionVPC1000016vpcPrivateRouteTableAWS::EC2::RouteTable
XProductionVPC1000016vpcPrivateRouteAWS::EC2::Route
XProductionVPC1000016vpcPrivateSubnet1RTAAWS::EC2::SubnetRouteTableAssociation
XProductionVPC1000016vpcPrivateSubnet2RTAAWS::EC2::SubnetRouteTableAssociation
XProductionVPC1000016vpcPrivateSubnet3RTAAWS::EC2::SubnetRouteTableAssociation
XProductionVPC1000016vpcPrivateSubnet4RTAAWS::EC2::SubnetRouteTableAssociation
XProductionVPC1000016vpcDbSubnetGroupAWS::RDS::DBSubnetGroup
XProductionVPC1000016vpcCacheSubnetGroupAWS::ElastiCache::SubnetGroup
PublicWebALBelbAWS::ElasticLoadBalancingV2::LoadBalancer
VPCLinkvpclinkAWS::ApiGatewayV2::VpcLink
InternalAPIALBelbAWS::ElasticLoadBalancingV2::LoadBalancer
ECSAPIClusterecsAWS::ECS::Cluster
LambdalambdaAWS::Lambda::Function
RDSrdsAWS::RDS::DBInstance
ElastiCacheelasticacheAWS::ElastiCache::CacheCluster
SNSsnsAWS::SNS::Topic
SQSsqsAWS::SQS::Queue
DynamoDBdynamodbAWS::DynamoDB::Table
S3s3AWS::S3::Bucket
LambdalambdaSQSsqsEventSourceMappingAWS::Lambda::EventSourceMapping
SNSsnsSQSsqsQueuePolicyAWS::SQS::QueuePolicy
SNSsnsSQSsqsSubscriptionAWS::SNS::Subscription
LambdalambdaS3s3PermissionAWS::Lambda::Permission
View the full CloudFormation template
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "Generated by TheArchitect — https://www.thecloudarchitect.dev",
  "Resources": {
    "Route53route53": {
      "Type": "AWS::Route53::HostedZone",
      "Properties": {
        "Name": "social.example.com.",
        "HostedZoneConfig": {
          "Comment": "Public hosted zone for the social scale reference."
        }
      }
    },
    "CloudFrontcloudfront": {
      "Type": "AWS::CloudFront::Distribution",
      "Properties": {
        "DistributionConfig": {
          "Enabled": true,
          "Comment": "Global CDN for web, API, and media traffic.",
          "DefaultRootObject": "index.html",
          "PriceClass": "PriceClass_100",
          "HttpVersion": "http2and3",
          "IPV6Enabled": true,
          "Origins": [
            {
              "DomainName": {
                "Fn::GetAtt": [
                  "PublicWebALBelb",
                  "DNSName"
                ]
              },
              "Id": "LoadBalancerOrigin",
              "CustomOriginConfig": {
                "HTTPPort": 80,
                "HTTPSPort": 443,
                "OriginProtocolPolicy": "http-only",
                "OriginSSLProtocols": [
                  "TLSv1.2"
                ]
              }
            }
          ],
          "DefaultCacheBehavior": {
            "TargetOriginId": "LoadBalancerOrigin",
            "ViewerProtocolPolicy": "redirect-to-https",
            "AllowedMethods": [
              "GET",
              "HEAD",
              "OPTIONS"
            ],
            "CachedMethods": [
              "GET",
              "HEAD"
            ],
            "Compress": true,
            "ForwardedValues": {
              "QueryString": false,
              "Cookies": {
                "Forward": "none"
              }
            }
          },
          "ViewerCertificate": {
            "CloudFrontDefaultCertificate": true
          }
        }
      }
    },
    "APIGatewayapigateway": {
      "Type": "AWS::ApiGateway::RestApi",
      "Properties": {
        "Name": "architect-demo-social-api",
        "Description": "Regional API entry point for private VPC integrations.",
        "EndpointConfiguration": {
          "Types": [
            "REGIONAL"
          ]
        },
        "MinimumCompressionSize": 1024,
        "ApiKeySourceType": "HEADER",
        "SecurityPolicy": "TLS_1_2"
      }
    },
    "IAMiam": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": "x-social-execution-role",
        "Description": "Shared demo runtime role for Lambda workers and ECS task definitions.",
        "Path": "/",
        "MaxSessionDuration": 3600,
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "lambda.amazonaws.com",
                  "ecs-tasks.amazonaws.com"
                ]
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
          "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole",
          "arn:aws:iam::aws:policy/service-role/AWSLambdaSQSQueueExecutionRole"
        ]
      }
    },
    "CloudWatchcloudwatch": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmName": "architect-demo-social-errors",
        "AlarmDescription": "Demo service-level error alarm for social reference workloads.",
        "Namespace": "AWS/Lambda",
        "MetricName": "Errors",
        "Statistic": "Sum",
        "Period": 60,
        "EvaluationPeriods": 2,
        "Threshold": 5,
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "TreatMissingData": "notBreaching",
        "ActionsEnabled": true,
        "DatapointsToAlarm": 2
      }
    },
    "XProductionVPC1000016vpc": {
      "Type": "AWS::EC2::VPC",
      "Properties": {
        "CidrBlock": "10.0.0.0/16",
        "EnableDnsHostnames": true,
        "EnableDnsSupport": true,
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-prod-vpc"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcxpublicalbsgSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "x-public-alb-sg",
        "GroupDescription": "Allow public HTTPS traffic to the edge ALB",
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-public-alb-sg"
          }
        ],
        "SecurityGroupIngress": [
          {
            "IpProtocol": "tcp",
            "FromPort": 443,
            "ToPort": 443,
            "CidrIp": "0.0.0.0/0"
          }
        ],
        "SecurityGroupEgress": [
          {
            "IpProtocol": "-1",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcxvpclinksgSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "x-vpc-link-sg",
        "GroupDescription": "API Gateway VPC Link egress to private integrations",
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-vpc-link-sg"
          }
        ],
        "SecurityGroupEgress": [
          {
            "IpProtocol": "-1",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcxinternalalbsgSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "x-internal-alb-sg",
        "GroupDescription": "Allow API Gateway VPC Link traffic to the internal ALB",
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-internal-alb-sg"
          }
        ],
        "SecurityGroupEgress": [
          {
            "IpProtocol": "-1",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcxinternalalbsgSecurityGroupIngressRule": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "Properties": {
        "GroupId": {
          "Ref": "XProductionVPC1000016vpcxinternalalbsgSecurityGroup"
        },
        "IpProtocol": "tcp",
        "FromPort": 80,
        "ToPort": 80,
        "SourceSecurityGroupId": {
          "Ref": "XProductionVPC1000016vpcxvpclinksgSecurityGroup"
        }
      }
    },
    "XProductionVPC1000016vpcxlambdaworkersgSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "x-lambda-worker-sg",
        "GroupDescription": "Lambda workers with private egress to data stores",
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-lambda-worker-sg"
          }
        ],
        "SecurityGroupEgress": [
          {
            "IpProtocol": "-1",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcxdbsgSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "x-db-sg",
        "GroupDescription": "Allow private application workers to PostgreSQL",
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-db-sg"
          }
        ],
        "SecurityGroupEgress": [
          {
            "IpProtocol": "-1",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcxdbsgSecurityGroupIngressRule": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "Properties": {
        "GroupId": {
          "Ref": "XProductionVPC1000016vpcxdbsgSecurityGroup"
        },
        "IpProtocol": "tcp",
        "FromPort": 5432,
        "ToPort": 5432,
        "SourceSecurityGroupId": {
          "Ref": "XProductionVPC1000016vpcxlambdaworkersgSecurityGroup"
        }
      }
    },
    "XProductionVPC1000016vpcxcachesgSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "x-cache-sg",
        "GroupDescription": "Allow private application workers to Redis",
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-cache-sg"
          }
        ],
        "SecurityGroupEgress": [
          {
            "IpProtocol": "-1",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcxcachesgSecurityGroupIngressRule": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "Properties": {
        "GroupId": {
          "Ref": "XProductionVPC1000016vpcxcachesgSecurityGroup"
        },
        "IpProtocol": "tcp",
        "FromPort": 6379,
        "ToPort": 6379,
        "SourceSecurityGroupId": {
          "Ref": "XProductionVPC1000016vpcxlambdaworkersgSecurityGroup"
        }
      }
    },
    "XProductionVPC1000016vpcPublicSubnet1": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "CidrBlock": "10.0.1.0/24",
        "AvailabilityZone": "us-east-1a",
        "MapPublicIpOnLaunch": true,
        "Tags": [
          {
            "Key": "Name",
            "Value": "public-edge-a"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcPublicSubnet2": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "CidrBlock": "10.0.2.0/24",
        "AvailabilityZone": "us-east-1b",
        "MapPublicIpOnLaunch": true,
        "Tags": [
          {
            "Key": "Name",
            "Value": "public-edge-b"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcPrivateSubnet1": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "CidrBlock": "10.0.11.0/24",
        "AvailabilityZone": "us-east-1a",
        "MapPublicIpOnLaunch": false,
        "Tags": [
          {
            "Key": "Name",
            "Value": "private-app-a"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcPrivateSubnet2": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "CidrBlock": "10.0.12.0/24",
        "AvailabilityZone": "us-east-1b",
        "MapPublicIpOnLaunch": false,
        "Tags": [
          {
            "Key": "Name",
            "Value": "private-app-b"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcPrivateSubnet3": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "CidrBlock": "10.0.21.0/24",
        "AvailabilityZone": "us-east-1a",
        "MapPublicIpOnLaunch": false,
        "Tags": [
          {
            "Key": "Name",
            "Value": "private-data-a"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcPrivateSubnet4": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "CidrBlock": "10.0.22.0/24",
        "AvailabilityZone": "us-east-1b",
        "MapPublicIpOnLaunch": false,
        "Tags": [
          {
            "Key": "Name",
            "Value": "private-data-b"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcInternetGateway": {
      "Type": "AWS::EC2::InternetGateway",
      "Properties": {
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-prod-vpc-igw"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcGatewayAttachment": {
      "Type": "AWS::EC2::VPCGatewayAttachment",
      "Properties": {
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "InternetGatewayId": {
          "Ref": "XProductionVPC1000016vpcInternetGateway"
        }
      }
    },
    "XProductionVPC1000016vpcPublicRouteTable": {
      "Type": "AWS::EC2::RouteTable",
      "Properties": {
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-prod-vpc-public-rt"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcPublicRoute": {
      "Type": "AWS::EC2::Route",
      "DependsOn": [
        "XProductionVPC1000016vpcGatewayAttachment"
      ],
      "Properties": {
        "RouteTableId": {
          "Ref": "XProductionVPC1000016vpcPublicRouteTable"
        },
        "DestinationCidrBlock": "0.0.0.0/0",
        "GatewayId": {
          "Ref": "XProductionVPC1000016vpcInternetGateway"
        }
      }
    },
    "XProductionVPC1000016vpcPublicSubnet1RTA": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "SubnetId": {
          "Ref": "XProductionVPC1000016vpcPublicSubnet1"
        },
        "RouteTableId": {
          "Ref": "XProductionVPC1000016vpcPublicRouteTable"
        }
      }
    },
    "XProductionVPC1000016vpcPublicSubnet2RTA": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "SubnetId": {
          "Ref": "XProductionVPC1000016vpcPublicSubnet2"
        },
        "RouteTableId": {
          "Ref": "XProductionVPC1000016vpcPublicRouteTable"
        }
      }
    },
    "XProductionVPC1000016vpcNatEIP": {
      "Type": "AWS::EC2::EIP",
      "DependsOn": [
        "XProductionVPC1000016vpcGatewayAttachment"
      ],
      "Properties": {
        "Domain": "vpc"
      }
    },
    "XProductionVPC1000016vpcNatGateway": {
      "Type": "AWS::EC2::NatGateway",
      "Properties": {
        "AllocationId": {
          "Fn::GetAtt": [
            "XProductionVPC1000016vpcNatEIP",
            "AllocationId"
          ]
        },
        "SubnetId": {
          "Ref": "XProductionVPC1000016vpcPublicSubnet1"
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-prod-vpc-nat"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcPrivateRouteTable": {
      "Type": "AWS::EC2::RouteTable",
      "Properties": {
        "VpcId": {
          "Ref": "XProductionVPC1000016vpc"
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-prod-vpc-private-rt"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcPrivateRoute": {
      "Type": "AWS::EC2::Route",
      "Properties": {
        "RouteTableId": {
          "Ref": "XProductionVPC1000016vpcPrivateRouteTable"
        },
        "DestinationCidrBlock": "0.0.0.0/0",
        "NatGatewayId": {
          "Ref": "XProductionVPC1000016vpcNatGateway"
        }
      }
    },
    "XProductionVPC1000016vpcPrivateSubnet1RTA": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "SubnetId": {
          "Ref": "XProductionVPC1000016vpcPrivateSubnet1"
        },
        "RouteTableId": {
          "Ref": "XProductionVPC1000016vpcPrivateRouteTable"
        }
      }
    },
    "XProductionVPC1000016vpcPrivateSubnet2RTA": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "SubnetId": {
          "Ref": "XProductionVPC1000016vpcPrivateSubnet2"
        },
        "RouteTableId": {
          "Ref": "XProductionVPC1000016vpcPrivateRouteTable"
        }
      }
    },
    "XProductionVPC1000016vpcPrivateSubnet3RTA": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "SubnetId": {
          "Ref": "XProductionVPC1000016vpcPrivateSubnet3"
        },
        "RouteTableId": {
          "Ref": "XProductionVPC1000016vpcPrivateRouteTable"
        }
      }
    },
    "XProductionVPC1000016vpcPrivateSubnet4RTA": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "SubnetId": {
          "Ref": "XProductionVPC1000016vpcPrivateSubnet4"
        },
        "RouteTableId": {
          "Ref": "XProductionVPC1000016vpcPrivateRouteTable"
        }
      }
    },
    "XProductionVPC1000016vpcDbSubnetGroup": {
      "Type": "AWS::RDS::DBSubnetGroup",
      "Properties": {
        "DBSubnetGroupDescription": "Private subnets for x-prod-vpc",
        "SubnetIds": [
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet1"
          },
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet2"
          },
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet3"
          },
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet4"
          }
        ],
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-prod-vpc-db-subnet-group"
          }
        ]
      }
    },
    "XProductionVPC1000016vpcCacheSubnetGroup": {
      "Type": "AWS::ElastiCache::SubnetGroup",
      "Properties": {
        "Description": "Private subnets for x-prod-vpc",
        "SubnetIds": [
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet1"
          },
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet2"
          },
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet3"
          },
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet4"
          }
        ],
        "Tags": [
          {
            "Key": "Name",
            "Value": "x-prod-vpc-cache-subnet-group"
          }
        ]
      }
    },
    "PublicWebALBelb": {
      "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
      "Properties": {
        "Name": "architect-demo-web-alb",
        "Type": "application",
        "Scheme": "internet-facing",
        "IpAddressType": "ipv4",
        "Subnets": [
          {
            "Ref": "XProductionVPC1000016vpcPublicSubnet1"
          },
          {
            "Ref": "XProductionVPC1000016vpcPublicSubnet2"
          }
        ],
        "SecurityGroups": [
          {
            "Ref": "XProductionVPC1000016vpcxpublicalbsgSecurityGroup"
          }
        ]
      }
    },
    "VPCLinkvpclink": {
      "Type": "AWS::ApiGatewayV2::VpcLink",
      "Properties": {
        "Name": "x-api-vpc-link",
        "SubnetIds": [
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet1"
          },
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet2"
          }
        ],
        "SecurityGroupIds": [
          {
            "Ref": "XProductionVPC1000016vpcxvpclinksgSecurityGroup"
          }
        ]
      }
    },
    "InternalAPIALBelb": {
      "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
      "Properties": {
        "Name": "architect-demo-api-alb",
        "Type": "application",
        "Scheme": "internal",
        "IpAddressType": "ipv4",
        "Subnets": [
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet1"
          },
          {
            "Ref": "XProductionVPC1000016vpcPrivateSubnet2"
          }
        ],
        "SecurityGroups": [
          {
            "Ref": "XProductionVPC1000016vpcxinternalalbsgSecurityGroup"
          }
        ]
      }
    },
    "ECSAPIClusterecs": {
      "Type": "AWS::ECS::Cluster",
      "Properties": {
        "ClusterName": "architect-demo-social-api",
        "ClusterSettings": [
          {
            "Name": "containerInsights",
            "Value": "enhanced"
          }
        ],
        "CapacityProviders": [
          "FARGATE"
        ],
        "DefaultCapacityProviderStrategy": [
          {
            "CapacityProvider": "FARGATE",
            "Weight": 1
          }
        ]
      }
    },
    "Lambdalambda": {
      "Type": "AWS::Lambda::Function",
      "DependsOn": [
        "IAMiam"
      ],
      "Properties": {
        "FunctionName": "x-social-worker",
        "Runtime": "nodejs20.x",
        "Handler": "index.handler",
        "Role": {
          "Fn::GetAtt": [
            "IAMiam",
            "Arn"
          ]
        },
        "MemorySize": 1024,
        "Architectures": [
          "arm64"
        ],
        "Timeout": 60,
        "Description": "Processes async fanout, media, and timeline jobs.",
        "VpcConfig": {
          "SubnetIds": [
            {
              "Ref": "XProductionVPC1000016vpcPrivateSubnet1"
            },
            {
              "Ref": "XProductionVPC1000016vpcPrivateSubnet2"
            }
          ],
          "SecurityGroupIds": [
            {
              "Ref": "XProductionVPC1000016vpcxlambdaworkersgSecurityGroup"
            }
          ]
        },
        "Environment": {
          "Variables": {
            "APP_ENV": "demo",
            "LOG_LEVEL": "info"
          }
        },
        "TracingConfig": {
          "Mode": "Active"
        },
        "Code": {
          "ZipFile": "exports.handler = async (event) => ({ processed: Array.isArray(event.Records) ? event.Records.length : 1 });"
        }
      }
    },
    "RDSrds": {
      "Type": "AWS::RDS::DBInstance",
      "Properties": {
        "DBInstanceIdentifier": "x-social-db",
        "Engine": "postgres",
        "EngineVersion": "16.4",
        "DBName": "socialdb",
        "DBInstanceClass": "db.r6g.large",
        "MultiAZ": true,
        "DBSubnetGroupName": {
          "Ref": "XProductionVPC1000016vpcDbSubnetGroup"
        },
        "VPCSecurityGroups": [
          {
            "Ref": "XProductionVPC1000016vpcxdbsgSecurityGroup"
          }
        ],
        "PubliclyAccessible": false,
        "Port": 5432,
        "AllocatedStorage": "100",
        "MaxAllocatedStorage": 500,
        "StorageType": "gp3",
        "MasterUsername": "socialadmin",
        "ManageMasterUserPassword": true,
        "StorageEncrypted": true,
        "DeletionProtection": false,
        "BackupRetentionPeriod": 7,
        "CopyTagsToSnapshot": true
      }
    },
    "ElastiCacheelasticache": {
      "Type": "AWS::ElastiCache::CacheCluster",
      "Properties": {
        "ClusterName": "x-social-cache",
        "Engine": "redis",
        "EngineVersion": "7.1",
        "CacheNodeType": "cache.r7g.large",
        "NumCacheNodes": 1,
        "CacheSubnetGroupName": {
          "Ref": "XProductionVPC1000016vpcCacheSubnetGroup"
        },
        "VpcSecurityGroupIds": [
          {
            "Ref": "XProductionVPC1000016vpcxcachesgSecurityGroup"
          }
        ],
        "Port": 6379,
        "TransitEncryptionEnabled": true,
        "SnapshotRetentionLimit": 7,
        "SnapshotWindow": "05:00-06:00",
        "PreferredMaintenanceWindow": "sun:06:00-sun:07:00"
      }
    },
    "SNSsns": {
      "Type": "AWS::SNS::Topic",
      "Properties": {
        "TopicName": "architect-demo-social-fanout",
        "DisplayName": "Architect demo social fanout",
        "TracingConfig": "Active"
      }
    },
    "SQSsqs": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "QueueName": "architect-demo-social-jobs",
        "VisibilityTimeout": 120,
        "MessageRetentionPeriod": 1209600,
        "ReceiveMessageWaitTimeSeconds": 20,
        "SqsManagedSseEnabled": true
      }
    },
    "DynamoDBdynamodb": {
      "Type": "AWS::DynamoDB::Table",
      "Properties": {
        "TableName": "architect-demo-social-timeline",
        "BillingMode": "PAY_PER_REQUEST",
        "AttributeDefinitions": [
          {
            "AttributeName": "pk",
            "AttributeType": "S"
          },
          {
            "AttributeName": "sk",
            "AttributeType": "S"
          }
        ],
        "KeySchema": [
          {
            "AttributeName": "pk",
            "KeyType": "HASH"
          },
          {
            "AttributeName": "sk",
            "KeyType": "RANGE"
          }
        ],
        "PointInTimeRecoverySpecification": {
          "PointInTimeRecoveryEnabled": true
        },
        "SSESpecification": {
          "SSEEnabled": true
        },
        "DeletionProtectionEnabled": false,
        "TableClass": "STANDARD"
      }
    },
    "S3s3": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketName": "architect-demo-social-media",
        "VersioningConfiguration": {
          "Status": "Enabled"
        },
        "OwnershipControls": {
          "Rules": [
            {
              "ObjectOwnership": "BucketOwnerEnforced"
            }
          ]
        },
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "Name",
            "Value": "architect-demo-social-media"
          }
        ],
        "LifecycleConfiguration": {
          "Rules": [
            {
              "Status": "Enabled",
              "Id": "transition-media",
              "Prefix": "media/"
            }
          ]
        },
        "NotificationConfiguration": {
          "LambdaConfigurations": [
            {
              "Event": "s3:ObjectCreated:*",
              "Function": {
                "Fn::GetAtt": [
                  "Lambdalambda",
                  "Arn"
                ]
              }
            }
          ]
        }
      },
      "DependsOn": [
        "LambdalambdaS3s3Permission"
      ]
    },
    "LambdalambdaSQSsqsEventSourceMapping": {
      "Type": "AWS::Lambda::EventSourceMapping",
      "DependsOn": [
        "Lambdalambda",
        "SQSsqs"
      ],
      "Properties": {
        "EventSourceArn": {
          "Fn::GetAtt": [
            "SQSsqs",
            "Arn"
          ]
        },
        "FunctionName": {
          "Ref": "Lambdalambda"
        },
        "Enabled": true,
        "BatchSize": 10
      }
    },
    "SNSsnsSQSsqsQueuePolicy": {
      "Type": "AWS::SQS::QueuePolicy",
      "DependsOn": [
        "SQSsqs"
      ],
      "Properties": {
        "Queues": [
          {
            "Ref": "SQSsqs"
          }
        ],
        "PolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": "sns.amazonaws.com"
              },
              "Action": "sqs:SendMessage",
              "Resource": {
                "Fn::GetAtt": [
                  "SQSsqs",
                  "Arn"
                ]
              },
              "Condition": {
                "ArnEquals": {
                  "aws:SourceArn": {
                    "Ref": "SNSsns"
                  }
                }
              }
            }
          ]
        }
      }
    },
    "SNSsnsSQSsqsSubscription": {
      "Type": "AWS::SNS::Subscription",
      "DependsOn": [
        "SNSsnsSQSsqsQueuePolicy"
      ],
      "Properties": {
        "TopicArn": {
          "Ref": "SNSsns"
        },
        "Protocol": "sqs",
        "Endpoint": {
          "Fn::GetAtt": [
            "SQSsqs",
            "Arn"
          ]
        }
      }
    },
    "LambdalambdaS3s3Permission": {
      "Type": "AWS::Lambda::Permission",
      "DependsOn": [
        "Lambdalambda"
      ],
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Ref": "Lambdalambda"
        },
        "Principal": "s3.amazonaws.com",
        "SourceAccount": {
          "Ref": "AWS::AccountId"
        },
        "SourceArn": {
          "Fn::Sub": "arn:${AWS::Partition}:s3:::architect-demo-social-media"
        }
      }
    }
  }
}

Generated by TheArchitect from the diagram above. Review values such as names, CIDR ranges and instance sizes before deploying to your account.

Related templates