Multi Cloud

Cross Cloud Connectivity: AWS <> Azure

In today’s dynamic digital landscape, Organizations are embracing the versatility of multi-cloud strategies, leveraging the diverse offerings of public cloud providers such as Azure, AWS, and Google Cloud. Each platform boasts unique strengths, making them ideal for specific use cases. For instance, Azure excels in seamless integration with enterprise applications, while Google Cloud stands out for its robust machine learning capabilities, and AWS is renowned for its comprehensive suite of services.

Cross Cloud connectivity is crucial when implementing a multi-cloud solution. While larger enterprises often leverage Direct Connect and Express Route via their on-premises data centers for robust inter-cloud connectivity, startups and smaller businesses seek simpler, more agile solutions to kickstart their multi-cloud journey.

The solution is to establish a BGP-enabled connection between Azure and Amazon Web Services (AWS). By leveraging Azure VPN Gateway and AWS VPN, we can establish a connectivity between AWS and Azure with a bandwidth of 1.25Gbps.

Solution Architecture

Infrastructure as Code


module "aws_vpc" {
    source = "terraform-aws-modules/vpc/aws"

    name = "aws"
    cidr = "10.0.0.0/16"

    enable_nat_gateway = false
    enable_vpn_gateway = true
    propagate_private_route_tables_vgw = true
    propagate_public_route_tables_vgw = true

    azs = ["us-east-1a"]
    #private_subnets = ["10.0.1.0/24"]
    public_subnets = ["10.0.0.0/24"]

    tags = {
        terraform = "true"
        environment = "dev"
        costcenter = "it"
    }
}

resource "azurerm_resource_group"
"azure_vpc" {
    location =
        var.azure_location
    name = "azure-network-rg"
}

module "azure_vpc" {
    source = "Azure/vnet/azurerm"
    vnet_name = "azure"
    resource_group_name = azurerm_resource_group.azure_vpc.name
    use_for_each = true
    address_space = ["10.1.0.0/16"]
    subnet_prefixes = ["10.1.0.0/24", "10.1.255.0/24"]
    subnet_names = ["subnet1", "GatewaySubnet"]
    vnet_location =
        var.azure_location

    tags = {
        terraform = "true"
        environment = "dev"
        costcenter = "it"
    }
}

module "s2s_vpn" {
    source = "terraform-xops-modules/aws-azure-vpn/xops"
    aws_vpc_id = module.aws_vpc.vpc_id
    aws_vpn_gateway_id = module.aws_vpc.vgw_id
    azure_rsg_name = azurerm_resource_group.azure_vpc.name
    azure_vnet_name = module.azure_vpc.vnet_name
    azure_location = azurerm_resource_group.azure_vpc.location
    azure_gateway_subnet_id = module.azure_vpc.vnet_subnets_name_id.GatewaySubnet
}

Check the Terraform Registry for full documentation of the module and for more examples refer the Github Repository: terraform-xops-aws-azure-vpn

About Author

Parijat Ambilwade DevOps Engineer | Ex Amazonian
We're a DevSecOps based company based in India with a mission to make adoption of DevOps culture easier from startup to enterprise and remove the time spend on managing IT infrastructure.
Connect on LinkedIn
Share

Related Articles