Hybrid Connectivity
AWS architecture template · SAA-C03: Direct Connect → private VPC → EC2 + RDS (on-premises extension)
Hybrid Connectivity is a free AWS architecture template built with Direct Connect, EC2 and RDS. 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
- Direct Connect
- EC2
- RDS
Deployment notes
Reference
- Direct Connect requires physical cross-connect provisioning — it cannot be created by CloudFormation alone.
- EC2 and RDS resources are deployable; the DX connection is the reference anchor.
Generated CloudFormation — 18 resources
| Logical ID | Resource type |
|---|---|
| DirectConnectdirectconnect | AWS::DirectConnect::Connection |
| HybridVPC10100016vpc | AWS::EC2::VPC |
| HybridVPC10100016vpcappruntimesgSecurityGroup | AWS::EC2::SecurityGroup |
| HybridVPC10100016vpcdatastoresgSecurityGroup | AWS::EC2::SecurityGroup |
| HybridVPC10100016vpcdatastoresgSecurityGroupIngressRule | AWS::EC2::SecurityGroupIngress |
| HybridVPC10100016vpcPrivateSubnet1 | AWS::EC2::Subnet |
| HybridVPC10100016vpcPrivateSubnet2 | AWS::EC2::Subnet |
| HybridVPC10100016vpcPrivateSubnet3 | AWS::EC2::Subnet |
| HybridVPC10100016vpcPrivateSubnet4 | AWS::EC2::Subnet |
| HybridVPC10100016vpcPrivateRouteTable | AWS::EC2::RouteTable |
| HybridVPC10100016vpcPrivateSubnet1RTA | AWS::EC2::SubnetRouteTableAssociation |
| HybridVPC10100016vpcPrivateSubnet2RTA | AWS::EC2::SubnetRouteTableAssociation |
| HybridVPC10100016vpcPrivateSubnet3RTA | AWS::EC2::SubnetRouteTableAssociation |
| HybridVPC10100016vpcPrivateSubnet4RTA | AWS::EC2::SubnetRouteTableAssociation |
| HybridVPC10100016vpcDbSubnetGroup | AWS::RDS::DBSubnetGroup |
| AppInstanceec2 | AWS::EC2::Instance |
| PostgreSQLDBrds | AWS::RDS::DBInstance |
| PostgreSQLDBrdsIngressSG | AWS::EC2::SecurityGroup |
View the full CloudFormation template
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Generated by TheArchitect — https://www.thecloudarchitect.dev",
"Metadata": {
"TheArchitect": {
"Edges": [
{
"From": "AppInstanceec2",
"To": "PostgreSQLDBrds",
"Label": "SQL"
}
]
}
},
"Resources": {
"DirectConnectdirectconnect": {
"Type": "AWS::DirectConnect::Connection",
"Properties": {
"ConnectionName": "saa-hybrid-dx",
"Bandwidth": "1Gbps",
"Location": "EqSE2"
}
},
"HybridVPC10100016vpc": {
"Type": "AWS::EC2::VPC",
"Properties": {
"CidrBlock": "10.10.0.0/16",
"EnableDnsHostnames": true,
"EnableDnsSupport": true,
"Tags": [
{
"Key": "Name",
"Value": "saa-hybrid-vpc"
}
]
}
},
"HybridVPC10100016vpcappruntimesgSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupName": "app-runtime-sg",
"GroupDescription": "App tier from on-premises CIDR",
"VpcId": {
"Ref": "HybridVPC10100016vpc"
},
"Tags": [
{
"Key": "Name",
"Value": "app-runtime-sg"
}
],
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": 8080,
"ToPort": 8080,
"CidrIp": "192.168.0.0/16"
}
],
"SecurityGroupEgress": [
{
"IpProtocol": "-1",
"CidrIp": "0.0.0.0/0"
}
]
}
},
"HybridVPC10100016vpcdatastoresgSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupName": "data-store-sg",
"GroupDescription": "DB access from app tier",
"VpcId": {
"Ref": "HybridVPC10100016vpc"
},
"Tags": [
{
"Key": "Name",
"Value": "data-store-sg"
}
],
"SecurityGroupEgress": [
{
"IpProtocol": "-1",
"CidrIp": "0.0.0.0/0"
}
]
}
},
"HybridVPC10100016vpcdatastoresgSecurityGroupIngressRule": {
"Type": "AWS::EC2::SecurityGroupIngress",
"Properties": {
"GroupId": {
"Ref": "HybridVPC10100016vpcdatastoresgSecurityGroup"
},
"IpProtocol": "tcp",
"FromPort": 5432,
"ToPort": 5432,
"SourceSecurityGroupId": {
"Ref": "HybridVPC10100016vpcappruntimesgSecurityGroup"
}
}
},
"HybridVPC10100016vpcPrivateSubnet1": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"VpcId": {
"Ref": "HybridVPC10100016vpc"
},
"CidrBlock": "10.10.11.0/24",
"AvailabilityZone": "us-east-1a",
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "Name",
"Value": "private-app-a"
}
]
}
},
"HybridVPC10100016vpcPrivateSubnet2": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"VpcId": {
"Ref": "HybridVPC10100016vpc"
},
"CidrBlock": "10.10.12.0/24",
"AvailabilityZone": "us-east-1b",
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "Name",
"Value": "private-app-b"
}
]
}
},
"HybridVPC10100016vpcPrivateSubnet3": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"VpcId": {
"Ref": "HybridVPC10100016vpc"
},
"CidrBlock": "10.10.21.0/24",
"AvailabilityZone": "us-east-1a",
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "Name",
"Value": "private-data-a"
}
]
}
},
"HybridVPC10100016vpcPrivateSubnet4": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"VpcId": {
"Ref": "HybridVPC10100016vpc"
},
"CidrBlock": "10.10.22.0/24",
"AvailabilityZone": "us-east-1b",
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "Name",
"Value": "private-data-b"
}
]
}
},
"HybridVPC10100016vpcPrivateRouteTable": {
"Type": "AWS::EC2::RouteTable",
"Properties": {
"VpcId": {
"Ref": "HybridVPC10100016vpc"
},
"Tags": [
{
"Key": "Name",
"Value": "saa-hybrid-vpc-private-rt"
}
]
}
},
"HybridVPC10100016vpcPrivateSubnet1RTA": {
"Type": "AWS::EC2::SubnetRouteTableAssociation",
"Properties": {
"SubnetId": {
"Ref": "HybridVPC10100016vpcPrivateSubnet1"
},
"RouteTableId": {
"Ref": "HybridVPC10100016vpcPrivateRouteTable"
}
}
},
"HybridVPC10100016vpcPrivateSubnet2RTA": {
"Type": "AWS::EC2::SubnetRouteTableAssociation",
"Properties": {
"SubnetId": {
"Ref": "HybridVPC10100016vpcPrivateSubnet2"
},
"RouteTableId": {
"Ref": "HybridVPC10100016vpcPrivateRouteTable"
}
}
},
"HybridVPC10100016vpcPrivateSubnet3RTA": {
"Type": "AWS::EC2::SubnetRouteTableAssociation",
"Properties": {
"SubnetId": {
"Ref": "HybridVPC10100016vpcPrivateSubnet3"
},
"RouteTableId": {
"Ref": "HybridVPC10100016vpcPrivateRouteTable"
}
}
},
"HybridVPC10100016vpcPrivateSubnet4RTA": {
"Type": "AWS::EC2::SubnetRouteTableAssociation",
"Properties": {
"SubnetId": {
"Ref": "HybridVPC10100016vpcPrivateSubnet4"
},
"RouteTableId": {
"Ref": "HybridVPC10100016vpcPrivateRouteTable"
}
}
},
"HybridVPC10100016vpcDbSubnetGroup": {
"Type": "AWS::RDS::DBSubnetGroup",
"Properties": {
"DBSubnetGroupDescription": "Private subnets for saa-hybrid-vpc",
"SubnetIds": [
{
"Ref": "HybridVPC10100016vpcPrivateSubnet1"
},
{
"Ref": "HybridVPC10100016vpcPrivateSubnet2"
},
{
"Ref": "HybridVPC10100016vpcPrivateSubnet3"
},
{
"Ref": "HybridVPC10100016vpcPrivateSubnet4"
}
],
"Tags": [
{
"Key": "Name",
"Value": "saa-hybrid-vpc-db-subnet-group"
}
]
}
},
"AppInstanceec2": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "t3.medium",
"Tags": [
{
"Key": "Name",
"Value": "saa-hybrid-app"
}
],
"SubnetId": {
"Ref": "HybridVPC10100016vpcPrivateSubnet1"
},
"SecurityGroupIds": [
{
"Ref": "HybridVPC10100016vpcappruntimesgSecurityGroup"
}
],
"MetadataOptions": {
"HttpTokens": "required"
}
}
},
"PostgreSQLDBrds": {
"Type": "AWS::RDS::DBInstance",
"Properties": {
"DBInstanceIdentifier": "saa-hybrid-appdb",
"Engine": "postgres",
"DBName": "appdb",
"DBInstanceClass": "db.t4g.micro",
"DBSubnetGroupName": {
"Ref": "HybridVPC10100016vpcDbSubnetGroup"
},
"VPCSecurityGroups": [
{
"Ref": "HybridVPC10100016vpcdatastoresgSecurityGroup"
},
{
"Ref": "PostgreSQLDBrdsIngressSG"
}
],
"PubliclyAccessible": false,
"AllocatedStorage": "20",
"MaxAllocatedStorage": 100,
"StorageType": "gp3",
"MasterUsername": "appadmin",
"ManageMasterUserPassword": true,
"StorageEncrypted": true,
"BackupRetentionPeriod": 7
}
},
"PostgreSQLDBrdsIngressSG": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "Allow connected compute to RDS postgres on port 5432",
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": 5432,
"ToPort": 5432,
"SourceSecurityGroupId": {
"Ref": "HybridVPC10100016vpcappruntimesgSecurityGroup"
}
}
],
"VpcId": {
"Ref": "HybridVPC10100016vpc"
}
}
}
}
}Generated by TheArchitect from the diagram above. Review values such as names, CIDR ranges and instance sizes before deploying to your account.