Advanced Virtual Private Cloud (VPC) Implementation
From the network + curriculum
TL;DR
Advanced VPC implementation goes beyond basic networking by using constructs like Transit Gateway, VPC peering, and Direct Connect to create complex, scalable, and secure network architectures. These tools help connect multiple VPCs, on-premises networks, and services efficiently while maintaining isolation. Mastering them lets you design highly resilient and interconnected cloud environments tailored to specific organizational needs.
1. The Mental Model
Think of your basic VPC as a single house on a street. Advanced VPC takes this further, letting you build a whole neighborhood, connect it to other neighborhoods, and even link it to an office building across town, all while keeping traffic organized and secure.
2. The Core Material
When you move beyond a single VPC, you often need to connect multiple VPCs, perhaps across different AWS accounts or regions, and even integrate your on-premises data centers. That's where advanced VPC features come in.
2.1 VPC Peering
VPC peering allows two VPCs to communicate with each other directly using private IP addresses, as if they were on the same network. It's great for simple, one-to-one connections but doesn't scale well for many VPCs. Each peering connection is a separate resource you manage.
- How it works: You request a peering connection from one VPC to another. The owner of the target VPC accepts it. Then, you add routes to your route tables to direct traffic to the peered VPC through the peering connection.
- Limitations: It's non-transitive. If VPC A peers with B, and B peers with C, A cannot communicate with C via B. You'd need a direct peering connection between A and C.
- Use case: Connecting a central shared services VPC (e.g., DNS, logging) to a few application VPCs.
2.2 AWS Transit Gateway (TGW)
Transit Gateway is a network hub that connects your VPCs and on-premises networks through a central point. This simplifies your network architecture by eliminating the need for numerous point-to-point connections.
- How it works: You create a TGW, attach your VPCs to it, and configure routing within the TGW. Each attachment acts like a network interface.
- Benefits:
- Scalability: Connects hundreds or thousands of VPCs without complex peering meshes.
- Centralized Control: Manage routing and network policies from a single point.
- Transitivity: VPCs connected to the TGW can communicate with each other through the TGW.
- Inter-Region peering: You can peer Transit Gateways across different AWS regions.
- Components:
- TGW Attachments: Connect VPCs, VPNs, or Direct Connect gateways to the TGW.
- TGW Route Tables: Control how traffic is routed between attachments. You can have multiple route tables and associate them with specific attachments.
- TGW Peering: Connects Transit Gateways in different regions.
- Use case: Building a hub-and-spoke network for a large organization with many VPCs across multiple accounts and regions.
2.3 AWS Direct Connect (DX)

Photo by Brett Sayles on Pexels
Direct Connect creates a dedicated private network connection from your on-premises data center to AWS. This bypasses the public internet, offering higher bandwidth, lower latency, and a more consistent network experience.
- How it works: You establish a physical connection at an AWS Direct Connect location. Then, you create virtual interfaces (VIFs) over this connection to access your VPCs (private VIF) or public AWS services (public VIF).
- Benefits:
- Reduced Cost: For high data transfer, it can be cheaper than internet egress.
- Increased Bandwidth: Available speeds up to 100 Gbps.
- Consistent Network Performance: Eliminates internet variability.
- Enhanced Security: Private connection, not exposed to the internet.
- Integration with TGW: You typically connect your Direct Connect gateway to a Transit Gateway to provide on-premises access to all connected VPCs.
Here's how these components interact:
graph TD
subgraph On-Premises Network
DC["Data Center"]
end
subgraph AWS Cloud (Region A)
VPC_A["VPC A (App 1)"]
VPC_B["VPC B (App 2)"]
VPC_C["VPC C (Shared Services)"]
TGW_A["Transit Gateway (Region A)"]
DX_Gateway["Direct Connect Gateway"]
end
subgraph AWS Cloud (Region B)
VPC_D["VPC D (DR Site)"]
TGW_B["Transit Gateway (Region B)"]
end
DC -- Dedicated Connection --> DX_Gateway
DX_Gateway -- "Connects to TGW" --> TGW_A
TGW_A -- "Attachment" --> VPC_A
TGW_A -- "Attachment" --> VPC_B
TGW_A -- "Attachment" --> VPC_C
TGW_A -- "TGW Peering" --> TGW_B
TGW_B -- "Attachment" --> VPC_D
style DC fill:#f9f,stroke:#333,stroke-width:2px
style VPC_A fill:#ccf,stroke:#333,stroke-width:2px
style VPC_B fill:#ccf,stroke:#333,stroke-width:2px
style VPC_C fill:#ccf,stroke:#333,stroke-width:2px
style VPC_D fill:#ccf,stroke:#333,stroke-width:2px
style TGW_A fill:#afa,stroke:#333,stroke-width:2px
style TGW_B fill:#afa,stroke:#333,stroke-width:2px
style DX_Gateway fill:#afa,stroke:#333,stroke-width:2px
3. Worked Example
Let's say you have three VPCs: prod-app-vpc (10.0.0.0/16), dev-app-vpc (10.1.0.0/16), and shared-services-vpc (10.2.0.0/16). You want prod-app-vpc and dev-app-vpc to access resources in shared-services-vpc, but prod-app-vpc and dev-app-vpc should not communicate directly.
Here's how you'd set this up using a Transit Gateway:
-
Create a Transit Gateway:
bash aws ec2 create-transit-gateway --description "MyOrg-TGW" # Note down the TransitGatewayId (e.g., tgw-0abcdef1234567890) -
Create TGW Attachments for each VPC:
You'll need the VPC IDs and one subnet ID from each VPC to create the attachment.
```bash
aws ec2 create-transit-gateway-vpc-attachment \
--transit-gateway-id tgw-0abcdef1234567890 \
--vpc-id vpc-prodapp123 \
--subnet-ids subnet-prodapp1a subnet-prodapp1baws ec2 create-transit-gateway-vpc-attachment \
--transit-gateway-id tgw-0abcdef1234567890 \
--vpc-id vpc-devapp456 \
--subnet-ids subnet-devapp1a subnet-devapp1baws ec2 create-transit-gateway-vpc-attachment \
--transit-gateway-id tgw-0abcdef1234567890 \
--vpc-id vpc-shared789 \
--subnet-ids subnet-shared1a subnet-shared1b
```
Wait for attachments to be available. -
Create TGW Route Tables:
We need two route tables: one for the shared services VPC (allowing it to talk to both app VPCs) and one for the app VPCs (allowing them to talk only to shared services).-
Shared Services Route Table:
bash aws ec2 create-transit-gateway-route-table --transit-gateway-id tgw-0abcdef1234567890 --tag-specifications 'ResourceType=transit-gateway-route-table,Tags=[{Key=Name,Value=SharedServices-RT}]' # Get its ID: tgw-rtb-0fedcba9876543210
Associate theshared-services-vpcattachment with this RT:
bash aws ec2 associate-transit-gateway-route-table \ --transit-gateway-route-table-id tgw-rtb-0fedcba9876543210 \ --transit-gateway-attachment-id tgw-attach-shared789
Propagate routes from all attachments to this RT:
bash aws ec2 enable-transit-gateway-route-table-propagation \ --transit-gateway-route-table-id tgw-rtb-0fedcba9876543210 \ --transit-gateway-attachment-id tgw-attach-prodapp123 aws ec2 enable-transit-gateway-route-table-propagation \ --transit-gateway-route-table-id tgw-rtb-0fedcba9876543210 \ --transit-gateway-attachment-id tgw-attach-devapp456 aws ec2 enable-transit-gateway-route-table-propagation \ --transit-gateway-route-table-id tgw-rtb-0fedcba9876543210 \ --transit-gateway-attachment-id tgw-attach-shared789
This lets Shared Services talk to everyone it's attached to. -
Application Route Table:
bash aws ec2 create-transit-gateway-route-table --transit-gateway-id tgw-0abcdef1234567890 --tag-specifications 'ResourceType=transit-gateway-route-table,Tags=[{Key=Name,Value=AppIsolation-RT}]' # Get its ID: tgw-rtb-0123456789abcdef0
Associateprod-app-vpcanddev-app-vpcattachments with this RT:
bash aws ec2 associate-transit-gateway-route-table \ --transit-gateway-route-table-id tgw-rtb-0123456789abcdef0 \ --transit-gateway-attachment-id tgw-attach-prodapp123 aws ec2 associate-transit-gateway-route-table \ --transit-gateway-route-table-id tgw-rtb-0123456789abcdef0 \ --transit-gateway-attachment-id tgw-attach-devapp456
Add a static route to theshared-services-vpcCIDR (10.2.0.0/16) via theshared-services-vpcattachment:
bash aws ec2 create-transit-gateway-route \ --transit-gateway-route-table-id tgw-rtb-0123456789abcdef0 \ --destination-cidr-block 10.2.0.0/16 \ --transit-gateway-attachment-id tgw-attach-shared789
This ensuresprod-app-vpcanddev-app-vpccan only route traffic destined forshared-services-vpcthrough its attachment. Since there are no routes for 10.0.0.0/16 or 10.1.0.0/16 in this RT, they can't talk to each other directly.
-
-
Update VPC Route Tables:
Finally, in each VPC's route table(s) for the subnets attached to the TGW, add a route for the other VPCs (or a default route 0.0.0.0/0 if routing all traffic through TGW) pointing to the Transit Gateway network interface.
Forprod-app-vpcanddev-app-vpc:
bash # Example for prod-app-vpc route table aws ec2 create-route --route-table-id rtb-prodappmain \ --destination-cidr-block 10.2.0.0/16 \ --transit-gateway-id tgw-0abcdef1234567890 # Repeat for dev-app-vpc
Forshared-services-vpc:
bash # Example for shared-services-vpc route table aws ec2 create-route --route-table-id rtb-sharedmain \ --destination-cidr-block 10.0.0.0/16 \ --transit-gateway-id tgw-0abcdef1234567890 aws ec2 create-route --route-table-id rtb-sharedmain \ --destination-cidr-block 10.1.0.0/16 \ --transit-gateway-id tgw-0abcdef1234567890
This setup ensuresprod-app-vpccan talk toshared-services-vpc,dev-app-vpccan talk toshared-services-vpc, butprod-app-vpcanddev-app-vpcare isolated from each other.
4. Key Takeaways
- Transit Gateway provides a scalable and centralized way to manage connectivity between many VPCs and on-premises networks.
- VPC peering is a simpler, direct connection for a small number of VPCs, but it's not transitive and doesn't scale for complex meshes.
- Direct Connect offers a dedicated, private, and high-bandwidth connection from your data center to AWS, bypassing the public internet.
- TGW route tables are crucial for controlling traffic flow and implementing network segmentation policies between connected networks.
- Always update VPC route tables to direct traffic destined for other networks through the appropriate TGW or peering connection.
- Consider security groups and Network ACLs in your VPCs to add additional layers of network security alongside TGW routing.
- Inter-region TGW peering allows you to extend your hub-and-spoke network across different AWS regions.
Frequently asked about Advanced Virtual Private Cloud (VPC) Implementation
Study this next
Get the full network + curriculum
Clone the complete plan to your dashboard for unlimited AI-generated notes, practice quizzes, and a personalised revision schedule.
Save this course free