Ensure Direct Connect Connections Are Redundant
Overview
This check verifies that your AWS Direct Connect setup includes redundant connections across at least two distinct physical locations. Direct Connect provides a dedicated network link between your on-premises data center and AWS, but a single connection creates a single point of failure.
Risk
Without redundant connections at different locations, your AWS connectivity is vulnerable to:
- Fiber cuts - Construction or accidents can sever your connection
- Device failures - Router or switch malfunctions at a single location
- Facility outages - Power failures, natural disasters, or maintenance at one site
- Planned maintenance - AWS or partner maintenance may require taking a connection offline
A loss of Direct Connect can halt application traffic, break data replication, and block administrative access until connectivity is restored.
Remediation Steps
Prerequisites
You need:
- An AWS account with permissions to manage Direct Connect resources
- An existing Direct Connect connection (the check fails because you need a second one)
- A relationship with a Direct Connect Partner or colocation at AWS Direct Connect locations
Important: Creating a new Direct Connect connection requires coordination with AWS Direct Connect Partners and typically takes days to weeks to provision. This is not an instant fix.
AWS Console Method
-
Review your current connections
- Open the AWS Direct Connect console
- Ensure the region is set to US East (N. Virginia) (us-east-1)
- Click Connections in the left navigation
- Note the Location of your existing connection(s)
-
Identify a second Direct Connect location
- Click Create connection
- Review the available locations in the Location dropdown
- Choose a location that is geographically separate from your existing connection
- For example, if your primary is in an Equinix facility in Virginia, consider a facility in New York or another metro area
-
Create the redundant connection
- Enter a Connection name (e.g.,
secondary-dx-connection) - Select the Location you identified
- Choose the Bandwidth (should match or exceed your primary connection)
- Optionally add to a Link Aggregation Group (LAG) for bandwidth aggregation
- Click Create connection
- Enter a Connection name (e.g.,
-
Complete the physical setup
- Download the Letter of Authorization (LOA) from the connection details
- Provide the LOA to your Direct Connect Partner or colocation provider
- Work with them to establish the cross-connect to AWS equipment
-
Configure routing for failover
- Set up Virtual Interfaces on both connections
- Use BGP with appropriate AS path prepending or MED values to control traffic flow
- Test failover by temporarily disabling one connection
AWS CLI (optional)
List available Direct Connect locations
aws directconnect describe-locations --region us-east-1
View your existing connections
aws directconnect describe-connections --region us-east-1
Create a redundant connection at a different location
aws directconnect create-connection \
--region us-east-1 \
--location "EqNY2" \
--bandwidth "1Gbps" \
--connection-name "secondary-dx-connection" \
--tags Key=Name,Value="Secondary Direct Connect" Key=Role,Value=Secondary
Parameters:
--location- Use a location code different from your existing connection (get codes fromdescribe-locations)--bandwidth- Match your primary connection bandwidth (e.g.,1Gbps,10Gbps)--connection-name- A descriptive name for the connection
Check connection status
aws directconnect describe-connections \
--region us-east-1 \
--query 'connections[*].{Name:connectionName,Location:location,State:connectionState}'
Terraform (optional)
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
# Primary Direct Connect connection
resource "aws_dx_connection" "primary" {
name = "primary-dx-connection"
bandwidth = "1Gbps"
location = "EqDC2" # Example: Equinix DC2 in Ashburn, VA
tags = {
Name = "Primary Direct Connect"
Environment = "Production"
Role = "Primary"
}
}
# Secondary Direct Connect connection at different location
resource "aws_dx_connection" "secondary" {
name = "secondary-dx-connection"
bandwidth = "1Gbps"
location = "EqNY2" # Example: Equinix NY2 in New York
tags = {
Name = "Secondary Direct Connect"
Environment = "Production"
Role = "Secondary"
}
}
output "primary_connection_id" {
description = "ID of the primary Direct Connect connection"
value = aws_dx_connection.primary.id
}
output "secondary_connection_id" {
description = "ID of the secondary Direct Connect connection"
value = aws_dx_connection.secondary.id
}
Note: Replace the location values with actual Direct Connect location codes appropriate for your region. Use aws directconnect describe-locations to find available locations.
CloudFormation (optional)
Note: While CloudFormation supports AWS::DirectConnect::Connection, most organizations provision Direct Connect connections through the console or CLI due to the physical provisioning coordination required.
AWSTemplateFormatVersion: '2010-09-09'
Description: Deploy redundant AWS Direct Connect connections across two locations
Parameters:
PrimaryLocation:
Type: String
Description: Location code for primary Direct Connect connection
Default: EqDC2
SecondaryLocation:
Type: String
Description: Location code for secondary Direct Connect connection
Default: EqNY2
Bandwidth:
Type: String
Description: Connection bandwidth
Default: 1Gbps
AllowedValues:
- 1Gbps
- 10Gbps
- 100Gbps
Resources:
PrimaryConnection:
Type: AWS::DirectConnect::Connection
Properties:
ConnectionName: primary-dx-connection
Location: !Ref PrimaryLocation
Bandwidth: !Ref Bandwidth
Tags:
- Key: Name
Value: Primary Direct Connect
- Key: Role
Value: Primary
SecondaryConnection:
Type: AWS::DirectConnect::Connection
Properties:
ConnectionName: secondary-dx-connection
Location: !Ref SecondaryLocation
Bandwidth: !Ref Bandwidth
Tags:
- Key: Name
Value: Secondary Direct Connect
- Key: Role
Value: Secondary
Outputs:
PrimaryConnectionId:
Description: ID of the primary Direct Connect connection
Value: !Ref PrimaryConnection
SecondaryConnectionId:
Description: ID of the secondary Direct Connect connection
Value: !Ref SecondaryConnection
Verification
After creating your redundant connection:
- Go to the Direct Connect console
- Click Connections in the left navigation
- Verify you have at least two connections listed
- Check that the connections are at different locations (shown in the Location column)
- Confirm both connections show a state of Available
CLI verification commands
List all connections and their locations
aws directconnect describe-connections \
--region us-east-1 \
--query 'connections[*].{Name:connectionName,Location:location,State:connectionState}' \
--output table
Verify connections are at different locations
aws directconnect describe-connections \
--region us-east-1 \
--query 'connections[*].location' \
--output text | tr '\t' '\n' | sort | uniq -c
You should see at least two different locations listed.
Additional Resources
- AWS Direct Connect Resiliency Recommendations
- AWS Direct Connect Redundancy Toolkit
- Direct Connect Locations
- Direct Connect Partners
- Prowler Check Documentation
Notes
-
Lead time: Provisioning a new Direct Connect connection typically takes 1-4 weeks depending on the location and partner availability. Plan ahead.
-
Cost considerations: Each Direct Connect connection incurs hourly port fees plus data transfer charges. Budget for the additional connection cost.
-
VPN backup: AWS recommends maintaining a Site-to-Site VPN as a tertiary backup in case both Direct Connect connections fail simultaneously.
-
Active/Active routing: For best resilience, configure BGP to use both connections actively rather than keeping one as pure standby. This helps detect issues before a failover event.
-
Different providers: For maximum resilience, consider using different Direct Connect Partners for each connection to avoid single-provider dependencies.
-
Bandwidth sizing: Ensure each connection can handle your full traffic load independently in case one fails. Don't rely on both connections being available for normal operations.