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.
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 ID | Resource type |
|---|---|
| Route53route53 | AWS::Route53::HostedZone |
| CloudFrontcloudfront | AWS::CloudFront::Distribution |
| APIGatewayapigateway | AWS::ApiGateway::RestApi |
| IAMiam | AWS::IAM::Role |
| CloudWatchcloudwatch | AWS::CloudWatch::Alarm |
| XProductionVPC1000016vpc | AWS::EC2::VPC |
| XProductionVPC1000016vpcxpublicalbsgSecurityGroup | AWS::EC2::SecurityGroup |
| XProductionVPC1000016vpcxvpclinksgSecurityGroup | AWS::EC2::SecurityGroup |
| XProductionVPC1000016vpcxinternalalbsgSecurityGroup | AWS::EC2::SecurityGroup |
| XProductionVPC1000016vpcxinternalalbsgSecurityGroupIngressRule | AWS::EC2::SecurityGroupIngress |
| XProductionVPC1000016vpcxlambdaworkersgSecurityGroup | AWS::EC2::SecurityGroup |
| XProductionVPC1000016vpcxdbsgSecurityGroup | AWS::EC2::SecurityGroup |
| XProductionVPC1000016vpcxdbsgSecurityGroupIngressRule | AWS::EC2::SecurityGroupIngress |
| XProductionVPC1000016vpcxcachesgSecurityGroup | AWS::EC2::SecurityGroup |
| XProductionVPC1000016vpcxcachesgSecurityGroupIngressRule | AWS::EC2::SecurityGroupIngress |
| XProductionVPC1000016vpcPublicSubnet1 | AWS::EC2::Subnet |
| XProductionVPC1000016vpcPublicSubnet2 | AWS::EC2::Subnet |
| XProductionVPC1000016vpcPrivateSubnet1 | AWS::EC2::Subnet |
| XProductionVPC1000016vpcPrivateSubnet2 | AWS::EC2::Subnet |
| XProductionVPC1000016vpcPrivateSubnet3 | AWS::EC2::Subnet |
| XProductionVPC1000016vpcPrivateSubnet4 | AWS::EC2::Subnet |
| XProductionVPC1000016vpcInternetGateway | AWS::EC2::InternetGateway |
| XProductionVPC1000016vpcGatewayAttachment | AWS::EC2::VPCGatewayAttachment |
| XProductionVPC1000016vpcPublicRouteTable | AWS::EC2::RouteTable |
| XProductionVPC1000016vpcPublicRoute | AWS::EC2::Route |
| XProductionVPC1000016vpcPublicSubnet1RTA | AWS::EC2::SubnetRouteTableAssociation |
| XProductionVPC1000016vpcPublicSubnet2RTA | AWS::EC2::SubnetRouteTableAssociation |
| XProductionVPC1000016vpcNatEIP | AWS::EC2::EIP |
| XProductionVPC1000016vpcNatGateway | AWS::EC2::NatGateway |
| XProductionVPC1000016vpcPrivateRouteTable | AWS::EC2::RouteTable |
| XProductionVPC1000016vpcPrivateRoute | AWS::EC2::Route |
| XProductionVPC1000016vpcPrivateSubnet1RTA | AWS::EC2::SubnetRouteTableAssociation |
| XProductionVPC1000016vpcPrivateSubnet2RTA | AWS::EC2::SubnetRouteTableAssociation |
| XProductionVPC1000016vpcPrivateSubnet3RTA | AWS::EC2::SubnetRouteTableAssociation |
| XProductionVPC1000016vpcPrivateSubnet4RTA | AWS::EC2::SubnetRouteTableAssociation |
| XProductionVPC1000016vpcDbSubnetGroup | AWS::RDS::DBSubnetGroup |
| XProductionVPC1000016vpcCacheSubnetGroup | AWS::ElastiCache::SubnetGroup |
| PublicWebALBelb | AWS::ElasticLoadBalancingV2::LoadBalancer |
| VPCLinkvpclink | AWS::ApiGatewayV2::VpcLink |
| InternalAPIALBelb | AWS::ElasticLoadBalancingV2::LoadBalancer |
| ECSAPIClusterecs | AWS::ECS::Cluster |
| Lambdalambda | AWS::Lambda::Function |
| RDSrds | AWS::RDS::DBInstance |
| ElastiCacheelasticache | AWS::ElastiCache::CacheCluster |
| SNSsns | AWS::SNS::Topic |
| SQSsqs | AWS::SQS::Queue |
| DynamoDBdynamodb | AWS::DynamoDB::Table |
| S3s3 | AWS::S3::Bucket |
| LambdalambdaSQSsqsEventSourceMapping | AWS::Lambda::EventSourceMapping |
| SNSsnsSQSsqsQueuePolicy | AWS::SQS::QueuePolicy |
| SNSsnsSQSsqsSubscription | AWS::SNS::Subscription |
| LambdalambdaS3s3Permission | AWS::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
- Media Transcode PipelineS3 upload triggers a Lambda dispatcher that enqueues SQS jobs consumed by auto-scaled Fargate workers. Renditions are served via CloudFront.
- ML Inference + Feature StoreServerless ML serving with a dual feature store: Redis for low-latency online features and S3 for offline training set assembly via Athena.
- FIFO Payments LedgerExactly-once payment processing with FIFO SQS deduplication, conditional DynamoDB writes for idempotency, CMK encryption, and a DLQ alert path.