Introducing HVN routes

The HVN route is a new resource that belongs to an HVN. It contains a CIDR block and targets a networking connection: either a peering or transit gateway attachment.

HVN routes provide a general view on how an HVN's traffic is routed across all networking connections and create a flexible way of managing these routing rules.

Migrating existing peerings and transit gateway attachments

There are two ways to migrate existing peerings and transit gateway attachments managed by Terraform:

  1. Recreate Resources with Updated Schema

  2. Re-Import with Updated Syntax:

The examples below walk through the schema upgrade and re-import steps.

Peering example

Given:

resource "hcp_hvn" "hvn" {
  hvn_id         = "prod-hvn"
  region         = "us-west-2"
  cloud_provider = "aws"
}

resource "hcp_aws_network_peering" "peering" {
  hvn_id              = hcp_hvn.hvn.hvn_id
  peer_vpc_id         = "vpc-845f29fc"
  peer_account_id     = "572816266891"
  peer_vpc_region     = "us-west-2"
  peer_vpc_cidr_block = "172.31.0.0/16"
}

Rewrite it to the new schema and add corresponding HVN route:

resource "hcp_hvn" "hvn" {
  hvn_id         = "prod-hvn"
  region         = "us-west-2"
  cloud_provider = "aws"
}

resource "hcp_aws_network_peering" "peering" {
  hvn_id = hcp_hvn.hvn.hvn_id
  // add `peering_id` that you can find in the HCP Portal
  peering_id      = "f03324a9-4377-4a54-9c15-958fd07ad77b"
  peer_vpc_id     = "vpc-845f29fc"
  peer_account_id = "572816266891"
  peer_vpc_region = "us-west-2"
  // remove `peer_vpc_cidr_block`
  // peer_vpc_cidr_block = "172.31.0.0/16"
}

// Add a `hcp_hvn_route` resource for the peering's CIDR
resource "hcp_hvn_route" "peering-route" {
  hvn_link = hcp_hvn.hvn.self_link
  // you can find this ID in the HCP Portal in the peering details page in the list of routes
  hvn_route_id     = "a8dda9a8-0f69-4fa0-b38c-55be302fdddb"
  destination_cidr = "172.31.0.0/16"
  target_link      = hcp_aws_network_peering.peering.self_link
}

Run import for the hcp_hvn_route:

$ terraform import hcp_hvn_route.peering-route prod-hvn:a8dda9a8-0f69-4fa0-b38c-55be302fdddb

Run terraform plan to make sure there are no changes detected by the Terraform:

$ terraform plan
No changes. Infrastructure is up-to-date.

Transit gateway attachment example

Given:

resource "hcp_hvn" "hvn" {
  hvn_id         = "prod-hvn"
  region         = "us-west-2"
  cloud_provider = "aws"
}

resource "hcp_aws_transit_gateway_attachment" "prod" {
  hvn_id                        = hcp_hvn.hvn.hvn_id
  transit_gateway_attachment_id = "prod-tgw-attachment"
  transit_gateway_id            = "tgw-0ee94b1a1167cf89d"
  resource_share_arn            = "arn:aws:ram:us-west-2:..."
  destination_cidrs             = ["10.1.0.0/24", "10.2.0.0/24"]
}

Rewrite it to the new schema and add corresponding HVN route:

resource "hcp_hvn" "hvn" {
  hvn_id         = "prod-hvn"
  region         = "us-west-2"
  cloud_provider = "aws"
}

resource "hcp_aws_transit_gateway_attachment" "prod" {
  hvn_id                        = hcp_hvn.hvn.hvn_id
  transit_gateway_attachment_id = "prod-tgw-attachment"
  transit_gateway_id            = "tgw-0ee94b1a1167cf89d"
  resource_share_arn            = "arn:aws:ram:us-west-2:..."
  // remove `destination_cidrs`
  // destination_cidrs             = ["10.1.0.0/24", "10.2.0.0/24"]
}

// add a new `hcp_hvn_route` for each CIDR associated with the transit gateway attachment
resource "hcp_hvn_route" "tgw-route-1" {
  hvn_link = hcp_hvn.hvn.self_link
  // you can find this ID in the HCP Portal in the TGW attachment details page in the list of Routes
  hvn_route_id     = "35392425-215a-44ec-bbd0-051bb777ce5f"
  destination_cidr = "10.1.0.0/24"
  target_link      = hcp_aws_transit_gateway_attachment.prod.self_link
}

resource "hcp_hvn_route" "tgw-route-2" {
  hvn_link = hcp_hvn.hvn.self_link
  // you can find this ID in the HCP Portal in the transit gateway attachment details page in the list of routes
  hvn_route_id     = "9867959a-d81b-4e52-ae8e-ca56f9dd06fc"
  destination_cidr = "10.2.0.0/24"
  target_link      = hcp_aws_transit_gateway_attachment.prod.self_link
}

Run import for each hcp_hvn_route you've added:

$ terraform import hcp_hvn_route.tgw-route-1 prod-hvn:35392425-215a-44ec-bbd0-051bb777ce5f
...

$ terraform import hcp_hvn_route.tgw-route-2 prod-hvn:9867959a-d81b-4e52-ae8e-ca56f9dd06fc
...

Run terraform plan to make sure there are no changes detected by the Terraform:

$ terraform plan
No changes. Infrastructure is up-to-date.