3-networks-hub-and-spoke/modules/vpn-ha/main.tf (210 lines of code) (raw):
/**
* Copyright 2022 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/******************************************
HA VPN configuration
*****************************************/
locals {
network_name = "vpc-${var.vpc_name}"
psk_secret_data = chomp(data.google_secret_manager_secret_version.psk.secret_data)
}
data "google_secret_manager_secret_version" "psk" {
project = var.env_secret_project_id
secret = var.vpn_psk_secret_name
}
module "vpn_ha_region1_router1" {
source = "terraform-google-modules/vpn/google//modules/vpn_ha"
version = "~> 4.0"
project_id = var.project_id
region = var.default_region1
network = local.network_name
name = "vpn-${var.vpc_name}-${var.default_region1}-cr1"
peer_external_gateway = {
redundancy_type = "TWO_IPS_REDUNDANCY"
interfaces = [{
id = 0
ip_address = var.on_prem_router_ip_address1
},
{
id = 1
ip_address = var.on_prem_router_ip_address2
}]
}
router_name = var.region1_router1_name
tunnels = {
remote-0 = {
bgp_peer = {
address = var.region1_router1_tunnel0_bgp_peer_address
asn = var.bgp_peer_asn
}
bgp_peer_options = null
bgp_session_range = var.region1_router1_tunnel0_bgp_peer_range
ike_version = 2
vpn_gateway_interface = 0
peer_external_gateway_interface = 0
shared_secret = local.psk_secret_data
}
remote-1 = {
bgp_peer = {
address = var.region1_router1_tunnel1_bgp_peer_address
asn = var.bgp_peer_asn
}
bgp_peer_options = null
bgp_session_range = var.region1_router1_tunnel1_bgp_peer_range
ike_version = 2
vpn_gateway_interface = 1
peer_external_gateway_interface = 1
shared_secret = local.psk_secret_data
}
}
}
module "vpn_ha_region1_router2" {
source = "terraform-google-modules/vpn/google//modules/vpn_ha"
version = "~> 4.0"
project_id = var.project_id
region = var.default_region1
network = local.network_name
name = "vpn-${var.vpc_name}-${var.default_region1}-cr2"
peer_external_gateway = {
redundancy_type = "TWO_IPS_REDUNDANCY"
interfaces = [{
id = 0
ip_address = var.on_prem_router_ip_address1
},
{
id = 1
ip_address = var.on_prem_router_ip_address2
}]
}
router_name = var.region1_router2_name
tunnels = {
remote-0 = {
bgp_peer = {
address = var.region1_router2_tunnel0_bgp_peer_address
asn = var.bgp_peer_asn
}
bgp_peer_options = null
bgp_session_range = var.region1_router2_tunnel0_bgp_peer_range
ike_version = 2
vpn_gateway_interface = 0
peer_external_gateway_interface = 0
shared_secret = local.psk_secret_data
}
remote-1 = {
bgp_peer = {
address = var.region1_router2_tunnel1_bgp_peer_address
asn = var.bgp_peer_asn
}
bgp_peer_options = null
bgp_session_range = var.region1_router2_tunnel1_bgp_peer_range
ike_version = 2
vpn_gateway_interface = 1
peer_external_gateway_interface = 1
shared_secret = local.psk_secret_data
}
}
}
module "vpn_ha_region2_router1" {
source = "terraform-google-modules/vpn/google//modules/vpn_ha"
version = "~> 4.0"
project_id = var.project_id
region = var.default_region2
network = local.network_name
name = "vpn-${var.vpc_name}-${var.default_region2}-cr1"
peer_external_gateway = {
redundancy_type = "TWO_IPS_REDUNDANCY"
interfaces = [{
id = 0
ip_address = var.on_prem_router_ip_address1
},
{
id = 1
ip_address = var.on_prem_router_ip_address2
}]
}
router_name = var.region2_router1_name
tunnels = {
remote-0 = {
bgp_peer = {
address = var.region2_router1_tunnel0_bgp_peer_address
asn = var.bgp_peer_asn
}
bgp_peer_options = null
bgp_session_range = var.region2_router1_tunnel0_bgp_peer_range
ike_version = 2
vpn_gateway_interface = 0
peer_external_gateway_interface = 0
shared_secret = local.psk_secret_data
}
remote-1 = {
bgp_peer = {
address = var.region2_router1_tunnel1_bgp_peer_address
asn = var.bgp_peer_asn
}
bgp_peer_options = null
bgp_session_range = var.region2_router1_tunnel1_bgp_peer_range
ike_version = 2
vpn_gateway_interface = 1
peer_external_gateway_interface = 1
shared_secret = local.psk_secret_data
}
}
}
module "vpn_ha_region2_router2" {
source = "terraform-google-modules/vpn/google//modules/vpn_ha"
version = "~> 4.0"
project_id = var.project_id
region = var.default_region2
network = local.network_name
name = "vpn-${var.vpc_name}-${var.default_region2}-cr2"
peer_external_gateway = {
redundancy_type = "TWO_IPS_REDUNDANCY"
interfaces = [{
id = 0
ip_address = var.on_prem_router_ip_address1
},
{
id = 1
ip_address = var.on_prem_router_ip_address2
}]
}
router_name = var.region2_router2_name
tunnels = {
remote-0 = {
bgp_peer = {
address = var.region2_router2_tunnel0_bgp_peer_address
asn = var.bgp_peer_asn
}
bgp_peer_options = null
bgp_session_range = var.region2_router2_tunnel0_bgp_peer_range
ike_version = 2
vpn_gateway_interface = 0
peer_external_gateway_interface = 0
shared_secret = local.psk_secret_data
}
remote-1 = {
bgp_peer = {
address = var.region2_router2_tunnel1_bgp_peer_address
asn = var.bgp_peer_asn
}
bgp_peer_options = null
bgp_session_range = var.region2_router2_tunnel1_bgp_peer_range
ike_version = 2
vpn_gateway_interface = 1
peer_external_gateway_interface = 1
shared_secret = local.psk_secret_data
}
}
}